From 4491c03014008046746b569108b7ea629d963e71 Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Thu, 20 Jan 2022 15:06:05 -0500 Subject: [PATCH] bash-5.2-alpha release --- CHANGES | 323 + COMPAT | 38 +- CWRU/changelog | 11304 ++++----------- CWRU/misc/bison | 0 INSTALL | 116 +- MANIFEST | 56 +- Makefile.in | 77 +- NEWS | 139 + POSIX | 12 +- RBASH | 11 +- README | 6 +- aclocal.m4 | 896 +- alias.c | 2 +- array.c | 75 +- array.h | 67 +- array2.c | 1374 ++ arrayfunc.c | 373 +- arrayfunc.h | 54 +- assoc.c | 26 +- assoc.h | 3 +- bashansi.h | 5 +- bashhist.c | 15 +- bashjmp.h | 3 +- bashline.c | 330 +- builtins.h | 3 +- builtins/Makefile.in | 20 +- builtins/bashgetopt.c | 17 +- builtins/bashgetopt.h | 3 +- builtins/bind.def | 4 +- builtins/command.def | 4 +- builtins/common.c | 94 +- builtins/common.h | 43 +- builtins/complete.def | 12 +- builtins/declare.def | 1008 +- builtins/enable.def | 54 +- builtins/evalstring.c | 99 +- builtins/exec.def | 11 +- builtins/exit.def | 4 +- builtins/fc.def | 7 +- builtins/gen-helpfiles.c | 3 +- builtins/hash.def | 4 +- builtins/help.def | 5 +- builtins/history.def | 46 +- builtins/mapfile.def | 23 +- builtins/mkbuiltins.c | 30 +- builtins/printf.def | 58 +- builtins/read.def | 172 +- builtins/reserved.def | 12 +- builtins/set.def | 34 +- builtins/setattr.def | 7 +- builtins/shopt.def | 36 +- builtins/trap.def | 7 +- builtins/ulimit.def | 13 +- builtins/wait.def | 16 +- command.h | 14 +- config-bot.h | 4 +- config-top.h | 10 +- config.h.in | 55 +- configure | 13625 ++++++++++-------- configure.ac | 236 +- configure.in | 1161 -- doc/FAQ | 4 +- doc/Makefile.in | 30 +- doc/bash.0 | 3265 +++-- doc/bash.1 | 589 +- doc/bash.html | 660 +- doc/bash.info | 1918 ++- doc/bash.pdf | Bin 381560 -> 396970 bytes doc/bash.ps | 16959 +++++++++++----------- doc/bashref.dvi | Bin 789640 -> 816392 bytes doc/bashref.html | 5398 +++---- doc/bashref.info | 1917 ++- doc/bashref.pdf | Bin 769844 -> 790709 bytes doc/bashref.ps | 19507 +++++++++++++------------- doc/bashref.texi | 1234 +- doc/builtins.0 | 1114 +- doc/builtins.1 | 10 +- doc/builtins.ps | 4829 +++---- doc/rbash.0 | 7 +- doc/rbash.1 | 2 +- doc/rbash.ps | 10 +- doc/version.texi | 12 +- error.c | 28 +- error.h | 9 + eval.c | 5 +- examples/loadables/Makefile.in | 11 +- examples/loadables/README | 14 +- examples/loadables/accept.c | 43 +- examples/loadables/cat.c | 22 +- examples/loadables/cut.c | 4 + examples/loadables/getconf.c | 1163 ++ examples/loadables/getconf.h | 136 + examples/loadables/head.c | 3 + examples/loadables/realpath.c | 99 +- examples/loadables/rm.c | 6 +- examples/loadables/sleep.c | 98 +- examples/loadables/stat.c | 56 +- examples/loadables/tee.c | 7 +- examples/loadables/tty.c | 3 +- examples/misc/aliasconv.bash | 0 examples/misc/aliasconv.sh | 0 examples/misc/cshtobash | 0 examples/scripts/inpath | 0 examples/scripts/shprompt | 0 examples/scripts/xterm_title | 0 examples/scripts/zprintf | 0 examples/shellmath/LICENSE | 677 + examples/shellmath/README.md | 166 + examples/shellmath/assert.sh | 85 + examples/shellmath/faster_e_demo.sh | 68 + examples/shellmath/image.png | Bin 0 -> 48779 bytes examples/shellmath/runTests.sh | 124 + examples/shellmath/shellmath.sh | 1068 ++ examples/shellmath/slower_e_demo.sh | 55 + examples/shellmath/testCases.in | 142 + examples/shellmath/timingData.txt | 42 + execute_cmd.c | 284 +- expr.c | 17 +- externs.h | 11 +- findcmd.c | 16 +- flags.c | 2 +- general.c | 11 +- general.h | 3 +- hashcmd.c | 2 +- include/chartypes.h | 24 +- include/posixdir.h | 2 +- include/posixtime.h | 41 +- include/shmbchar.h | 2 +- include/stdc.h | 2 +- include/timer.h | 64 + include/typemax.h | 20 +- input.c | 2 +- jobs.c | 98 +- jobs.h | 4 + lib/glob/Makefile.in | 3 +- lib/glob/glob.c | 135 +- lib/glob/glob.h | 3 +- lib/glob/sm_loop.c | 55 +- lib/glob/smatch.c | 23 +- lib/glob/strmatch.h | 3 +- lib/intl/VERSION | 2 + lib/intl/ref-add.sin | 0 lib/intl/ref-del.sin | 0 lib/malloc/Makefile.in | 5 +- lib/malloc/malloc.c | 207 +- lib/malloc/mstats.h | 4 +- lib/readline/Makefile.in | 3 +- lib/readline/bind.c | 153 +- lib/readline/callback.c | 11 +- lib/readline/chardefs.h | 31 +- lib/readline/colors.c | 23 +- lib/readline/compat.c | 22 +- lib/readline/complete.c | 94 +- lib/readline/display.c | 118 +- lib/readline/doc/Makefile | 26 +- lib/readline/doc/hsuser.texi | 10 +- lib/readline/doc/rltech.texi | 53 +- lib/readline/doc/rluser.texi | 34 +- lib/readline/doc/version.texi | 8 +- lib/readline/funmap.c | 6 +- lib/readline/histexpand.c | 45 +- lib/readline/histfile.c | 12 +- lib/readline/histlib.h | 10 +- lib/readline/history.c | 4 +- lib/readline/history.h | 79 +- lib/readline/histsearch.c | 4 +- lib/readline/input.c | 319 +- lib/readline/isearch.c | 18 +- lib/readline/keymaps.h | 18 +- lib/readline/kill.c | 34 +- lib/readline/macro.c | 2 + lib/readline/mbutil.c | 36 +- lib/readline/misc.c | 64 +- lib/readline/nls.c | 10 +- lib/readline/parens.c | 8 +- lib/readline/posixdir.h | 2 +- lib/readline/posixtime.h | 84 + lib/readline/readline.c | 88 +- lib/readline/readline.h | 588 +- lib/readline/rldefs.h | 8 +- lib/readline/rlmbutil.h | 38 +- lib/readline/rlprivate.h | 312 +- lib/readline/rlshell.h | 12 +- lib/readline/rltty.c | 38 +- lib/readline/rltypedefs.h | 52 +- lib/readline/search.c | 48 +- lib/readline/shell.c | 4 +- lib/readline/signals.c | 73 +- lib/readline/terminal.c | 25 +- lib/readline/text.c | 38 +- lib/readline/tilde.h | 22 +- lib/readline/undo.c | 6 +- lib/readline/util.c | 7 +- lib/readline/vi_mode.c | 123 +- lib/readline/xmalloc.h | 8 +- lib/sh/Makefile.in | 17 +- lib/sh/casemod.c | 10 +- lib/sh/fmtullong.c | 2 +- lib/sh/input_avail.c | 2 +- lib/sh/setlinebuf.c | 5 - lib/sh/shquote.c | 2 +- lib/sh/snprintf.c | 20 +- lib/sh/strftime.c | 9 +- lib/sh/strtoimax.c | 10 +- lib/sh/strtol.c | 2 +- lib/sh/strtoll.c | 4 +- lib/sh/strtoull.c | 4 +- lib/sh/strtoumax.c | 10 +- lib/sh/timers.c | 262 + lib/sh/unicode.c | 2 +- lib/sh/winsize.c | 10 +- lib/sh/zread.c | 6 +- lib/termcap/termcap.c | 7 +- lib/tilde/Makefile.in | 5 +- lib/tilde/tilde.h | 22 +- locale.c | 18 +- m4/gettext.m4 | 10 +- m4/threadlib.m4 | 6 +- make_cmd.c | 31 +- nojobs.c | 2 +- parse.y | 1072 +- parser-built | 19 +- parser.h | 4 +- patchlevel.h | 4 +- pcomplete.c | 4 +- pcomplib.c | 4 +- po/bash.pot | 827 +- po/de.gmo | Bin 94744 -> 133915 bytes po/de.po | 966 +- po/el.gmo | Bin 74685 -> 84727 bytes po/el.po | 853 +- po/id.gmo | Bin 87778 -> 100273 bytes po/id.po | 2749 ++-- po/pt_BR.gmo | Bin 182906 -> 182909 bytes po/pt_BR.po | 6 +- po/ro.gmo | Bin 13361 -> 13353 bytes po/ro.po | 1700 +-- po/zh_CN.gmo | Bin 149832 -> 169521 bytes po/zh_CN.po | 2354 ++-- po/zh_TW.gmo | Bin 152061 -> 152761 bytes po/zh_TW.po | 17 +- print_cmd.c | 13 +- quit.h | 8 +- redir.c | 49 +- redir.h | 5 +- shell.c | 30 +- shell.h | 19 +- sig.c | 2 +- sig.h | 12 +- siglist.c | 3 +- stringlib.c | 15 +- subst.c | 879 +- subst.h | 12 +- support/Makefile.in | 10 +- support/bashbug.sh | 2 +- support/bashbug.sh.in | 2 +- support/bashversion.c | 2 +- support/config.guess | 1272 +- support/config.sub | 111 +- support/shobj-conf | 12 +- support/signames.c | 2 +- test.c | 41 +- test.h | 5 +- tests/alias.right | 1 + tests/alias.tests | 8 + tests/arith.right | 4 +- tests/arith.tests | 4 +- tests/array-at-star | 0 tests/array.right | 60 +- tests/array.tests | 2 + tests/array15.sub | 15 + tests/array27.sub | 8 +- tests/array29.sub | 86 + tests/array30.sub | 46 + tests/assoc.right | 184 +- tests/assoc.tests | 24 +- tests/assoc11.sub | 2 +- tests/assoc12.sub | 74 + tests/assoc13.sub | 44 + tests/assoc14.sub | 35 + tests/assoc15.sub | 92 + tests/assoc16.sub | 56 + tests/assoc17.sub | 58 + tests/assoc18.sub | 59 + tests/assoc9.sub | 29 + tests/builtins.right | 13 +- tests/builtins.tests | 4 +- tests/builtins5.sub | 11 +- tests/case.right | 1 + tests/case.tests | 4 + tests/complete.right | 44 +- tests/comsub-eof.right | 18 +- tests/comsub-eof0.sub | 2 + tests/comsub-eof5.sub | 6 + tests/comsub-posix.right | 20 +- tests/comsub-posix.tests | 26 + tests/comsub-posix5.sub | 70 + tests/comsub.right | 9 + tests/comsub.tests | 1 + tests/comsub5.sub | 43 + tests/cond.right | 8 +- tests/cond.tests | 18 + tests/cprint.right | 2 +- tests/dollar-at-star | 0 tests/dynvar.tests | 13 +- tests/errors.right | 164 +- tests/errors.tests | 5 + tests/errors7.sub | 2 + tests/exec.right | 13 +- tests/exec3.sub | 37 +- tests/exp.right | 15 +- tests/exp.tests | 1 + tests/exp13.sub | 34 + tests/exp8.sub | 3 +- tests/exportfunc.right | 2 +- tests/exportfunc.tests | 10 +- tests/extglob.right | 76 +- tests/extglob.tests | 6 +- tests/extglob2.sub | 26 +- tests/extglob6.sub | 43 + tests/extglob7.sub | 97 + tests/func.tests | 6 + tests/getopts10.sub | 4 +- tests/glob.right | 6 +- tests/glob.tests | 1 + tests/glob10.sub | 32 + tests/glob5.sub | 2 + tests/glob6.sub | 1 + tests/heredoc.right | 36 +- tests/heredoc.tests | 7 + tests/heredoc6.sub | 50 + tests/heredoc7.sub | 29 + tests/herestr.tests | 6 + tests/history.right | 37 +- tests/history.tests | 1 + tests/history6.sub | 55 + tests/jobs.right | 1 + tests/jobs4.sub | 2 + tests/jobs5.sub | 5 + tests/jobs7.sub | 2 + tests/lastpipe.right | 2 + tests/lastpipe.tests | 1 + tests/lastpipe3.sub | 11 + tests/mapfile.right | 1 + tests/mapfile.tests | 7 +- tests/misc/run-r2.sh | 0 tests/misc/sigint-1.sh | 0 tests/misc/sigint-2.sh | 0 tests/misc/sigint-3.sh | 0 tests/misc/sigint-4.sh | 0 tests/nameref.right | 75 + tests/nameref15.sub | 10 + tests/nameref18.sub | 16 + tests/nameref19.sub | 9 + tests/nameref22.sub | 97 + tests/nameref23.sub | 82 + tests/new-exp.right | 44 +- tests/new-exp.tests | 4 + tests/new-exp10.sub | 4 +- tests/new-exp14.sub | 19 +- tests/new-exp16.sub | 63 + tests/nquote.right | 6 + tests/nquote.tests | 8 + tests/nquote4.sub | 6 + tests/posix2.right | 6 +- tests/posix2.tests | 8 +- tests/posixexp.right | 6 +- tests/precedence.tests | 0 tests/printf2.sub | 8 +- tests/quotearray.right | 152 + tests/quotearray.tests | 164 + tests/quotearray1.sub | 131 + tests/quotearray2.sub | 107 + tests/quotearray3.sub | 117 + tests/quotearray4.sub | 116 + tests/quotearray5.sub | 124 + tests/read.right | 24 +- tests/read.tests | 6 + tests/read1.sub | 1 + tests/read2.sub | 39 +- tests/read3.sub | 1 + tests/read7.sub | 61 + tests/read8.sub | 15 + tests/rsh.right | 2 +- tests/run-all | 4 +- tests/run-execscript | 17 + tests/run-minimal | 4 +- tests/run-quotearray | 2 + tests/shopt.right | 14 + tests/tilde.tests | 4 +- tests/tilde2.right | 4 + tests/tilde2.tests | 2 + tests/tilde3.sub | 26 + tests/type.right | 4 +- tests/varenv.right | 13 +- tests/varenv.tests | 1 + tests/varenv13.sub | 1 + tests/varenv22.sub | 17 + tests/vredir.right | 1 + tests/vredir.tests | 1 + tests/vredir8.sub | 13 + trap.c | 92 +- trap.h | 3 +- unwind_prot.c | 9 +- variables.c | 227 +- variables.h | 4 +- version.c | 4 +- y.tab.c | 2989 ++-- y.tab.h | 19 +- 409 files changed, 63493 insertions(+), 54853 deletions(-) mode change 100755 => 100644 CWRU/misc/bison create mode 100644 array2.c delete mode 100644 configure.in create mode 100644 examples/loadables/getconf.c create mode 100644 examples/loadables/getconf.h mode change 100755 => 100644 examples/misc/aliasconv.bash mode change 100755 => 100644 examples/misc/aliasconv.sh mode change 100755 => 100644 examples/misc/cshtobash mode change 100755 => 100644 examples/scripts/inpath mode change 100755 => 100644 examples/scripts/shprompt mode change 100755 => 100644 examples/scripts/xterm_title mode change 100755 => 100644 examples/scripts/zprintf create mode 100644 examples/shellmath/LICENSE create mode 100644 examples/shellmath/README.md create mode 100644 examples/shellmath/assert.sh create mode 100644 examples/shellmath/faster_e_demo.sh create mode 100644 examples/shellmath/image.png create mode 100644 examples/shellmath/runTests.sh create mode 100644 examples/shellmath/shellmath.sh create mode 100644 examples/shellmath/slower_e_demo.sh create mode 100644 examples/shellmath/testCases.in create mode 100644 examples/shellmath/timingData.txt create mode 100644 include/timer.h mode change 100755 => 100644 lib/intl/ref-add.sin mode change 100755 => 100644 lib/intl/ref-del.sin create mode 100644 lib/readline/posixtime.h create mode 100644 lib/sh/timers.c mode change 100755 => 100644 support/config.guess mode change 100755 => 100644 support/config.sub mode change 100755 => 100644 tests/array-at-star create mode 100644 tests/array29.sub create mode 100644 tests/array30.sub create mode 100644 tests/assoc12.sub create mode 100644 tests/assoc13.sub create mode 100644 tests/assoc14.sub create mode 100644 tests/assoc15.sub create mode 100644 tests/assoc16.sub create mode 100644 tests/assoc17.sub create mode 100644 tests/assoc18.sub create mode 100644 tests/comsub-posix5.sub create mode 100644 tests/comsub5.sub mode change 100755 => 100644 tests/dollar-at-star create mode 100644 tests/exp13.sub create mode 100644 tests/extglob6.sub create mode 100644 tests/extglob7.sub create mode 100644 tests/glob10.sub create mode 100644 tests/heredoc6.sub create mode 100644 tests/heredoc7.sub create mode 100644 tests/history6.sub create mode 100644 tests/lastpipe3.sub mode change 100755 => 100644 tests/misc/run-r2.sh mode change 100755 => 100644 tests/misc/sigint-1.sh mode change 100755 => 100644 tests/misc/sigint-2.sh mode change 100755 => 100644 tests/misc/sigint-3.sh mode change 100755 => 100644 tests/misc/sigint-4.sh create mode 100644 tests/nameref22.sub create mode 100644 tests/nameref23.sub create mode 100644 tests/new-exp16.sub create mode 100644 tests/nquote4.sub mode change 100755 => 100644 tests/precedence.tests create mode 100644 tests/quotearray.right create mode 100644 tests/quotearray.tests create mode 100644 tests/quotearray1.sub create mode 100644 tests/quotearray2.sub create mode 100644 tests/quotearray3.sub create mode 100644 tests/quotearray4.sub create mode 100644 tests/quotearray5.sub create mode 100644 tests/read7.sub create mode 100644 tests/read8.sub create mode 100644 tests/run-quotearray create mode 100644 tests/tilde3.sub create mode 100644 tests/varenv22.sub create mode 100644 tests/vredir8.sub diff --git a/CHANGES b/CHANGES index 7a47c7c5..682d1e37 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,326 @@ +This document details the changes between this version, bash-5.2-alpha, and +the previous version, bash-5.1-release. + +1. Changes to Bash + +a. Fixed a bug that assigned a value to the variable name supplied as an + argument to `wait -p' when there were no jobs. + +b. Fixed a bug that resulted in performing incorrect word expansion on the + key/value pairs in a compound array assignment. + +c. Fixed a bug that could put the child forked to run a command substitution + into the wrong process group. + +d. Fixed a problem that could cause the lastpipe option to work incorrectly if + file descriptor 0 was closed. + +e. Bash tries to suppress traps if a forked child receives a trapped signal + before it has a chance to reset its signal handlers. + +f. Fixed several memory leaks in compound array assignments. + +g. Fixed a problem with performing an assignment with `+=' to an array element + that was the value of a nameref. + +h. Fixed a bug that could cause a nameref containing an array reference using + `@' or `*' not to expand to multiple words. + +i. Fixed a bug where extended glob functions could match `.' or `..' when it + wasn't explicitly specified, even if dotglob was set. + +j. Fixed a bug that caused non-interactive posix-mode shells not to exit on a + variable assignment error while assigning into the temporary environment. + +k. Fixed a bug that caused parsing errors if an alias contained a compound + array assignment. + +l. Fixed a couple of instances where bash checked syntax too aggressively when + trying to determine how to add a partial command to command-oriented + history. + +m. Fixed a parser problem that caused it not to allow reserved words to follow + the `((' and `[[' commands. + +n. Fixed a bad offset calculation when using negative offsets to `history -d'. + +o. Fixed an off-by-one error that caused a read past the end of a buffer when + reading a multibyte character from the output of a command substitution. + +p. Fixed a problem with a failed `exec' command not setting $? to the right + value for an exit trap. + +q. Fixed a problem that caused bash not to unlink FIFOs created as part of + expanding redirections for an external command. + +r. Fixed a bug that could cause aliases not to be expanded in case statements. + +s. Fixed a bug that could cause word completion to attempt programmable + completion for the target of a redirection, instead of filename completion. + +t. Fixed a bug that could result in errors after rebinding a key sequence with + `bind -x' multiple times. + +u. Fixed a problem that could result in not quoting the result when performing + command name completion with a glob pattern in the command name. + +v. `mapfile' now uses fully-buffered reads in more cases, which should improve + bulk read performance. + +w. Fixed a bug that caused `wait -n' to not reset its internal state when + interrupted by a signal, resulting in subsequent calls failing. + +x. Fixed a bug with parsing numeric arguments to readline key sequences + installed with `bind -x'. + +y. Bash suppresses forking in several additional cases, including most uses + of $( 128 in the current encoding. + +hh. Fixed a problem that could cause the shell to attempt to free unallocated + memory if an expansion error occurred. + +ii. Fixed a bug in the bash malloc implementation of malloc_usable_size. Bash + did not use it, but it could cause problems with library functions that + did. + +jj. If the `exec' builtin fails, and the shell does not exit, it restores + trapped signals to their trapped state. + +kk. Fixed a bug that could cause variable assignment arguments to `declare' to + expand variables using attributes that the call to declare was turning off. + +ll. Fixed a bug with LINENO and arithmetic for commands. + +mm. Fixed a posix-mode bug that caused tildes not to be expanded after an + unquoted colon on the right side of an assignment statement. + +nn. Fixed a problem with `caller' and line numbers when executing an ERR trap. + +oo. Fixed a problem that could make the value returned by ${a:=b} not be the + final value assigned to a (e.g., if `a' has an attribute that modifies + the value on assignment). + +pp. Fixed a problem with saving multi-line here-documents to the history list + where the here-document delimiter does not appear on the first line. + +qq. Fixed a bug with using += to assign to dynamic variables like RANDOM. + +rr. Fixed a bug that caused `set -n' to modify $? if set after execution had + started. + +ss. Builtins like printf/read/wait now behave more consistently when assigning + arbitrary keys to associative arrays (like `]'. when appropriately quoted). + +tt. Fixed a problem with here-document collection printing the wrong prompt + when parsing a compound list in an interactive shell. + +uu. Fixed a problem with quoting shell expansion characters (like `$') when + they appear in a tab-completed word along with characters that do need + quoting (e.g.. $HOME/VirtualBox VMs). + +2. Changes to Readline + +a. Fixed a problem with cleaning up active marks when using callback mode. + +b. Fixed a problem with arithmetic comparison operators checking the version. + +c. Fixed a problem that could cause readline not to build on systems without + POSIX signal functions. + +d. Fixed a bug that could cause readline to crash if the application removed + the callback line handler before readline read all typeahead. + +e. Added additional checks for read errors in the middle of readline commands. + +f. Fixed a redisplay problem that occurred when switching from the digit- + argument prompt `(arg: N)' back to the regular prompt and the regular + prompt contained invisible characters. + +g. Fixed a problem with restoring the prompt when aborting an incremental + search. + +h. Fix a problem with characters > 128 not being displayed correctly in certain + single-byte encodings. + +i. Fixed a problem with unix-filename-rubout that caused it to delete too much + when applied to a pathname consisting only of one or more slashes. + +j. Fixed a display problem that caused the prompt to be wrapped incorrectly if + the screen changed dimensions during a call to readline() and the prompt + became longer than the screen width. + +k. Fixed a problem that caused the \r output by turning off bracketed paste + to overwrite the line if terminal echo was disabled. + +l. Fixed a bug that could cause colored-completion-prefix to not display if + completion-prefix-display-length was set. + +m. Fixed a problem with line wrapping prompts when a group of invisible + characters runs to the right edge of the screen and the prompt extends + longer then the screen width. + +n. Fixed a couple problems that could cause rl_end to be set incorrectly by + transpose-words. + +3. New Features in Bash + +a. The bash malloc returns memory that is aligned on 16-byte boundaries. + +b. There is a new internal timer framework used for read builtin timeouts. + +c. Rewrote the command substitution parsing code to call the parser recursively + and rebuild the command string from the parsed command. This allows better + syntax checking and catches errors much earlier. + +d. The `ulimit' builtin now treats an operand remaining after all of the options + and arguments are parsed as an argument to the last command specified by + an option. This is for POSIX compatibility. + +e. Here-document parsing now handles $'...' and $"..." quoting when reading the + here-document body. + +f. The `shell-expand-line' and `history-and-alias-expand-line' bindable readline + commands now understand $'...' and $"..." quoting. + +g. There is a new `spell-correct-word' bindable readline command to perform + spelling correction on the current word. + +h. The `unset' builtin now attempts to treat arguments as array subscripts + without parsing or expanding the subscript, even when `assoc_expand_once' + is not set. + +i. There is a default value for $BASH_LOADABLES_PATH in config-top.h. + +j. Associative array assignment and certain instances of referencing (e.g., + `test -v' now allow `@' and `*' to be used as keys. + +k. Bash attempts to expand indexed array subscripts only once when executing + shell constructs and word expansions. + +l. The `unset' builtin allows a subscript of `@' or `*' to unset a key with + that value for associative arrays instead of unsetting the entire array + (which you can still do with `unset arrayname'). For indexed arrays, it + removes all elements of the array without unsetting it (like `A=()'). + +m. Additional builtins (printf/test/read/wait) do a better job of not + parsing array subscripts if array_expand_once is set. + +n. New READLINE_ARGUMENT variable set to numeric argument for readline commands + defined using `bind -x'. + +o. The new `varredir_close' shell option causes bash to automatically close + file descriptors opened with {var}&WORD- redirection has WORD expand to the empty + string, treat the redirection as [N]<&- or [N]>&- and close file descriptor + N (default 0). + +w. Invalid parameter transformation operators are now invalid word expansions, + and so cause fatal errors in non-interactive shells. + +x. New shell option: patsub_replacement. When enabled, a `&' in the replacement + string of the pattern substitution expansion is replaced by the portion of + the string that matched the pattern. Backslash will escape the `&' and + insert a literal `&'. + +y. `command -p' no longer looks in the hash table for the specified command. + +z. The new `--enable-translatable-strings' option to `configure' allows $"..." + support to be compiled in or out. + +aa. The new `globskipdots' shell option forces pathname expansion never to + return `.' or `..' unless explicitly matched. + +bb. Array references using `@' and `*' that are the value of nameref variables + (declare -n ref='v[@]' ; echo $ref) no longer cause the shell to exit if + set -u is enabled and the array (v) is unset. + +4. New Features in Readline + +a. There is now an HS_HISTORY_VERSION containing the version number of the + history library for applications to use. + +b. History expansion better understands multiple history expansions that may + contain strings that would ordinarily inhibit history expansion (e.g., + `abc!$!$'). + +c. There is a new framework for readline timeouts, including new public + functions to set timeouts and query how much time is remaining before a + timeout hits, and a hook function that can trigger when readline times + out. There is a new state value to indicate a timeout. + +d. Automatically bind termcap key sequences for page-up and page-down to + history-search-backward and history-search-forward, respectively. + +e. There is a new `fetch-history' bindable command that retrieves the history + entry corresponding to its numeric argument. Negative arguments count back + from the end of the history. + +f. `vi-undo' is now a bindable command. + +g. There is a new option: `enable-active-region'. This separates control of + the active region and bracketed-paste. It has the same default value as + bracketed-paste, and enabling bracketed paste enables the active region. + Users can now turn off the active region while leaving bracketed paste + enabled. + +h. rl_completer_word_break_characters is now `const char *' like + rl_basic_word_break_characters. + +i. The non-incremental history searches now leave the current history offset + at the position of the last matching history entry, like incremental search. + +j. Readline looks in $LS_COLORS for a custom filename extension + (*.readline-colored-completion-prefix) and uses that as the default color + for the common prefix displayed when `colored-completion-prefix' is set. + +------------------------------------------------------------------------------ This document details the changes between this version, bash-5.1-rc3, and the previous version, bash-5.1-rc2. diff --git a/COMPAT b/COMPAT index 5cfb8360..aa25f19d 100644 --- a/COMPAT +++ b/COMPAT @@ -2,11 +2,11 @@ Compatibility with previous versions ==================================== This document details the incompatibilities between this version of bash, -bash-5.1, and the previous widely-available versions, bash-3.2 (which is +bash-5.2, and the previous widely-available versions, bash-3.2 (which is still the `standard' version for Mac OS X), 4.2/4.3 (which are still -standard on a few Linux distributions), and bash-4.4/bash-5.0, the current -widely-available versions. These were discovered by users of bash-2.x -through 5.x, so this list is not comprehensive. Some of these +standard on a few Linux distributions), and bash-4.4/bash-5.0/bash-5.1, +the current widely-available versions. These were discovered by users of +bash-2.x through 5.x, so this list is not comprehensive. Some of these incompatibilities occur between the current version and versions 2.0 and above. @@ -419,6 +419,14 @@ above. options that posix mode modifies to the state they had before enabling posix mode. Previous versions restored these options to default values. +66. Bash-5.2 attempts to prevent double-expansion of array subscripts under + certain circumstances, especially arithmetic evaluation, by acting as if + the `assoc_expand_once' shell option were set. + +67. The `unset' builtin in bash-5.2 treats array subscripts `@' and `*' + differently than previous versions, and differently depending on whether + the array is indexed or associative. + Shell Compatibility Level ========================= @@ -543,6 +551,28 @@ compat50 (set using BASH_COMPAT) output in a format that can be reused as input (-l). Bash-5.1 suppresses that message if -l is supplied +compat51 (set using BASH_COMPAT) + - The `unset' builtin will unset the array a given an argument like + `a[@]'. Bash-5.2 will unset an element with key `@' (associative + arrays) or remove all the elements without unsetting the array + (indexed arrays) + - arithmetic commands ( ((...)) ) and the expressions in an arithmetic + for statement can be expanded more than once + - expressions used as arguments to arithmetic operators in the [[ + conditional command can be expanded more than once + - the expressions in substring parameter brace expansion can be + expanded more than once + - the expressions in the $(( ... )) word expansion can be expanded + more than once + - arithmetic expressions used as indexed array subscripts can be + expanded more than once; + - `test -v', when given an argument of A[@], where A is an existing + associative array, will return true if the array has any set + elements. Bash-5.2 will look for a key named `@'; + - the ${param[:]=value} word expansion will return VALUE, before any + variable-specific transformations have been performed (e.g., + converting to lowercase). Bash-5.2 will return the final value + assigned to the variable, as POSIX specifies ------------------------------------------------------------------------------- diff --git a/CWRU/changelog b/CWRU/changelog index 27f62c02..596830c2 100644 --- a/CWRU/changelog +++ b/CWRU/changelog @@ -1,9182 +1,2916 @@ - 9/15/2016 + 12/6/2020 --------- -[bash-4.4 released] - 9/17 - ---- -builtins/common.c - - display_signal_list: if 0 is supplied as an argument to kill -l, - display a signal-out-of-range error. Fixes bug reported by - Martijn Dekker - - 9/18 - ---- -print_cmd.c - - print_heredoc_bodies: take a list of redirections, all here documents, - and print the here-document bodies including the ending delimiter, - followed by a newline - - print_redirection_list: print the heredoc headers the first time - through the list of redirections so we print them in the same left- - to-right order they're supplied; print the bodies and delimiters with - print_heredoc_bodies after we print all the redirections if we're - not printing a list of commands (printing_connection == 0). Fix for - problem reported by Isabella Parakiss - - print_deferred_heredocs: don't print heredoc headers, since they're - now printed in print_redirection_list - - print_deferred_heredocs: use print_heredoc_bodies - - 9/20 - ---- -builtins/mapfile.def - - readarray: update usage synopsis to include -d delim. Report and - fix from jhankins@homewood.k12.al.us - -test.c - - test_binop: if op[0] == '-', make sure op[1] != 0 before checking - op[2] or op[3]. Fixes out-of-bounds read reported by Franco - Costantini - -parse.y - - cond_term: if yylval.word->word[0] == '-' make sure word[1] != 0 - before checking word[2] and calling test_unop. Fixes out-of-bounds - read reported by Franco Costantini - - make sure to check all instances of the return value of the - simple_command production before trying to hook redirections onto it, - since it can potentially return NULL. - Reported by Franco Costantini - - 9/21 - ---- -parse.y - - token_is_assignment: make sure to check that the return value from - assignment() finds the `=' we just added at index I to avoid false - positives from g=g=g=g=g=g=(). Reported by Franco Costantini - - - 9/22 - ---- -parse.y - - token_is_assignment: if we're not using the bash malloc (which has - guard bytes after the requested allocation size), use a new - buffer so we can make sure it's big enough to hold the current - token and at least two additional characters. Reported by - Franco Costantini - - 9/23 - ---- -execute_cmd.c - - execute_in_subshell: call without_job_control for both job control - and non-job-control builds to avoid waiting for last_made_pid - inherited from parent shell. Related to fix from 8/4 to - initialize_subshell. Fixes bug reported by Martijn Dekker - - -builtins/declare.def - - local_builtin: allow `local --help' to work even when not executing - a function. Suggestion from Norm Abramovitz - - 9/25 - ---- -builtins/printf.def - - bexpand: if passed a null or empty string, return a newly-allocated - empty string (so the return value can always be freed) instead of - NULL. - - printstr: if passed a null string, treat it as if it were an empty - string so any precision or fieldwidth arguments are handled - correctly. Report from isabella parakiss - -subst.c - - skip_matched_pair: make the flags argument of 1 affect whether or - not backslash can quote characters in the string, so it affects - all quoting mechanisms - -arrayfunc.c - - unbind_array_element: now takes a third (flags) argument; flags&1 - means to not expand an associative array index. This is only called - from a shell builtin context, which means the argument should have - already undergone word expansion, so it should be ok. Will still - be a problem for uses like "unset -v 'var[$ind]'", quoted to avoid - globbing - - valid_array_reference: pass second flags argument to skipsubscript; - still set to 0 by all callers - -arrayfunc.h - - unbind_array_element: updated prototype - -builtins/set.def - - unset_builtin: add third argument of 1 to unbind_array_element calls - [TEMPORARILY DISABLED] - - unset_builtin: call valid_array_reference with second arg of 1 to - handle unmatched pairs of quotes and [/] - -array.c - - array_reference: optimize access locality as well as sequential - access by adding ability to start from last-accessed element and move - backwards or forwards depending on the desired index. Inspired by - report from Tom McCurdy and followup from - Christian Franke - -variables.c - - all_array_variables: include associative arrays, not just indexed - arrays. Reported by Grisha Levit - -execute_cmd.c - - execute_disk_command: if we're optimizing out the fork (CMD_NO_FORK), - decrement the shell level so we don't end up incrementing it twice. - We should decrement the shell level for an implicit exec like an - explicit one. Reported by Stephane Chazelas - - -builtins/exec.def - - exec_builtin: don't bother to decrement the shell level if we are - already in a `(command)' subshell. Reported by Stephane Chazelas - - -lib/readline/macro.c - - macro_level: count of macro nesting level, maintained by - _rl_push_executing_macro and _rl_pop_executing macro - - _rl_with_macro_input: if current nesting level exceeds - MAX_MACRO_LEVEL, abort the current command line with _rl_abort_internal - and return to the top level. Reported by Christian Klomp - - -lib/readine/history.c - - add_history: if allocating the history list for the first time, - make sure the max history list size isn't so large that it will - cause allocation errors. Cap it at MAX_HISTORY_INITIAL_SIZE - (8192). Reported by Sean Zha - -jobs.c - - wait_for: if a foreground job with job control enabled is killed by a - SIGINT and sourcelevel != 0, act as if we received the SIGINT so the - file sourcing can be terminated. Reported by PePa - - - 9/26 - ---- -subst.c - - read_comsub: only warn once for null bytes in command substitution - output, instead of once for every null byte - -arrayfunc.c - - array_variable_part: now takes a `flags' argument; changed all callers - to initially pass 0 - - array_variable_name: now takes a `flags' argument; changed all callers - to initially pass 0 - - array_variable_name: pass `flags' argument to skipsubscript instead - of just passing 0 - -arrayfunc.h - - array_variable_{name,part}: added new argument to prototypes - - 9/29 - ---- -bashline.c - - bash_directory_completion_hook: don't bother to try and expand a - ${ or $( that isn't complete; expand_prompt_string will complain. - Fixes reports from John Passaro and - Valentin Bajrami - -lib/readline/history.c - - _hs_append_history_line: use a strategy that attempts to avoid - realloc copying memory to a newly-allocated block if the history - line we're appending to gets `too long' (currently 256 bytes). - We reallocate in powers of 2 starting at 512, and rely on realloc - not allocating a new block and copying into it if the size is the - same as the last call to realloc. Addresses issue raised by - Hubert Schmid - -trap.h - - check_signals: new extern declaration - - trapped_signal_received: new extern declaration - -builtins/read.def - - read_builtin: if one of the zread* functions returns < 0 (which - usually only happens in Posix mode), make sure we call check_signals() - before eventually calling run_pending_traps() because zread() isn't - going to call it - - include trap.h for correct extern functions and variable declarations - -lib/sh/zread.c - - zread: if executing a builtin, call check_signals_and_traps() for - backwards compatibility. If not, call check_signals() only, because - we don't want to run traps during, for instance, reading command - substitution output. Fixes race condition bug reported by Luiz Angelo - Daros de Luca - - 9/30 - ---- -subst.c - - command_substitute: reset parse_and_execute_level to 0 in the child - process, since it's independent of the other parse_and_execute - calls. Adds command substitution inside other parse_and_execute - calls optimizations to suppress forks, as suggested by - Martijn Dekker - - 10/3 - ---- -configure.ac - - SHOBJ_STATUS: make sure it defaults to unsupported and is substituted - if the shobj-conf script isn't run. Fixes `make install' bug with - a minimal config reported by Andrew Tomazos - - 10/5 - ---- -support/shobj-conf - - darwin: set compatibility_version for a shared build of the readline - library (the standalone readline distribution shares this file) to - $(SHLIB_MAJOR)$(SHLIB_MINOR). Recommendation from Max Horn - - - 10/6 - ---- -array.h - - array_first_index: new convenience define - -array.c - - ADD_AFTER: new define, complement of ADD_BEFORE - - UNSET_LASTREF: now takes an array as an argument, prepping for move - of lastref pointer into the array struct - - array_insert: check whether we are adding at the beginning of the - array and take a fast path if so - - array_insert: use same strategy as array_reference to find the place - to insert, starting from the last-referenced element and moving - forward or back from there; use ADD_AFTER if moving backward - - array_insert: if replacing an existing element, just replace the - value with new->value instead of the entire element - - array_reference: short-circuit quickly if looking for an element - before the first assigned index - - array_reference: if we don't find the element, leave lastref pointing - to the closest element under the assumption we will be assigning or - looking for something close - - array_reference: take advantage of ordered indexes to short-circuit - when looking for element that is not set - - 10/7 - ---- -array.c - - array_remove: short-circuit if asked to remove index after max - index or before first index - - 10/10 - ----- -lib/malloc/malloc.c - - internal_realloc: if we are requesting reallocation to the same size - as the block's current size, short-circuit and return `mem' right - after doing bounds check - - internal_realloc: if we are reducing the size of an allocation, and - the new size fits in the next lower bin, just keep the same block - and adjust the size, so we can avoid some copies - -parse.y - - set_line_mbstate: keep track of the allocated size of - shell_input_line_property, only request reallocation if the size - increases, but don't let it get too big - - 10/11 - ----- -jobs.c - - wait_for_background_pids: make sure we wait for pid in - last_procsub_child since it's not found in any job -- still needs - more work to wait for multiple process substitutions - -subst.c - - process_substitute: if make_child fails, make sure we call - restore_pipeline to undo the previous save_pipeline() - - 10/15 - ----- -subst.c - - process_substitute,command_substitute: leave subshell_level (reflected - as $BASH_SUBSHELL) intact for any exit trap instead of decrementing - it. Suggested by Martijn Dekker - -builtins/evalstring.c - - optimize_subshell_command: new function, framework for optimizing - out forks for command that have already forked and are executing - in a subshell. Not used yet - -expr.c - - readtok: if we have a post-increment or post-decrement, and the - previous token is not a string, check whether the previous token is - a number that results from a pre-increment or pre-decrement, and - make that an error. Report from Conrad Hoffmann - - 10/16 - ----- -aclocal.m4 - - BASH_JOB_CONTROL_MISSING: convert from AC_TRY_RUN to AC_TRY_COMPILE - with existing set of preprocessor defines, so it can work when - cross-compiling. Suggested by Felix Janda - - 10/19 - ----- -variables.c - - get_bashpid: BASHPID is no longer readonly; assignments to it are - just ignored. - -doc/{bash.1,bashref.texi} - - BASHPID: note that assignments are ignored and unsetting BASHPID - causes it to lose its special properties - - 10/28 - ----- -builtins/pushd.def - - popd_builtin: make sure to check the normalized stack offset - (i.e., negatives counting back from the end of the stack) is within - bounds before trying to free that stack entry. Report from - Fernando Muñoz - -lib/readline/histfile.c - - chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from - J. Peter Mugaas - -lib/readline/colors.c - - S_ISDIR: add define if missing - - S_ISUID, S_ISGID, S_ISLNK, S_ISSOCK: don't use unless defined. - Fixes for MinGW{64,32} from J. Peter Mugaas - -bashhist.c - - current_command_line_comment: set to the most recent line in a - possibly multi-line command that contains a shell comment; set in - maybe_add_history and bash_add_history to either the current - command number or -2 - - maybe_add_history: set current_command_line_comment for first line - of command - - bash_add_history: chars_to_add set to "\n" if the current command line - is one greater than the previous line containing a comment - (current_command_line_comment). Fixes complaint from back in - January, 2016 from Dave Rutherford - -array.h - - lastref: move last-referenced pointer into each array struct, so all - arrays can have reference locality - -array.c - - array_create: set lastref element to 0 - - array_copy: if copying the lastref in array a, set the new lastref - in the copy to the same element - - IS_LASTREF, LASTREF_START, LASTREF, INVALIDATE_LASTREF, SET_LASTREF, - UNSET_LASTREF: change to use new array `lastref' member - -pathexp.c - - quote_string_for_globbing: if quoting for a regexp, make sure to - skip and copy a leading `^' in a bracket expression, and skip and - copy a subsequent `]' (after an optional `^'), so that leading - bracket doesn't close the bracket expression. Report from - Stephane Chazelas - - 10/29 - ----- -subst.c - - extract_delimited_string: add calls to CHECK_STRING_OVERRUN for - $( inside $((, nested OPENERs, nested ALT_OPENERs, and backquotes - - skip_to_delim: add calls to CHECK_STRING_OVERRUN for $(, ${, - process substitution - - extract_dollar_brace_string: add calls to CHECK_STRING_OVERRUN for - $( - - extract_dollar_brace_string: use skipsubscript to skip over the - array subscript in ${var[sub]} (non-quoted case uses string_extract, - which already uses skipsubscript). Tagged for bash-5.0 - - 10/30 - ----- -variables.c - - EPOCHSECONDS: new dynamic variable, time in seconds since Unix - epoch; assignments are ignored. Can be used on systems where - strftime() doesn't support '%s' - - EPOCHREALTIME: new dynamic variable, time in seconds since Unix - epoch with microsecond granularity - -doc/{bash.1,bashref.texi} - - EPOCHSECONDS documentation - - EPOCHREALTIME documentation - -execute_cmd.c - - decpoint: moved to locale.c, renamed locale_decpoint; changed callers - -{bashintl,externs}.h - - locale_decpoint: extern declaration or #define if support for - localeconv() not there - - 10/31 - ----- -lib/malloc/malloc.c - - posix_memalign: add new posix-mandated interface - -examples/loadables/rm.c - - rm: minimal loadable builtin, removes files and directories, only - handles -r and -f options. Original from Tim Ruehsen - , heavily rewritten for inclusion as loadable - -examples/loadables/Makefile.in - - rm: add rules to build rm as one of the `other' targets - -examples/loadables/stat.c - - stat: new loadable builtin that takes a filename and loads the info - returned by stat(2) into an associative array specified by the -A - argument (default STAT) - - 11/1 - ---- -variables.c - - BASH_ARGV0: new dynamic variable, returns $0 on reference and sets - $0 on assignment. From a suggestion from Rocky Bernstein - a few years ago - -doc/{bash.1,bashref.texi} - - BASH_ARGV0: document - - 11/2 - ---- -lib/glob/sm_loop.c - - parse_collsym: make sure to not return an out-of-bounds read if a - collating symbol is unterminated. Fixes OOB read reported by - Jerzy Kramarz - - brackmatch: after incrementing p, before checking whether it's a - character range, check whether *p was NULL before the increment - and short-circuit the bracket expression if it is - -jobs.c - - discard_last_procsub_child: new function, safely discards - last_procsub_child and sets it to NULL - -subst.c - - process_substitute: call discard_last_procsub_child instead of - calling discard_pipeline directly. Fixes bug reported by - Christian Weisgerber - - 11/3 - ---- -shell.h - - EX_DISKFALLBACK: new special return status available to builtins; - means to attempt to execute a disk command with the same name as - the builtin - -examples/loadables/rm.c - - if we see the -i option, return EX_DISKFALLBACK - -execute_cmd.c - - execute_simple_command: if executing a builtin returns EX_DISKFALLBACK, - try running execute_disk_command instead - -bashline.c - - shell_expand_line: use expand_word to expand the readline line - buffer, which allows us to pass flags with the word. If a numeric - argument is supplied, do not perform quote removal (pass - Q_HERE_DOCUMENT since here-doc quoting does the right thing) and - do not perform command or process subsitution. From a suggestion - by Dabrien 'Dabe' Murphy based on an old bug-bash - discussion - -subst.c - - expand_word_internal: note that we have added a quoted IFS char to - istring by setting sentinel has_quoted_ifs. Usually we only add - one if we are not going to be performing word splitting, but we - will not perform word splitting if there's no expansion, so we need - to take care of that case - - expand_word_internal: when performing final word split, if there are - no expansions but has_quoted_ifs is non-zero, call remove_quoted_ifs() - to remove any quoted ifs characters we added while processing - - remove_quoted_ifs: new function, removes CTLESC chars preceding - (single-byte) chars in IFS. Used when we are not performing word - splitting. Fixes bug reported by Martijn Dekker - - 11/4 - ---- -lib/readline/macro.c - - _rl_peek_macro_key: return the next character from the current - keyboard macro; the next character from the `next' keyboard macro, - if there is one, if at the end of the current macro; or 0 to - indicate that we are at the end of a keyboard macro sequence - -lib/readline/rlprivate.h - - _rl_peek_macro_key: extern declaration - -lib/readline/readline.c - - _rl_dispatch_subseq: add test for ESC at the end of a keyboard macro, - which should cause the keyboard timeout for ESC to kick in. The - previous test didn't run the timeout code if executing from a macro, - even if we had read the last character of the macro. Fixes bug - reported by Clark Wang - -lib/glob/sm_loop.c - - GMATCH: allow trailing backslash in pattern to explicitly match a - backslash that is the last character in the string. Bug report from - Stephane Chazelas - - 11/5 - ---- -builtins/common.c - - display_signal_list: if displaying a signal name corresponding to an - exit status > 128, don't display the SIG prefix at all. Old code - made displaying the SIG prefix dependent on JOB_CONTROL define. - Report and fix from Martijn Dekker - -execute_cmd.c - - execute_subshell_builtin_or_function: call without_job_control even - if JOB_CONTROL is not defined. Similar to fix from 9/23. - Report from Martijn Dekker - -execute_cmd.c - - execute_simple_command: free memory allocated and passed to - make_child in the child process if JOB_CONTROL is defined - - execute_command_internal: free memory allocated and passed to - make_child in the child process created to run a () subshell or a - compound command within a pipeline if JOB_CONTROL is defined - - execute_coproc: free memory allocated and passed to make_child in - the child process if JOB_CONTROL is defined - - execute_disk_command: free memory allocated and passed to - make_child in the child process if JOB_CONTROL is defined. This - series of fixes is the result of reports from - Eduardo A. Bustamante López - - 11/6 - ---- -lib/sh/unicode.c - - u32toutf16: fix to prevent outputting broken surrogate pairs for - Japanese locales (ja_JP.UTF-8) on cygwin (which uses UTF-16 natively). - Report and fix from Koichi MURASE - -builtins/trap.def - - trap_builtin: if OP is `-' (revert), set the SIGINT signal handler - to sigint_sighandler if the shell is interactive and sourcing a - file (interactive_shell && sourcelevel) or running a trap - (interactive_shell && running_trap) even if it's not currently - interactive. Report from Martijn Dekker - -builtins/read.def - - check for and read multibyte characters in all cases, not just when - we are reading a specific number of characters, as long as - mb_cur_max > 1 - -subst.c - - expand_word_internal: some improvements to code that converts istring - into a WORD_LIST * to avoid multiple allocations and copies of - istring, which is already malloc'ed memory -- reduce number of malloc - and free calls - -test.c - - unary_test: make sure if we test -v array[@] or array[*] that we - free the return value from array_value - - 11/8 - ---- -expr.c - - expcond: make sure to set `noeval' before reading tokens depending on - the result of the conditional test, since readtok() can evaluate - identifiers (and recursively those containing expressions). Report - and fix from Koichi MURASE - -builtins/evalstring.c - - should_suppress_fork: make sure to check for traps on EXIT and - ERR, since any_signals_trapped() only checks for `real' signals, - not the fake shell ones. Fixes bug reported by Werner Fink - - - optimize_subshell_command: ditto - - 11/9 - ---- -eval.c - - reader_loop: change so that we don't reset the SIGINT handler every - time through the command loop in an interactive shell if the signal - is trapped (as the comment noted). Reported by Report from Martijn - Dekker - -subst.c - - parameter_brace_{patsub,remove_pattern,transform,casemod}: save and - restore this_command_name while temporarily setting it for use in - error messages. Fixes use-after-free error reported by - Jerzy Kramarz - - string_extract_verbatim: make sure when we increment i by 2 due to - a CTLESC or CTLESC-CTLNUL that we don't read past the end of the - string. This can happen if the string ends with an odd number of - CTLESC chars. Fixes oob-read error reported by - Jerzy Kramarz - - 11/11 - ----- -configure.ac,aclocal.m4 - - BASH_FUNC_SBRK: make sure sbrk actually works, instead of being just - a stub function like on several Linux distributions - -lib/malloc/malloc.c - - malloc_usable_size: return the maximum number of bytes available for - a particular memory allocation (size of block allocated for it) - - 11/12 - ----- -configure.ac - - changes to make --enable-profiling work on Linux (-pg, no static link, - no -static in LDFLAGS) - -Makefile.in - - changes to make --enable-profiling work on Linux (take - ${PROFILE_FLAGS} out of BASE_CCFLAGS, add to CCFLAGS instead; add - BASE_LDFLAGS define that doesn't include -pg or -static; use - BASE_LDFLAGS in LDFLAGS; move ${PROFILE_FLAGS} and ${STATIC_LD} to - LDFLAGS) - -tests/run-gprof - - changes to make profiling test suite with gprof work on Linux (set - GMON_OUT_PREFIX to handle multiple profiled processes per test; - change default filename to gmon.out from bash.gmon; look for - gprof output files in ${TMPDIR} instead of /tmp; handle multiple - profiling files starting with $GMON_OUT_PREFIX) - -locale.c - - locale_isutf8: use locale_charset() if it's available and nl_langinfo - isn't - - locale_isutf8: add code to parse a locale specification and determine - whether the encoding is UTF-8 (or utf8) in the absence of - nl_langinfo and locale_charset - - set_default_locale: make sure to set locale_utf8locale early on - - locale_utf8locale: set via call to locale_isutf8 wherever LANG, - LC_ALL, or LC_CTYPE is set - - 11/13 - ----- -lib/readline/display.c - - rl_redisplay: handle report of potential integer overflow in - horizontal display mode from Mateusz Lenik - -lib/sh/mbschr.c - - mbschr: if in a UTF-8 locale (locale_utf8locale) and we are looking - for an ASCII character, use (essentially) strchr as a shortcut - -lib/sh/shmbchar.c - - utf8_{mbstrlen,mblen,mbsmbchar,mbsnlen}: UTF-8-specific replacement - functions (should also be able to use utf8_mblen in subst.c: - string_extract_verbatim) - - mbsmbchar: if locale_utf8locale is true, call utf8_mbsmbchar - - mbsmbchar: in UTF-8 locale, use utf8_mblen instead of mbrlen (not - used if earlier shortcut taken) - -lib/sh/unicode.c - - u32cconv: don't use nl_langinfo early to call u32toutf8() - - u32cconv: use locale_utf8locale to set utf8locale - - u32cconv: when initializing (u32init == 0), use locale_charset, then - nl_langinfo, then stub_charset to determine the charset - - u32cconv: even if we don't have iconv, if locale_utf8locale is non- - zero, return u32toutf8 - - 11/15 - ----- -lib/readline/nls.c - - _rl_init_locale: new function, split off code that determines current - locale from _rl_init_eightbit, use it to set _rl_utf8locale - -lib/readiline/rlprivate.h - - _rl_init_locale: new extern declaration - -lib/readline/readline.c - - rl_initialize: if not initializing everything the first time, call - _rl_init_locale to check current locale and set _rl_utf8locale - -lib/readline/text.c - - _rl_insert_char: optimize cases where we are inserting a single-byte - character in a locale with multibyte characters - - _rl_insert_char: check whether character is single byte if we know - we are in a UTF-8 locale, optimize single-byte case to avoid calls - to mbrtowc and memmove/memcpy - -lib/readline/mbutil.c - - _rl_char_value: if we are in a UTF-8 locale (_rl_utf8locale) and the - current character does not have the eighth bit set ((c & 0x80) == 0), - return that char without bothering to call mbrtowc - - _rl_adjust_point: don't bother calling mbrlen if we are in a UTF-8 - locale and the current character is not a multibyte character - - _rl_find_next_mbchar_internal: if we are in a UTF-8 locale, use that - to avoid calls to mbrtowc - -lib/readline/display.c - - _rl_col_width: if in a UTF-8 locale, take advantage of that to avoid - calls to mbrlen and mbrtowc - - rl_redisplay: if in a UTF-8 locale, take advantage of that to avoid - calls to mbrtowc - - 11/17 - ----- -lib/readline/histlib.h - - PATTERN_SEARCH: new flag for history search interfaces, means to - search for a pattern as Posix specifies - -lib/readline/histsearch.c - - history_search_internal: now takes a `flags' argument instead of just - an `anchored' argument to accommodate PATTERN_SEARCH - - _hs_history_patsearch: new internal interface to use when flags - specify PATTERN_SEARCH - -lib/readline/rlprivate.h - - SF_PATTERN: new flag for non-incremental search contexts, means to - treat search string as a pattern (maps to PATTERN_SEARCH) - -lib/readline/search.c - - noninc_dosearch: takes an additional `flags' argument for SF_PATTERN - - noninc_search_from_pos: takes an additional `flags' argument for - SF_PATTERN - - noninc_dosearch: pass flags argument through to noninc_search_from_pos - - _rl_nsearch_init: if we are in vi command mode, and `pchar' (key used - to invoke the search) is `?' or `/', add SF_PATTERN to the flags - to conform to Posix spec for vi-mode editing - - _rl_nsearch_dosearch: if cxt->sflags indicates that we should do a - pattern search, pass SF_PATTERN to noninc_search_from_pos - - rl_noninc_forward_search_again: if in vi command mode and key == `N', - make sure flags arg passed to noninc_dosearch includes SF_PATTERN - - rl_noninc_reverse_search_again: if in vi command mode and key == `n', - make sure flags arg passed to noninc_dosearch includes SF_PATTERN - - rl_history_search_internal: pass extra flags arg to noninc_search_from_pos - - 11/18 - ----- -lib/readline/search.c - - noninc_search_from_pos: takes a new argument, a pointer to int where - it stores the offset of the match in the history line (if non-NULL), - modified callers - - rl_history_search_internal: pass newcol pointer to - noninc_search_from_pos to avoid having to recompute the match offset - in the matching history entry - -config.h.in - - define HAVE_FNMATCH if we have the fnmatch function (configure was - already checking for it) - -lib/readline/histsearch.c - - _hs_history_patsearch: transform the pattern into one ending in a - `*' to avoid having to perform multiple match attempts from each - index in the history line - - history_search_internal: changes to handle pattern matching if - PATTERN_SEARCH is in the flags and HAVE_FNMATCH is defined. This - makes vi-mode history searching treat the user-specified search - string as an fnmatch pattern, as Posix requires. Fixes issue - reported by - - 11/19 - ----- -builtins/shopt.def - - shopt_enable_hostname_completion: only declare this if READLINE - defined, since that's the only time it's used. Reported by - isabella parakiss - - 11/20 - ----- -builtins/common.c - - display_signal_list: make `kill -l 0' print `EXIT', modifying change - from 9/17 - - 11/21 - ----- -subst.c - - expand_word_internal: when the shell encounters a backslash as the - last character of the string, don't try to add a '\'0' to the end - of the string if the string is quoted, just add a <\> and - skip to the end of string processing. Fixes oob-read error - reported by Jerzy Kramarz - -test.c - - two_arguments: check argv[pos][1] before checking argv[pos][2] when - looking for a unary argument. Fixes oob-read error on single `-' - in unary operator position reported by Jerzy Kramarz - - - ANDOR: check s[1] before checking s[2] in case s[1] == end of string. - Fixes oob-read error reported by Jerzy Kramarz - -subst.c - - command_substitute: now takes additional flags argument, changed one - caller (param_expand) to pass through PF_ASSIGNRHS flag; other callers - pass 0 - - command_substitute: pass through flags argument to read_comsub - - read_comsub: now takes additional new flags argument to indicate - whether or not the word is in a context where word splitting will - eventually be performed - - read_comsub: if we are running in a context where word splitting - will not take place (PF_ASSIGNRHS), we read a CTLESC, and CTLESC is - in $IFS, add a CTLESC to make sure it gets through a round of - dequoting - - 11/23 - ----- -parse.y - - xparse_dolparen: since reset_parser frees the pushed string list, - and this is supposed to be a separate parsing context, we need to - save and restore pushed_string_list around the call to parse_string - and reset_parser. Fixes bug reported by Dan Douglas - - -bashhist.h - - HISTEXPAND_DEFAULT: default value of history_expansion, moved here - from flags.c - -flags.[ch] - - histexp_flag: new variable, this is what set -H/set -o histexpand - sets; history_expansion set to value of this variable; defaults to 0 - - history_expansion: now set to HISTEXPAND_DEFAULT - -bashhist.c - - bash_history_reinit: if interact == 0, set history_expansion to the - value of histexp_flag, to allow -H option to enable history - expansion - - bash_history_reinit: if interact == 0, make sure - history_expansion_inhibited is set opposite of histexp_flag, so - enabling history expansion with -H invocation option turns off - inhibited expansion. If interactive shell, we turn it off so - history_expansion controls whether or not history expansion takes - place. In practice, this function is always called with interact == 0, - and -c command still doesn't perform history expansion - -shell.c - - init_interactive: make sure histexp_flag and history_expansion are - identical in an interactive shell; allows both -H/+H option and - default compilation options (HISTEXPAND_DEFAULT) to work - - 11/24 - ----- -subst.c - - get_word_from_string: take advantage of the fact that SEPARATORS is - always a (possibly local) copy of IFS, so build a local charmap of - separators and use it instead of the (cached and possibly stale) - ifs_cmap map and isifs macro. Fixes bug with -N stripping leading - whitespace reported by Clark Wang - - 11/25 - ----- -builtins/read.def - - read_builtin: make `i' volatile, since auto variables are technically - undefined after a longjmp, and a timeout on SIGALRM causes one. - Fix suggested by Dmitry Goncharov - - 11/27 - ----- -parse.y - - shell_getc: if we are reading input from a string, and we get the - ending '\0', and we are not expanding an alias, return EOF right - away. It might be an eval'ed string that has a syntax error. - Fixes bug reported by Dan Douglas - - 11/28 - ----- -subst.c - - expand_word_internal: if we're expanding a quoted string containing - a tilde as the first character of a word, only expand the tilde if - we're expanding an array subscript (Q_ARRAYSUB), not if we're - expanding any arithmetic expression (Q_ARITH). This fixes a - backwards compatibility issue with expressions like ~0 reported by - Bize Ma - -subst.c - - parameter_brace_expand_indir: if the variable is not special and - the indirect variable is unset (!variable where variable is unset), - report an error. This is a slight incompatibility with previous - versions, which did not differentiate between indirecting an unset - variable and an indirect expansion resulting in an unset variable. - Fixes omission reported by otenba@protonmail.com - - 11/30 - ----- -lib/readline/doc/{rluser.texi,readline.3},doc/bash.1 - - do-uppercase-version: since this doesn't actually exist, replace it - with do-lowercase-version, with the caveat that do-lowercase-version - results in undefined behavior if bound to a character that's - already lowercase. Suggested by Branden Robinson - - -lib/readline/doc/rluser.texi - - history-substring-search-forward: was misspelled as "substr-search"; - ditto for search-backward - -doc/bash.1 - - history-substring-search-{backward,forward}: add documentation, text - straight from readline.3 - -jobs.c - - initialize_job_control: if the terminal's process group is valid, - but the shell is not the foreground process, check for terminating - signals (like SIGHUP, which the kernel would send if the process - group were orphaned) during the loop where we try to stop the shell - if it's not in the foreground. Not a perfect solution; the kernel - might not send SIGHUP - - 12/1 - ---- -jobs.c - - initialize_job_control: only go through the SIGTTIN loop 16 times at - most before deciding we're in the background and probably a member of - an orphaned process group; set original_pgrp to the terminal's pgrp - (so the eventual give_terminal_to doesn't leave the terminal in the - wrong pgrp); and bail on job control initialization - -tests/run-all - - unset SHELLOPTS to avoid its options `polluting' the test - environment. Suggestion from Vladimir Marek - - -tests/execscript - - use $PWD/exec8.sub to protect against someone who has a cd command - in his bashrc. Report from Vladimir Marek - - - 12/2 - ---- -shell.c - - open_shell_script: call end_job_control before exiting the shell in - case we were run as `bash -i script' and there is a problem with - executing `script'. If we don't, the terminal ends up in the wrong - process group. Fix from Clark Wang - - 12/3 - ---- -parse.y - - read_comsub: if we look for a character following a `<' and it's - not `<' (indicating that we don't have to read a here-document), - make sure we push that character back and go through the loop again - so we note the right word start location. Fixes bug reported by - parasite parasite <42parasite@gmail.com> - -subst.c - - parameter_brace_expand_indir: clean up checks for unset variables to - minimize incompatibilities with previous versions - - 12/5 - ---- -lib/readline/history.c - - add_history: don't update history_length until all of the updates to - the_history are complete, so history_length is always consistent. - Report and fix from Hong Cho - -bashline.c - - bash_backward_shellword: fix to work better at the end of the line, - with multiple trailing whitespace characters. Inspired by report - from Kirill Timofeev - -Makefile.in - - bashbug: use `^' as the sed delimiter instead of `%'; some compilers - use `%' in CFLAGS. Report from Vladimir Marek - - - 12/6 - ---- -test.c - - test_unop: make sure op[1] != 0 before testing op[2] - - term: make sure argv[pos][1] != 0 before testing argv[pos][2]. Fixes - oob-read reported by Jerzy Kramarz +[bash-5.1 released] 12/7 ---- -lib/glob/glob.c - - glob_filename: assign the return value of realloc (results, ...) to - a temp pointer, so if realloc returns NULL, we make sure we free - results. Report from Kirill Timofeev - - 12/12 - ----- -lib/sh/shquote.c - - sh_backslash_quote: if FLAGS&2, backslash-quote other single-byte - characters that are in the current locale's character class - -builtins/printf.def - - printf_builtin: when processing the `%q' format, make sure to - backslash quote all characters by making sure that FLAGS - passed to sh_backslash_quote includes 2. Fixes issue for certain - iso-8859-1 locales where character 160 (octal 240, hex 0xa0) is a - non-breaking space. Report from Stephane Chazelas - - -lib/sh/eaccess.c - - sh_stat: if DEV_FD_STAT_BROKEN is defined, take /dev/fd/N and turn - it into a stat on file descriptor N, as if /dev/fd were not - available. This is the case on some old versions of SunOS. Report - and patch from Dmitry Goncharov - -config.h.in - - DEV_FD_STAT_BROKEN: add define - -configure.ac - - --enable-dev-fd-stat-broken: new command-line option, defines - DEV_FD_STAT_BROKEN if supplied at configure time - -doc/bashref.texi - - --enable-dev-fd-stat-broken: document new command-line option for - configure - -arrayfunc.c - - assoc_expand_once: new variable, declared here just because - -arrayfunc.h - - assoc_expand_once: extern declaration - - AV_NOEXPAND: new flag value for the array_value family of functions: - means to not run associative array subscripts through word expansion - -builtins/set.def - - unset_builtin: call unbind_array_element with assoc_expand_once as - third arg, controls whether we expand associative array subscripts - (if 1, we suppress the usual expansion). With accompanying shopt, - provides backwards compatible option to solve problem with quotes - and other characters in associative array subscripts pointed out - most recently by Mingye Wang (Arthur2e5) - -builtins/shopt.def - - assoc_expand_once: new option, controls value of internal variable - with the same name. Currently undocumented because I'm not completely - sold on the name - -expr.c - - evalexp: now takes a second argument, flags. Changed all callers in - multiple other files (builtins/let.def,execute_cmd.c,arrayfunc.c, - subst.c,test.c,variables.c) - -externs.h - - EXP_EXPANDED, new flag for second argument to evalexp - -builtins/let.def - - let_builtin: add EXP_EXPANDED to flags passed to evalexp - -execute_cmd.c - - execute_arith_command: add EXP_EXPANDED to flags passed to evalexp, - since the command string is run through expand_words_no_vars before - being evaluated - -expr.c - - set expression-global variable already_expanded if flags arg to - evalexp contains EXP_EXPANDED - - if assoc_expand_once option set and already_expanded flag set, pass - 1 in flags to array_variable_part to skip over quotes and expansions - in the subscript - - if those two variables set, pass AV_NOEXPAND as flag to - get_array_value to prevent word expansions on the subscript - -arrayfunc.c - - if flags passed to unbind_array_element includes 1, pass flag on to - skipsubscript so we don't expect matched quotes or process - expansions in the subscript - - if flags to array_value_internal include AV_NOEXPAND, pass 1 as flag - to array_variable_part to pass along to skipsubscript - - if flags to array_value_internal include AV_NOEXPAND, don't call - expand_assignment_string_to_string; just use the unexpanded subscript - to produce the key [THIS IS A WORK IN PROGRESS] - - 12/14 - ----- -subst.h - - ASS_NOEXPAND: assignment flag that inhibits expansion of associative - array subscripts - -variables.c - - bind_int_variable: takes new flags arg; flags are taken from the - ASS_ set of assignment flags, changed callers (bashline.c, expr.c, - pcomplete.c) - - bind_int_variable: if flags includes ASS_NOEXPAND, pass 1 as flag to - valid_array_reference and array_variable_part to pass along to - skipsubscript, so we don't try to skip over quoted strings in the - subscript - - bind_int_variable: pass flags along to assign_array_element - -variables.h - - bind_int_variable: updated extern declaration with new flags arg - -expr.c - - expr_bind_variable: if the assoc_expand_once option is enabled, and - the flags to evalexp indicate that we have already run the expression - through word expansion, pass ASS_NOEXPAND as flag to bind_int_variable - -arrayfunc.c - - assign_array_element: if flags includes ASS_NOEXPAND, pass 1 as flag - to array_variable_name to pass along to skipsubscript - - assign_array_element: if flags includes ASS_NOEXPAND, don't run an - associative array subscript through word expansion, just use as-is - -subst.c - - param_expand: call evalexp with EXP_EXPANDED flag for arithmetic - substitution because the string has already been expanded with - expand_arith_string - - 12/15 - ----- -builtins/read.def - - read_builtin: use value of assoc_expand_once for valid_array_reference - as with other uses - - bind_read_variable: if assoc_expand_once is set, pass ASS_NOEXPAND - to assign_array_element - -general.c - - assignment: instead of checking whether flags == 0 to allow a `[', - explicitly check for (flags&1) to disallow it. This leaves the door - open for additional flag values - -builtins/printf.def - - printf_builtin: use value of assoc_expand_once for - valid_array_reference as with other uses - - bind_printf_variable: if assoc_expand_once is set, pass ASS_NOEXPAND - to assign_array_element - - 12/16 - ----- -builtins/history.def - - change history -d option to handle negative arguments; negative - arguments offset from the end of the history list (last_position + 1 - so history -d -1 deletes the history -d command that just got - added). Original patch from Piotr Grzybowski - -doc/bash.1,lib/readline/doc/hsuser.texi - - documented new behavior of negative offsets for `history -d' - - 12/17 - ----- -lib/readline/history.c - - remove_history: use memmove to move the history list around instead - of a loop that copies pointers one at a time, similar to add_history - - 12/19 - ----- -configure.ac - - linux: make sure PGRP_PIPE is defined unconditionally for all kernel - versions greater than 2.3.* - -lib/readline/history.c - - clear_history: when clearing the history, reset history_base to 1 - (its default) - - remove_history_range: new function, removes a set of history entries - and returns them all for deallocation - -lib/readline/history.h - - remove_history_range: extern declaration - - 12/20 - ----- -execute_cmd.c - - eval_arith_for_expr: pass EXP_EXPANDED to evalexp, since we run the - expression through expand_words_no_vars - - 12/21 - ----- -input.c - - b_fill_buffer: when read returns EOF or error, and we reset the - buffer and pointers, reset the input pointer to 0. Fixes issue - reported by Stephane Chazelas - - 12/22 - ----- -arrayfunc.[ch],subst.c - - array_expand_index: added new FLAGS argument, reserved for future use, - changed callers - - - 12/24 - ----- -variables.c - - can_optimize_assignment,optimized_assignment: see if we can detect - whether or not we're trying to append a string to a string variable, - and optimize that using realloc/strcpy. Based on a log-ago - suggestion from Aharon Robbins - - 12/27 - ----- -builtins/help.def - - help_builtin: don't pass return value from ngettext() directly to - printf - - 12/28 - ----- -sig.c - - set_signal_handler: set SA_RESTART for SIGWINCH, so window size - changes don't interrupt open/read/write. Suggested by - Andriy Prystupa back in 10/2016 - - 12/30 - ----- -execute_cmd.c - - coproc_pidchk: if MULTIPLE_COPROCS, call cpl_search to find coproc - associated with pid, don't remove it from the list with cpl_delete. - Just mark as dead and wait for coproc_reap/cpl_reap to take care - of disposing it - - execute_coproc: NEW FEATURE: run the coproc name through word - expansion before creating the coproc; this allows unique coprocs - to be created in loops. Originally requested way back in 2012 by - Erik Brandsberg - -command.h - - subshell_com: now has a line number member: line - -make_cmd.c - - make_subshell_command: assign current line number (line number of the - ending right paren) to `line' member - -copy_cmd.c - - copy_subshell_command: copy the `line' member - -execute_command.c - - execute_command_internal: when executing a user subshell (`(command)'), - set the line number and line number for the ERR trap from the line - number saved in the subshell command struct. Fix from - Eduardo A. Bustamante López - - execute_arith_command: set line number for ERR trap from line number - saved in the arith command struct. Fix from - Eduardo A. Bustamante López - - execute_cond_command: set line number for ERR trap from line number - saved in the cond command struct. Fix from - Eduardo A. Bustamante López - -variables.c - - bind_variable_internal: move can_optimize_assignment call to the - right place - - 12/31 - ----- -variables.c - - find_variable_nameref: treat a circular variable reference as - referring to a variable of that name in the global scope (for now), - if one exists. PROVISIONAL change: inspired by suggestion back in - 6/2016 by Grisha Levit - - 1/2/2017 - -------- -{expr,general,hashcmd}.c - - include flags.h for flag values - -make_cmd.c - - include shell.h instead of the files it includes - -flags.h - - new extern declarations for want_pending_command, read_from_stdin - -subst.h - - add extern declaration for expanding_redir, assigning_in_environment - -trap.h - - add extern declaration for running_trap - -execute_cmd.h - - added extern declarations for variables declared in execute_cmd.c, - changed files that declare lots of extern variables - -shell.h - - added extern declarations for variables declared in shell.c, - changed files that declare lots of extern variables - -parser.h - - added extern declarations for variables declared in parse.y, - changed files that declare lots of extern variables - -[lots of changes to reduce the number of extern declarations in C and DEF files] - -parse.y - - xparse_dolparen: need ALIAS or DPAREN_ARITHMETIC to be defined to - use STRING_SAVER - - 1/3 - --- -sig.c - - termsig_handler: don't call end_job_control if subshell_environment - indicates that we're in a command or process substitution. - Provisional fix for bug reported by Russell King - -jobs.c - - end_job_control: only attempt to give the terminal back to - original_pgrp if job_control != 0; don't test interactive_shell - -execute_cmd.c - - execute_disk_command: call QUIT after search_for_command, since - the only time QUIT gets called is when the path is actually - searched. It doesn't happen for an absolute pathname. Fix for - bug reported by Russell King - - 1/16 - ---- -lib/glob/glob.c - - extglob_skipname,wextglob_skipname: if we don't find a reason to - not skip the name in any subpattern (r returns 0 for any subpattern), - return 1 because we should skip the name - - extglob_skipname,wextglob_skipname: if we don't find a reason to - not skip the name in any subpattern, but the first part of the extglob - pattern is a wildcard (`*(pat)'), check the rest of the pattern, if - any, to decide whether or not to skip the name. Fixes bug reported - by Grisha Levit - -lib/glob/glob_loop.c - - CHAR -> GCHAR (unsigned char); change uses of CHAR to GCHAR - -lib/glob/glob.c - - wchkname -> wskipname - - wskipname: now takes a third `flags' argument, like the other variants - of skipname - - 1/17 - ---- -redir.c - - here_document_to_fd: set the file descriptor open for writing to the - here document to be close-on-exec. Fixes bug reported by - Siteshwar Vashisht - - 1/18 - ---- -{gmisc,gm_loop}.c - - match_pattern_char,match_pattern_wchar: moved to gm_loop.c (new file), - compile twice for single and wide characters as with the rest of - the functions - - umatchlen,wmatchlen: ditto - - extglob_pattern_p: move to gm_loop.c, generalize for regular and - wide-char versions - - 1/19 - ---- -lib/readline/complete.c - - stat_char: fix small memory leak if stat/lstat returns -1 - -bashline.c - - bash_filename_stat_hook,bash_directory_completion_hook: make sure - expand_prompt_string is caled wth W_NOPROCSUB flag - - directory_exists: don't dequote the filename passed as an argument; - this function should never get quoted pathnames - -subst.c - - expand_word_internal: when calling expand_word_internal recursively - after reading a double-quoted string, make sure the W_NOCOMSUB and - W_NOPROCSUB flags make it to the recursive invocation. Fixes bug - reported by Jens Heyens - - 1/23 - ---- -lib/readline/signals.c - - _rl_orig_sigset: original signal mask, set and restored by - rl_set_signals (rl_clear_signals doesn't block signals). If we - are not installing signal handlers, just save signal mask each - time rl_set_signals is called - -lib/readline/input.c - - rl_getc: use _rl_orig_sigmask in the call to pselect(), so we block - the set of signals originally blocked by the calling application. - Fixes bug reported by Frédéric Brière - -parse.y - - yy_readline_get: try to unset NONBLOCK mode on readline's input - file descriptor before calling readline(). Inspired by report from - Siteshwar Vashisht - - 1/30 - ---- -parse.y - - parse_comsub: don't unconditionally set the LEX_WASDOL flag when we - see a `$'; we should toggle it to accommodate things like $$. - Fixes bug reported by Christian Weisgerber - - parse_matched_pair: do the same thing with LEX_WASDOL - - 2/1 - --- -jobs.h - - JWAIT_PERROR,JWAIT_FORCE: new defines for the wait_for_ family of - functions - -jobs.c - - wait_for_job, wait_for_any_job: take new flags argument for use by - the wait builtin - - wait_for_job: if JWAIT_FORCE flag supplied, loop waiting for job to - terminate instead of change state - - wait_for_single_pid: if JWAIT_FORCE flag supplied, loop waiting for - child process to terminate instead of change state - -builtins/wait.def - - takes a new `-f' option, signifying to wait until the specified job - or process terminates, instead of changes state - -doc/{bash.1,bashref.texi} - - wait: document the new -f option and its behavior when job control - is enabled - - job control: add a paragraph describing how the wait builtin changes - behavior when job control is enabled: it returns when a job changes - state - - 2/2 - --- -examples/loadables/fdflags.c - - fdflags: new loadable builtin to set and unset file descriptor flags - (such as non-blocking, though bash undoes that) for descriptors bash - has open. Developed in consultation with Christos Zoulas - - - 2/3 - --- - -lib/readline/text.c - - rl_previous_screen_line: attempt to move to the same column on the - previous screen line of the current readline buffer by moving back - a number of characters equal to the screen width - - rl_next_screen_line: attempt to move to the same column on the - next screen line of the current readline buffer by moving forward - a number of characters equal to the screen width. Both originally - suggested by Hans Ginzel - -lib/readline/readline.h - - rl_{next,previous}_screen_line: extern declarations - -lib/readline/funmap.c - - {next,previous}-screen-line: new bindable command names - -lib/readline/doc/{rluser.texi,readline.3} - - {next,previous}-screen-line: document behavior, including limitations - - 2/5 - --- -lib/readline/input.c - - rl_read_key: when reading input from a macro, make sure to return - the next character as an unsigned char, so we handle multibyte - character sequences correctly. Report and fix from Grisha Levit - - - 2/6 - --- -shell.c - - --pretty-print: new invocation option, currently undocumented, dumps - a pretty-printed version of a shell script given as an argument to - stdout - - main: call pretty_print_loop() if we're in pretty-printing mode in - a non-interactive shell - -eval.c - - pretty_print_loop: new function, similar to reader_loop, reads - commands and prints them by displaying the result from - make_command_string() - -externs.h - - pretty_print_loop: new extern declaration - - 2/9 - --- -doc/{bash.1,bashref.texi} - - here strings: correct documentation to note they do not undergo - brace expansion. Report from Conor McCarthy - - 2/9 - --- -lib/readline/display.c - - expand_prompt: instead of recomputing the line break offsets for - prompts that span multiple screen lines on every call to rl_redisplay, - do it here. Manage a local array local_prompt_newlines; set an offset - every time `physchars' hits a multiple of the screen width. Inspired - by https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843819 - - rl_redisplay: don't calculate multi-line prompt line break indices - here; use the values calculated by expand_prompt - - rl_{save,restore}_prompt: save and restore local_prompt_newlines - - 2/11 - ---- -lib/readline/mbutil.c - - _rl_find_prev_mbchar_internal: since we're traversing the string - from the beginning, shortcut non-multibyte characters in a UTF-8 - locale - -parse.y - - parse_comsub: if we are parsing a here document with a quoted - delimiter (LEX_QUOTEDDOC), we should not remove - pairs from the body of the here document. Need to add LEX_QUOTEDDOC - to the values in tflags when calling shell_getc. Fixes bug reported - by Michael Homer , patch was originally - contributed by Geir Hauge - - 2/15 - ---- -jobs.c - - bgp_add: if hashed pid collides with bgpids.head index, print a - warning and move to the next index. Attempt to avoid collision - problem reported by Graham Northup - - 2/17 - ---- -subst.c - - process_substitute: call remove_quoted_escapes on the command string - like command substitution does, since the string will be run through - the parser again. Fixes bug reported by David Simmons - - -config-top.h - - STATIC_PATH_VALUE: new config variable, undefined by default - -variables.c - - shell_initialize: if STATIC_PATH_VALUE is defined, use it to set the - PATH variable at shell startup, overriding the environment and any - value for DEFAULT_PATH_VALUE. Based on a suggestion from - Lonnie Abelbeck - - 2/18 - ---- -shell.c - - maybe_make_restricted: clear the hash table before making the PATH - variable read-only by calling stupidly_hack_special_variables. - Suggestion from Lonnie Abelbeck - -subst.c - - expand_string_for_pat: change expansion of WORD in ${param[%[%]][#[#]]word} - to use this new function, initially identical to - expand_string_for_rhs - - getpattern: use expand_string_for_pat to expand the pattern - - 2/19 - ---- -subst.c - - expand_string_for_rhs: now that this is only used to expand the RHS - of the various non-pattern ${paramOPword} expansions, set - expand_no_split_dollar_star depending on whether or not the entire - brace expansion is going to be subjected to word splitting: if it's - quoted or if IFS is set but null, we will not be splitting so we set - this to 1 and let $* expand to separate fields separated by a space. - This was heavily debated back in October 2014 and resulted in Posix - interp 888. Reported by Martijn Dekker - - 2/20 - ---- -subst.c - - expand_string_for_rhs: now takes `op' (brace expansion operator) as - an additional argument; changed call in parameter_brace_expand_rhs - - expand_string_for_rhs: make sure to set expand_no_split_dollar_star - if `op' is `=', since we are supposed to preserve the assignment - statement expansion semantics on the RHS of ${param=word} - -jobs.c - - bgp_delindex: make sure to set ps->pid to NO_PID so we more - effectively remove it from the hash table. It shouldn't matter as - long as nothing in pidstat_table points to it, but better to be safe - - bgp_delete,bgp_search: generalize previous collision detection to - loop detection: abort search if we are going to go back to the - first index we tried - - 2/21 - ---- -lib/readline/vi_mode.c - - rl_vi_bword: if we're trying to move backward to non-whitespace - in a line that begins with whitespace, make sure we don't move - point to 0 and test memory locations before the start of the - buffer. Report and fix from Jason Hood - -lib/readline/display.c - - expand_prompt: if _rl_screenwith == 0, call rl_reset_screen_size to - initialize it. If it's still 0 after that, guess that the screen - width is 80 and use that to guess how many screen lines the prompt - consumes - -lib/readline/readline.c - - readline_internal_setup: if in emacs editing mode, and we are - showing the editing mode in the prompt, call _rl_reset_prompt() to - make sure that the updated setting of _rl_show_mode_in_prompt - (presumably set in an inputrc file) is reflected in the redisplay - performed by rl_callback_newline via readline_internal_setup. - Fix from Jason Hood - - 2/22 - ---- -builtins/complete.def - - print_one_completion,print_compopts: make sure to display the - `nosort' and `noquote' options if they've been set for a particular - compspec. Fix from Grisha Levit - -builtins/read.def - - read_builtin: if -e is supplied, read needs to free rlbuf before - returning, since it uses discard_unwind_frame at that point. Bug - and fix from ZhangXiao - -execute_cmd.c - - execute_for_command: when using a nameref as the for loop control - variable, make sure we check for readonly namerefs and make sure - that we force bind_variable to enforce restrictions on nameref - assignments. Fix from Grisha Levit - - 2/23 - ---- -general.c - - make_absolute: convert deprecated cygwin_conv_to_full_posix_path - to cygwin_conv_path (CCP_WIN_A_TO_POSIX, ...) - -{shell,variables}.c,config-top.h - - modify change from 2/17: rename STATIC_PATH_VALUE to RBASH_STATIC_PATH_VALUE; - don't use it in shell_initialize; set PATH to it just before - imposing restricted shell restrictions - - 2/24 - ---- -subst.c - - expand_string_for_rhs: revert change from 2/19 concerning setting - expand_no_split_dollar_star so we are consistent with the Posix - examples. This anticipates Martijn Dekker initiating an austin - group discussion about this case - - 2/25 - ---- -pcomplete.c - - gen_shell_function_matches: if COMPREPLY is an associative array, - don't coerce it to an indexed array, which will fail to produce any - matches anyway. Report from Grisha Levit - - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore - the nameref attribute. Report from Grisha Levit - - -subst.c - - parameter_brace_expand: if expand_no_split_dollar_star is set, make - sure chk_atstar treats ${var[*]} as quoted by passing Q_DOUBLE_QUOTES - as the second argument. Fixes differing treatment of $* and ${v[*]} - reported by Grisha Levit , because otherwise - *contains_dollar_at gets set to 1 and the word is inappropriately - split - - 3/1 - --- -subst.c - - expand_word_list_internal: if a variable assignment fails (e.g., due - to a readonly variable) in a non-interactive posix mode shell, don't - abort the shell if the assignment is being performed by the command - builtin, even if it's something like `command eval v=1'. Fixes - RedHat bug https://bugzilla.redhat.com/show_bug.cgi?id=1389838 - (reported by Denys Vlasenko) - - 3/3 - --- -builtins/shopt.def - - set_compatibility_level: make sure that changing the compatibility - level sets or modifies BASH_COMPAT. Fixes bug reported by - Stephane Chazelas - -lib/glob/smatch.c - - is_cclass: broke into two functions: is_valid_cclass and cclass_test, - for future expansion. No functionality change - -lib/glob/sm_loop.c - - BRACKMATCH: when testing a character against a character class name, - use the unfolded (original) character, since we're not performing a - comparison. This is what glibc does. Fixes bug reported by - Lukáš Bainka - - 3/4 - --- -doc/{bash.1,bashref.texi} - - note that the arguments to -eq and the rest of the arithmetic - operators are evaluated as expressions when using [[. Report from - Rob la Lau - - - 3/7 - --- -lib/readline/display.c - - update_line: completely rewrote the code that handles line wrapping - in the presence of multibyte/double-width characters; punts to a - dumb update in cases where the number of screen positions doesn't - match - - update_line: in one case, where we are deleting characters from the - line, if we are writing a non-space into the last screen character - position, note that we are no longer using a space as a placeholder - for a line wrap where there is a multi-width character that won't - fit on the screen line (wrapped_line[current_line+1] = 0) - - 3/10 - ---- -lib/readline/readline.c - - bind_arrow_keys_internal: add default key bindings for control- - arrow keys, suggested by Per Bothner - - 3/13 - ---- -doc/{bash.1,bashref.texi} - - clarify the prompt strings the undergo expansion (PS0, PS1, PS2, and - PS4) before being displayed. Based on a report from Grisha Levit - - - 3/14 - ---- -input.c - - bufstream_ungetc: return EOF if being asked to unget a character to - a NULL buffer - - buffered_getchar: check buffered_fd is valid and buffers[buffered_fd] - is non-NULL before trying to dereference. Fixes bug reported by - floyd - -execute_cmd.c - - execute_null_command: if we fork to execute the command, the subshell - is not interactive - - execute_null_command: for safety's sake, if a redirection attached - to a null command affects fd 0 or the fd the shell is reading for - input, and the redirection can potentially change or close that file - descriptor, force a fork so the redirection is done in a subshell - - 3/15 - ---- -lib/readline/display.c - - update_line: if we have to output some bytes, and we are outputting - the prompt string, make sure we correct _rl_last_c_pos if we are - at the wrap offset -- what if all of the characters in the prompt - are invisible, so the visible length is 0? Fixes display bug - reported by Grisha Levit - -execute_cmd.c - - undo_partial_redirects: new function, performs redirections specified - in redirection_undo_list and disposes of them. Intended to be used - to unwind redirections performed before a redirection error - - dispose_partial_redirects: new function, disposes of - redirection_undo_list and nulls the list - - execute_command_internal: use undo_partial_redirects - -execute_cmd.h - - undo_partial_redirects: extern declaration - - dispose_partial_redirects: extern declaration - -subst.c - - exp_jump_to_top_level: if we are throwing an expansion error while - expanding a redirection (expanding_redir != 0), undo any undoable - redirections by calling undo_partial_redirects() so we don't leave - any in place - -variables.c - - initialize_shell_variables: if SHELLOPTS is in the environment, - unset the readonly attribute on any existing variable with that - name. It may have been created by processing a -o option on the - command line. Fixes issue reported by Stephane Chazelas - - - 3/16 - ---- -lib/readline/histfile.c - - read_history_range: short-circuit and do nothing if the history file - is of 0 size - - read_history_range: make sure the buffer is zero-terminated so the - timestamp tests work right for history files of 1 character. Report - and recommended fix from Denis Martinez - -lib/readline/complete.c - - compute_lcd_of_matches: when trying to compute the common prefix - of a set of matches while performing case-insensitive completion - matching, don't sort the match list unless rl_sort_completion_matches - is non-zero. Fixes problem reported by Roee Bar - - 3/18 - ---- -subst.c - - extract_dollar_brace_string: handle process substitution embedded in - a ${...} expansion in the same way as command substitution. Reported - by D630 - -parse.y - - LEX_GTLT: new flag, set by parse_matched_pair when a `<' or '>' is - read - - parse_matched_pair: handle an embedded process substitution like an - embedded command substitution if we are parsing an array index or - a dollar-brace expansion. Reported by D630 - - 3/21 - ---- -subst.h - - ASS_NOEVAL, ASS_NOLONGJMP: new values for assignments, used by - make_variable_value - -variables.c - - make_variable_value: ASS_NOEVAL: if this is set, don't attempt - arithmetic evaluation or case modification, just produce the value - (still honor ASS_APPEND) - - make_variable_value: ASS_NOLONGJMP: don't longjmp back to top_level - if arithmetic evaluation fails due to a syntax error - - bind_variable_internal: make sure aflags is passed to all calls to - make_variable_value - - push_temp_var: add ASS_NOLONGJMP to the flags passed to - bind_variable_internal. Fixes bug reported by D630 - -bashline.c - - bash_execute_unix_command: don't bother to attempt optimization by - checking whether the call to parse_and_execute changes $READLINE_LINE; - it can be defeated by the new code that optimizes appends to string - variables. Bug reported by Grisha Levit - - 3/22 - ---- -subst.c - - expand_string_for_rhs: re-apply change from 2/19 based on discussion - on the austin-group mailing list about how unquoted ${var-$*} - expands when IFS is null. Originally reported by Martijn Dekker - - - 3/25 - ---- -parse.y - - read_token_word: if we read a WORD immediately after a CASE, FOR, or - SELECT, increment `expecting_in_token' to note that we're going to - be reading IN as the next non-newline token - - special_case_tokens: if we're expecting an IN (expecting_in_token > 0) - and we have an "in", return IN and decrement expecting_in_token. This - is a better implementation of Posix grammar rule 6 than the previous - code in that function (which is still there for posterity, but should - eventually be removed). Fixes bug reported by Torka Noda - - -subst.c - - string_list_pos_params: if the expansion is not quoted, and IFS is - null, return a string containing the quoted positional parameters - separated by spaces. Callers know what to do with the string - - parameter_brace_substring,parameter_brace_remove_pattern, - parameter_brace_transform,parameter_brace_patsub,parameter_brace_casemod: - for the VT_POSPARMS case, after calling the operator-specific - expansion function, which eventually calls string_list_pos_params, - leave the returned string alone, since it's already quoted properly - - parameter_brace_expand: after calling the above functions to perform - expansions, if the expansion is being performed on an unquoted $* - when IFS is null, set the W_SPLITSPACE flag in the return WORD_DESC - so that splitting on spaces is performed on the already-quoted word. - Fixes bug reported by Grisha Levit - - 3/28 - ---- -subst.c - - process_substitute: change so the subshell doesn't inherit the 'v' - option, like command substitution now does (as of bash-4.4). - Suggested by Grisha Levit - - 3/30 - ---- -subst.c - - parameter_brace_casemod: now takes a pflags parameter, like - parameter_brace_patsub; changed callers - - parameter_brace_transform: now takes a pflags parameter, like - parameter_brace_patsub; changed callers - - pos_params_pat_subst,pos_params_modcase: if mflags indicates we're - on the rhs of an assignment statement and not going to perform - word splitting, we're expanding $*, and $IFS is null, make sure - string_list_pos_params treats the expansion as double-quoted, so - the positional parameters will be concatenated. Fixes bug reported - by Grisha Levit - - 3/31 - ---- -doc/{bash.1,bashref.texi} - - add notes to the description of pipelines emphasizing that each - element of a pipeline is executed in a subshell, referring to the - description of a command execution environment, and that the - lastpipe option can modify that behavior. From a discussion with - Jean Delvare - - 4/1 - --- -subst.c - - expand_word_internal: set had_quoted_null to note for later if we - expand '', "", or "$x" when x is unset - - expand_word_internal: if we expand "$param" (or "${param}") and we - come back with a single word with the W_HAVEQUOTEDNULL flag set, - make sure we set had_quoted_null to remember it for later. In this - case, if we already have seen a quoted null and we expanded $@ in - this (sub)string expansion, we don't want to do any of the special - $@ handling. In particular, we don't want to set *expanded_something, - because that will result in word splitting and quoted null removal. - Fixes bug reported by Grisha Levit - - parameter_brace_patsub: when expanding ${*/pat/sub} in the case - where ifs_is_null != 0 and (pflags & PF_NOSPLIT2) (meaning we aren't - going to be doing word splitting), pass MATCH_ASSIGNRHS so we do - the right thing in this case. Part of a set of cases inspired by - Grisha Levit - - param_expand: case '*': if we are on the rhs of an assignment - (PF_ASSIGNRHS) and ifs is unset, and $1 == " ", we need to make sure - string_list_dollar_at gets called with Q_DOUBLE_QUOTES so it quotes - the positional parameters before joining them into a string with - string_list_internal. Otherwise, that first space gets removed by - the implicit word splitting that gets performed. Reported by - Grisha Levit - -array.c - - array_patsub,array_modcase: handle ${A[*]} identically to $* when - not quoted and IFS is null (separate with spaces). Makes things - like ${A[*]/x/y} behave the same as ${*/x/y} when IFS is null - -subst.c - - parameter_brace_patsub,parameter_brace_casemod: if expanding ${A[*]} - when the match is on the rhs of an assignment statement (PF_ASSIGNRHS) - and ifs is null, make sure the match is performed as if it were - quoted - - parameter_brace_substring: now takes a PFLAGS argument - - parameter_brace_substring: if expanding $* in a context where we - don't want to do word splitting (expand_no_split_dollar_star && - PF_NOSPLIT2), make sure we expand $* as if it were quoted - - parameter_brace_substring: if expanding an unquoted $* on the rhs of - an assignment statement when IFS is null, make sure we expand the $* - as if it were quoted - - 4/4 - --- -doc/{bash.1,bashref.texi} - - read: document that a delim argument of '' terminates each line when - a NUL character appears - - 4/5 - --- -subst.c - - parameter_brace_expand_word: handle case where unquoted $@ is - expanded in a context where word splitting is not performed (PF_NOSPLIT2) - and IFS is not equal to the standard value - - param_expand: handle case where unquoted $@ is expanded in a context - where word splitting is not performed (PF_NOSPLIT2) and IFS is not - equal to the standard value. Fixes bug with IFS == $1 when expanding - unquoted $@ reported by Grisha Levit - - 4/7 - --- -subst.c - - pos_params_pat_subst: if MATCH_ASSIGNRHS is set, don't expand $* - as quoted unless expand_no_split_dollar_star is also set. Fixes - expansion bug reported on 4/4 by Grisha Levit - - parameter_brace_transform: if we transform unquoted A[@] or A[*] - when IFS is null, don't quote the result of array_transform in the - same way we don't quote the result of parameter_list_transform, - since it will come back quoted. Fixes bug reported by - Grisha Levit - - list_transform: if we transform unquoted $* or ${a[*]} when IFS is - null and expand_no_split_dollar_star is non-zero, call - string_list_pos_params with Q_DOUBLE_QUOTES to inhibit splitting. - We do this in all cases except @Q, which is inconsistent but more - intuitive. - Fixes bug reported by Grisha Levit - - 4/8 - --- -builtins/read.def - - read_mbchar: if unbuffered == 2, we are running read -N and need to - use zreadn to read the rest of the multibyte char, since the - previous call to zreadn may have buffered characters. Fixes bug - reported by Stephane Chazelas - -pathexp.h - - QGLOB_CTLESC: new flag for quote_string_for_globbing: means to turn - CTLESC CTLESC (quoted CTLESC that's usually removed as part of - word splitting or quote removal) into CTLESC - -pathexp.c - - quote_string_for_globbing: if QGLOB_CTLESC is present in flags, - turn CTLESC CTLESC into CTLESC, even if the first CTLESC is preceded - by a backslash. Callers can't do this because the remaining CTLESC - will be treated as a quoting character and turned into a backslash - -execute_cmd.c - - execute_case_command: if the pattern is not quoted, make sure to tell - quote_string_for_globbing to turn CTLESC CTLESC into CTLESC by - passing QGLOB_CTLESC. Fixes bug reported 4/2 by Martijn Dekker - - - 4/9 - --- -subst.c - - string_transform: after calling ansiexpand for the `E' transformation, - need to call dequote_escapes because ansiexpand assumes it is being - called by the parser and arranges for ansicstr to quote CTLESC and - CTLNUL with CTLESC. Reported by Grisha Levit - -variables.c - - mk_env_string: when exporting functions, run them through - dequote_escapes because any strings containing CTLESC or CTLNUL are - still quoted with CTLESC. Reported by Grisha Levit - - -subst.[ch] - - quote_escapes,dequote_escapes: now take const char * argument - -execute_cmd.c - - execute_intern_function: if the function name contains CTLESC, run - it through dequote_escapes just in case it got CTLESC quoting - CTLESC or CTLNUL from the parser - - 4/11 - ---- -eval.c - - reader_loop: make sure PS0 is expanded and displayed before - incrementing the command number - -parse.y - - prompt_history_number: function to make history number as reported - by \!, or posix mode !!, be the same index that the (possibly multi- - line) command will be stored with. The history library increments - history_offset as soon as a new line is entered, and it's up to the - history code to store the second and subsequent lines of a command - in the same history entry. If we are expanding PS0 or PS4, or - a ${var@P} expansion, we're already past the history entry no - matter what. Inspired by patch from Grisha Levit - - - decode_prompt_string: call prompt_history_number - - decode_prompt_string: if expanding PS4 or ${var@P}, make the - command number the same as reported by PS0/PS1/PS2 - - 4/12 - ---- -support/Makefile.in - - clean: remove man2html.o as part of this production instead of - waiting until `distclean'. Reported by chrlis - -subst.c - - string_list_pos_params: if we are expanding $* in a context where - IFS is null and expand_no_split_dollar_star is set (no word - splitting), use string_list_dollar_star to force the positional - parameters to be joined without first separating them into a list - and attempting to join them later. Fixes problem with constructs - like ${var=${*:1}}, pointed out by Grisha Levit - . This undoes change to @Q from 4/7, so - list_transform change reverted - - 4/19 - ---- -builtins.h - - added BUILTINS_H include guard - -examples/loadables/Makefile.in - - install loadables.h as sample include file, along with Makefile.inc - - 4/23 - ---- -bashline.c - - maybe_make_readline_line: don't try to do anything if the passed - NEW_LINE is NULL. Report from Jaren Stangret , - fix from Eduardo Bustamante - - 4/24 - ---- -parse.y - - xparse_dolparen: if the current token (the last thing read_token - returned to yylex) is shell_eof_token, assume that it is the new - bison lookahead token and clear it. Fixes bug reported by - Werner Fink - - 4/25 - ---- -doc/{bash.1,bashref.texi} - - cmdhist: clarify that this option only has an effect if history is - enabled. Suggested by Matthew Braun - - 4/26 - ---- -jobs.c - - wait_for: if a non-interactive shell with job control enabled (set -m) - detects that a foreground job died due to SIGINT, act as if the shell - also received the SIGINT. Prompted by an austin-group-l discussion - - waitchld: run SIGCHLD trap for each child exited even if job control - is not enabled when in Posix mode. Prompted by an austin-group-l - discussion - - 4/27 - ---- -lib/readline/histfile.c - - read_history_range: if the history file is empty, free the history - filename before returning. Report and fix from Eduardo Bustamante - - -lib/readline/bind.c - - rl_parse_and_bind: make sure there is something, even if it's a - quoted empty string, before the `:' in a key binding. Report from - Eduardo Bustamante - - rl_parse_and_bind: if the right side of a key binding starts with a - quote, make sure there's a matching close quote before treating it - as a macro definition - - rl_translate_keyseq: if a key sequence ends with \C- or \M- (or - \C-\M-) make sure we break out of the loop if moving to the character - to be translated is a NUL. Old code did this only in the \C-\M- - case. Report from Eduardo Bustamante - - 4/28 - ---- -lib/glob/sm_loop.c - - GMATCH: implement a clever technique from glibc that avoids - backtracking past a `*' if we've already chosen to use it and need - matches beyond it. Look at https://research.swtch.com/glob for a - longer explanation. This results in a significant speedup for globs - with multiple instances of `*', especially with more than 4. - - 5/2 - --- -lib/readline/bind.c - - rl_translate_keyseq: make sure a trailing backslash in the key - sequence is preserved. Report from Eduardo Bustamante - - - 5/3 - --- -builtins/builtin.def - - builtin_builtin: make sure to set this_shell_builtin to the builtin - command being executed, overwriting `builtin'. Leave - last_shell_builtin alone. Fixes bug reported by Luiz Angelo Daros - de Luca - -jobs.c - - waitchld: modify change of 4/26 to run SIGCHLD traps even if job - control is not enabled - -lib/readline/misc.c - - rl_get_previous_history: if we didn't find a previous history entry - to use, call rl_maybe_unsave_line before returning because we - aren't going to use the saved line, and it has the same undo list - as rl_undo_list. Fixes fuzzing bug reported by Eduardo Bustamante - - - rl_get_{next,previous}_history: if there is no history list, don't - bother doing anything - - 5/4 - --- -expr.c - - popexp: if we error out due to stack underflow, make sure to zero out - expression and lasttp; they may contain undefined values we don't - want evalerror to print - - expr_unwind: handle expr_depth decrementing below zero - - evalexp: restore the old value of evalbuf even if we error and - longjmp; we may have called evalexp recursively - - evalerror: make sure expression is non-NULL before trying to print it. - These fix fuzzing bug reported by Eduardo Bustamante - , happens only in cases where we don't longjmp on - a fatal expansion error - - 5/5 - --- -parse.y - - read_token_word: when checking for a word that's a target of a - redirection, we can potentially call valid_array_reference, which - can end up calling the parser recursively. If it does that, we - need to make sure that yylval.word doesn't change, so we set it back - to the_word. Fixes another fuzzing bug - -parse.y - - arith_for_command: make syntax errors in the arithmetic for command - (signaled by make_arith_for_command returning NULL) more like - language syntax errors by calling YYERROR. Avoids complicated - attempts at error recovery and dealing with NULL returns from - command productions. Pointed out by Eduardo Bustamante - - -lib/readline/kill.c - - _rl_copy_to_kill_ring: make sure the current slot in the kill ring - has something in it, even if the last command was a kill, before - trying to modify it. Another fuzzing bug - - 5/6 - --- -builtins/read.def - - read_builtin: if we see a backslash when not in raw mode (not -r), - only back up `i' when we read the next character if we know we added - a CTLESC the last time through the loop (skip_ctlesc == 0), - especially if i == 0. Another fuzzing bug from Eduardo Bustamante - - - 5/8 - --- -builtins/read.def - - read_mbchar: handle zreadn/zreadc/zread returning EOF in the middle - of an incomplete multibyte sequence. Fixes another fuzzing bug - - read_builtin: use mb_cur_max instead of constant 4 when deciding - whether the next character can exceed the number of bytes available - in input_string - -lib/readline/input.c - - MinGW: include before . Fix from Eli Zaretskii - - -builtins/read.def - - read_builtin: if we get input from readline, we need to get the - remainder of a multibyte character from rlbuf instead of calling - read_mbchar. Bug reported by Eduardo Bustamante - - 5/9 - --- -parse.y - - token_is_assignment: use the allocated buffer approach in all cases, - not just if we're not using bash malloc. This avoids the assignment - to t[i+1] writing beyond the end of the allocated token if - i == token_buffer_size - 1. Another fuzzing bug - - xparse_dolparen: if parse_string returns < 0, we clear out the - current shell_input_line before performing a longjmp, since we're - abandoning parsing of this command. This is consistent with how - the parser resynchronizes after other syntax errors - - GRAMMAR: add 'error yacc_EOF' production to handle a syntax error - that's immediately followed by an EOF after resynchronization. - Fixes another fuzzing bug - - 5/10 - ---- -lib/readline/text.c - - _rl_set_mark_at_pos: don't let the mark be set to a position < 0. - Fixes a fuzzing bug - - rl_exchange_point_and_mark: don't do anything if the mark is already - less than 0 - - 5/12 - ---- -lib/readline/rlmbutil.h - - wchar_t: make sure this is defined as int if multibyte characters - aren't supported - -lib/readline/text.c - - _rl_change_case: don't force use of ascii toupper and tolower if - isascii returns true; it's not defined to work on characters outside - the 0..255 (really 0..127) range. Bug reported by - Eduardo Bustamante - - 5/14 - ---- -lib/readline/text.c - - rl_change_case: handle case where the old and new characters (after - the case change) are not the same number of bytes. Pointed out in - http://lists.gnu.org/archive/html/bug-bash/2015-01/msg00091.html - -lib/readline/display.c - - expand_prompt: use `ret' as first parameter to _rl_find_prev_mbchar - since that needs the base of the array. Bug from fuzzing reported by - Eduardo Bustamante - - 5/15 - ---- -execute_cmd.c - - execute_simple_command, execute_arith_command, execute_cond_command, - execute_arith_for_command: adjust the line number when executing a - function interactively so that the first command in the function is - line 1, not line 0, as Posix requires. Reported by Robert Elz - - - execute_simple_command, execute_arith_command, execute_cond_command, - execute_arith_for_command: ony adjust the line number when executing - a function interactively if we are not sourcing a file - (sourcelevel == 0), so this is consistent everywhere we adjust the - line number - - 5/16 - ---- -bashline.c - - bash_directory_completion_hook: when calling split_at_delims to see - whether a ${ or $( is closed, use the right value for `start' relative - to the substring beginning at `$'. Bug from fuzzing reported by - Eduardo Bustamante - -expr.c - - expassign: if the call to expcond generates a syntax error in a - context when the shell won't longjmp (like when evaluating $PS1), - it will end up NULL and we need to catch it before calling strlen. - Bug from fuzzing reported by Eduardo Bustamante - -examples/bash-completion/ - - new place to include a current or recent version of the - bash-completion package - - 5/19 - ---- -lib/readline/display.c - - CHECK_INV_LBREAKS: new versions for multibyte and single-byte chars, - so the multibyte version can check and increase the size of - line_state_invisible->wbsize and line_state_invisible->wrapped_line, - callers who call CHECK_INV_LBREAKS must update - wrapped_line[newlines] when in HANDLE_MULTIBYTE mode. Fuzzing bug - reported by Eduardo Bustamante - - 5/24 - ---- -lib/readline/search.c - - _rl_nsearch_callback,noninc_search: handle _rl_search_getchar - returning -1 (EOF or read error) by aborting the search. - Fuzzing bug reported by Eduardo Bustamante - - 5/25 - ---- -variables.c - - localvar_inherit: new variable, controlled by shopt localvar_inherit - option - - make_local_variable: if localvar_inherit is set, the new local - variable inherits a previous scope's variable's value, attributes - (except nameref), and dynamic variable information. If a local - variable inherits a value, the local is not invisible - -builtins/shopt.def - - localvar_inherit: new option - -doc/{bash.1,bashref.texi} - - localvar_inherit: document new shopt option - - 5/29 - ---- -lib/readline/readline.c - - _rl_subseq_result: only return -1 and back up the chain if we are - dealing with a result (r) that's already < 0 and we are at the end - of a multi-key sequence. Otherwise, a failing readline command (e.g., - delete-char at the end of a line) could cause this code to be - executed. Report from Nuzhna Pomoshch - -lib/readline/histfile.c - - read_history_range: if the file isn't a regular file, return an - error. Bug report from Eduardo Bustamante , - relaying from IRC - - 5/30 - ---- -variables.c - - set_pwd: if in Posix mode, and PWD appears in initial environment as - an absolute pathname to the current directory, set PWD to the result - of canonicalizing the environment value, or to the physical path if - canonicalization fails. From a suggestion by Eduardo Bustamante - - - 5/31 - ---- -builtins/read.def - - read_builtin: if -n or -N option is supplied with a 0 argument, - don't attempt to read any characters; bail out right away. Reported - by Eduardo Bustamante , relaying from IRC - - 6/3 - --- -config.h.in - - HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC: add define, used by stat-time.h - to construct a timespec from struct stat. Report and fix from - Siteshwar Vashisht - -variables.h - - att_regenerate: new internal variable attribute: if set, regenerate - dynamic variable's value when it's exported and we are creating the - export environment - -variables.c - - init_dynamic_variables: LINENO, EPOCHSECONDS, EPOCHREALTIME: set - internal regenerate attribute for these dynamic variables - - make_env_array_from_var_list: if a dynamic variable has the - regenerate attribute set, call the dynamic value function to generate - an updated value before placing it in the environment. From a report - about exporting LINENO from Robert Elz - - 6/4 - --- -lib/glob/sm_loop.c - - BRACKMATCH: at the matched: label, make sure we get the bracket - character we're looking for (char class, collating symbol. etc.) - before we decrement the count of braces we're looking for. Eventually - we could do something about badly-formed bracket expressions - - 6/7 - --- -lib/readline/histlib.h - - strchr: only declare if __STDC__ is not defined, since we already - include . Report from Chi-Hsuan Yen - - 6/9 - --- -lib/readline/display.c - - update_line: when wrapping lines with multibyte chars at the end of - the new line being wrapped, make sure we copy the NULL byte in old - when moving the contents of old around. Fuzzing bug reported by - Eduardo Bustamante - -lib/readline/mbutil.c - - _rl_get_char_len: use MB_CUR_MAX in the call to mbrlen; there's no - need to look at the rest of the string when we're just interested in - the length of a single character - - 6/12 - ---- -jobs.c - - wait_for: when waiting for the next child to exit (ANY_PID), make - sure to restore the old SIGINT handler before returning. Fixes - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864649 - - 6/14 - ---- -lib/readline/display.c - - expand_prompt: make sure `ret' is NULL-terminated before calling - _rl_prev_mbchar_internal, since that calls strlen, which requires - the passed string to be NULL-terminated. Another fuzzing bug. - - 6/15 - ---- -lib/readline/isearch.c - - _rl_isearch_fini: use rl_replace_line instead of strcpy so rl_end - gets set right - - _rl_isearch_fini: after restoring rl_point, call _rl_fix_point so - we don't set rl_point > rl_end. Fixes a fuzzing bug - -lib/readline/mbutil.c - - _rl_find_next_mbchar_internal: if _rl_adjust_point returns < 0, - just punt, treat the value as a byte, and advance point by 1 - -lib/readline/util.c - - rl_tilde_expand: rearrange code in the whitespace loop so that - `start' gets tested first and we don't try to dereference - rl_line_buffer[-1]. Another fuzzing bug from dualbus@gmail.com - -bashline.c - - bash_dequote_filename: make sure that pointers that are used as - indices into sh_syntaxtab are cast to unsigned char first, to - avoid problems with signed chars > 128. Fixes a fuzzing bug. - -lib/readline/kill.c - - _rl_copy_to_kill_ring: when reallocating the kill ring, make sure to - allocate one more than the max number of kills so the loop that - copies the kill ring entries down runs right (and to mirror the - initial allocation). Fixes a fuzzing bug. - -lib/readline/isearch.c - - _rl_isearch_dispatch: make sure that cxt->sline_index never goes < 0 - even when searching a line in reverse. Fixes a fuzzing bug - - 6/16 - ---- -parse.y - - xparse_dolparen: short-circuit immediately if passed a empty string - -lib/readline/display.c - - update_line: when wrapping multibyte characters, make sure we deal - with WCWIDTH returning -1. Fixes a fuzzing bug - - 6/17 - ---- -execute_cmd.c - - execute_coproc: make sure `invert' is set before trying to use it - when returning failure on invalid coproc name. Report and fix from - Eduardo Bustamante - - execute_command_internal: make sure execute_coproc sets - last_command_exit_value if it returns failure, so an invalid name - can set $? = 1. Report and fix from Eduardo Bustamante - - -lib/readline/display.c - - update_line: make sure all references to `wrapped_line' are wrapped - with #ifdef HANDLE_MULTIBYTE. Report and fix from Eduardo Bustamante - - -lib/readline/vi_mode.c - - _rl_vi_change_char: don't use rl_point++ when you mean to move - forward a character; use _rl_vi_append_forward to account for - multibyte characters and take vi end of line handling into account - - _rl_vi_last_replacement: now an array of chars whether we are - using multibyte chars or not. If we're not, the character we read - to use as the replacement is saved as the first element of the array - - rl_vi_change_char,_rl_vi_callback_change_char: changes to deal with - _rl_vi_last_replacement being an array. Fixes bug reported by - Eduardo Bustamante - -lib/readline/mbutil.c - - _rl_get_char_len: look at at most MB_CUR_MAX characters, but maybe - fewer if the length of the string is less - -builtins/bind.def - - unbind_keyseq: new function for the -r option; checks whether the - key sequence is actually bound before trying to bind it to NULL. - Partial fix for https://savannah.gnu.org/support/?109329 - -parse.y - - augment `error yacc_EOF' production to call YYABORT in non-interactive - shells or calls to parse_and_execute (eval, command substitution, - etc.) Fixes bug reported by Martijn Dekker - - 6/19 - ---- -bashline.c - - edit_and_execute_command: don't add rl_line_buffer to the history - list if it's empty; consistent with how other code treats an empty - line - -execute_cmd.c - - execute_builtin: make sure to preserve the temporary env across the - execution of the `read' builtin or `fc' builtin if HISTORY is - defined, in case `read -e' calls edit-and-execute-command. Should - have no side effects. Reported by Eduardo Bustamante - - -general.c - - line_isblank: new function: returns true if passed string is composed - entirely of blanks - -general.h - - line_isblank: new extern declaration - -parse.y - - history_delimiting_chars: return "" for a blank line, since there's - nothing to delimit with `;' - - 6/21 - ---- -jobs.c - - wait_for: make sure to call restore_sigint_handler before returning - if we return out of the loop due to no children. Report from - Eduardo Bustamante - -subst.c - - expand_word_internal: if split_on_spaces is set, and the word is - unquoted, and IFS is null, split the results of the previous steps - on $' \t\n' instead of just ' '. This relies on the previous steps - quoting the portions of the word that should not be split. Fixes - bug reported by Kevin Brodsky - -expr.c - - evalexp: after running expr_unwind, make sure we reset expr_depth - to 0 for the next call - - expr_streval: if after a call to get_array_value (which can call - the expression evaluator recursively) we discover that expr_depth - is less than it was before we called it, we assume there has been - some kind of error and an expr_unwind, so we treat it as an - error and either longjmp back to the expression top level or return - 0 immediately. Fixes bug reported by Eduardo Bustamante - - - 6/23 - ---- -doc/{bash.1,bashref.texi} - - add text noting that $* and ${array[*]} (unquoted) can also expand - to multiple words - - 6/29 - ---- -general.[ch] - - default_columns: new function, returns the value of COLUMNS, or - refreshes it if check_window_size is set and COLUMNS is unset. By - default, it returns 80 - -execute_cmd.c - - select_query: use default_columns() instead of fetching value of - COLUMNS directly - -builtins/help.def - - show_builtin_command_help: use default_columns() instead of fetching - value of COLUMNS directly - - 6/30 - ---- -builtins/read.def - - read_builtin: call QUIT during the read loop, just in case we get a - signal we should act on that didn't cause read to be interrupted. - Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1466737 - - read_builtin: if -n or -N is supplied with a 0 argument, try a zero- - length read to detect errors and return failure if that read returns - a value < 0. Suggested by dualbus@gmail.com - - 7/4 - --- -bashhist.c - - maybe_add_history: keep track of whether the current line is a shell - comment, even if we're not adding it because it's in a multi-line - command, so we use appropriate delimiters between it and any - subsequent lines. Fixes bug reported by Grisha Levit - back on 2/28/2017 - -bashline.c - - operate_and_get_next: if given an explicit argument, use that to - choose which line in the history to use. - -lib/readline/doc/rluser.texi,doc/bash.1 - - operate-and-get-next: document new effect of explicit numeric arg - -lib/readline/complete.c - - fnprint: make sure print_len is initialized before using it on - systems without multibyte character support. Report and fix from - Juan Manuel Guerrero - - 7/6 - --- -builtins/printf.def - - PRETURN,printf_builtin: check variable returned by bind_printf_variable, - return failure if that indicates we can't perform an assignment - because the variable is marked readonly or noassign. Fixes bug - reported by Arnaud Gaillard - - 7/7 - --- -lib/readline/text.c - - rl_quoted_insert: new feature: a negative argument means to insert - the next -COUNT characters using quoted-insert. Original feature - from Jason Hood . Still needs work on - redisplay - - _rl_insert_next_callback: implement support for negative arguments - similar to rl_quoted_insert: we just insert one at a time and keep - increasing the count until it hits 0 - -lib/readline/misc.c - - _rl_arg_callback: if the return value from _rl_arg_dispatch indicates - we should keep reading a numeric argument, update the message with - the new arg value - - 7/8 - --- -lib/readline/signals.c - - _rl_handle_signal: make sure all uses of any of the job control - signals are protected by a check for SIGTSTP being defined. Report - from Juan Manuel Guerrero - - 7/11 - ---- -lib/readline/vi_mode.c - - rl_vi_replace: when making the new keymap for vi replacement mode, - make sure that ANYOTHERKEY is set correctly, otherwise some input - will cause _rl_dispatch to return -2 to the top level. Fixes fuzzing - bug reported by Ben Wong - - 7/19 - ---- -builtins/read.def - - struct ttsave: make the attrs member a struct, not a pointer, to force - a structure copy that will survive a longjmp to another context. - Leaving it as a pointer to a local struct is not portable - - 9/10 - ---- -execute_cmd.c - - execute_builtin: make sure that we set up the unwind-protect for - pop_scope (temporary_env is non-zero) so that the temporary env - is propagated to the current environment only for special builtins - (source/eval/unset) not run by the command builtin - (flags & CMD_COMMAND_BUILTIN == 0). Fixes bug reported by - Martijn Dekker - - 9/17 - ---- -builtins/printf.def - - asciicode: don't use mblen to check whether or not a character is a - valid multibyte character; use mbtowc right away and then inspect - the return value. Fixes bug reported by Stephane Chazelas - - - 9/27 - ---- -{jobs,subst}.h - - move declaration of last_command_subst_pid to subst.h, since it's - declared in subst.c and doesn't depend on job control. Reported by - Martijn Dekker - -builtins/read.def,variables.c - - fixed a couple of problems (READLINE, ARRAY_VARS) that prevented - the minimal config from building - - 10/1 - ---- -parse.y - - special_case_tokens: if we are returning DO in a case where the last - two tokens read are `FOR' and `WORD' make sure we decrement - expecting_in_token. Fixes bug reported by Martijn Dekker - - - 10/4 - ---- -subst.c - - expand_string_for_rhs: now takes an additional PFLAGS argument from - its caller (one so far); passes that through to call_expand_word_internal - as W_ASSIGNRHS. Fixes bug reported by Martijn Dekker - - - expand_string_for_rhs: expanding b in ${a[:]=b} is now done as if - b were the rhs of an assignment statement. This means that splitting - isn't done, but tilde expansion is performed as if the statement - were `a=b'. Fixes splitting bug with $* reported by Martijn Dekker - - -command.h - - W_NOASSNTILDE: new word flag, means to not perform tilde expansion - following a `:' even if the word has the W_ASSIGNRHS flag enabled - -subst.c - - expand_word_internal: if we see a `:' with the W_NOASSNTILDE flag - set, just add the character and inhibit any subsequent tilde - expansion. Currently not set anywhere, but it could be set in - expand_string_for_rhs to satisfy its peculiar semantics - - 10/6 - ---- -lib/sh/casemod.c - - sh_modcase: convert even single-byte wide characters to wide upper - or lowercase equivalents to accommodate locales where single-byte - characters have multibyte upper and lower case conversions. Bug - reported by Stephane Chazelas - - 10/7 - ---- -doc/{bash.1,bashref.texi} - - slight changes to the description of command_not_found_handle to - clarify that it's executed in a separate execution environment, - just like if the command was found. Reported by Martijn Dekker - - - 10/8 - ---- -lib/readline/doc/{history.3,hstech.texi} - - history_get: clarify the range of valid values for the OFFSET - argument. From a report by Kevin Ryde - - 10/21 - ----- -subst.c - - expand_string_for_rhs: set W_NOASSNTILDE if the operator is `=' - for backwards compatibility with bash-4.4 - -shell.c - - main: set positional parameters before running the startup files, - so the startup files can inspect $@. Often-requested feature, - most recently from Stephane Chazelas - - 10/27 - ----- -doc/{bash.1,bashref.texi} - - Arrays: add some clarifying language to make it clear that array - references that don't use the ${a[s]} syntax are subject to - globbing when passed as arguments to commands such as unset, and - should be quoted for safety. Change prompted by a report from - Eli Barzilay - -parse.y - - parse_comsub: make sure we don't run off the end of the `ret' - buffer when checking for the here doc delimiter. Report from - Jakub Wilk , the result of a fuzzing test. Pointer - to place for the fix from Eduardo Bustamante - - 10/30 - ----- -builtins/pushd.def - - get_directory_stack: make sure the current directory (element 0 of - the stack) is passed to polite_directory_format under the same - conditions as the rest of the stack entries (flags & 1). Otherwise - something like `cd ${DIRSTACK[0]}' will fail. Fixes bug reported - by Steve Jones - -builtins/declare.def - - declare_internal: when checking for a `[' to see whether or not this - is an array variable declaration (declare -a foo[12]), make sure - we don't do the check if we're just dealing with shell functions. - Bug and pointer to fix from PJ Eby - - 11/1 - ---- -parse.y - - parse_comsub: if we read a four-character word followed by a break - character, and that word is not one of the reserved words, set - lex_rwlen to 0 since we are no longer in a reserved word. It only - hurts if another break character immediately follows, so that test - succeeds again. Turn off the RESWDOK flag only if it's not a shell - metacharacter, too. Fixes bug reported by Kjetil Torgrim Homme - - - 11/3 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: if we are searching in reverse order, let - sline_index go to -1 to avoid searching the same line twice. It - gets reset right after that, so there's no danger of indexing into - the history line with a negative index. - - 11/7 - ---- -execute_cmd.c - - time_command: only restore command->flags if CODE indicates we didn't - perform a longjmp back to top_level. If we did, `command' has already - been freed. Fixes bug reported on savannah by - ukuvbu oibws - https://savannah.gnu.org/support/?109403 - - 11/10 - ----- -lib/sh/unicode.c - - u32cconv: make sure to initialize localconv to -1 (error) in case - we switch from a utf-8 locale to something else and call - iconv_close. Report from Egmont Koblinger ; fix - from Eduardo Bustamante - - 11/16 - ----- -subst.c - - parse_comsub: istring_index should be a size_t to avoid integer - overflow when allocating large pieces of memory. Report and fix - from Siteshwar Vashisht , originally based on - http://lists.gnu.org/archive/html/bug-bash/2017-11/msg00047.html - - 11/24 - ----- -lib/readline/bind.c - - rl_empty_keymap: new public function, returns non-zero if there are - no keys bound in the keymap passed as an argument - -lib/readline/readline.h - - rl_empty_keymap: new public extern declaration - -lib/readline/doc/rltech.texi - - rl_empty_keymap: document new function - -lib/readline/bind.c - - rl_generic_bind: keep track of the previous keymap and previous - index in a multi-key key sequence so we can remove an empty terminal - keymap and remove a previous override to ANYOTHERKEY. Right now, - this only works for one previous keymap level. Inspired by a report - from Clark Wang - - 11/25 - ----- -lib/readline/display.c - - _rl_update_final: make sure that computing the length of the visible - bottom line (botline_length) takes any invisible characters in the - prompt into account (woff). This value is used as part of the check - whether or not we want to remove the line-wrapping indicator on - terminals like xterm - - _rl_update_final: when removing the line-wrapping indicator on xterm, - make sure we take invisible characters in the prompt (woff) into - account when computing the character in the rightmost physical - screen position. Fixes cosmetic line-wrapping issue reported by - Egmont Koblinger - - 11/27 - ----- -lib/sh/ufuncs.c - - fsleep: if using select to implement sleep, use restart after - a signal interrupts the select and handle pending signals. If - pselect is available, use that instead and block SIGCHLD while - pselect is executing. - Fixes report from Thiruvadi Rajaraman - - 11/28 - ----- -lib/readline/signals.c - - rl_check_signals: new public function: a wrapper for RL_CHECK_SIGNALS - that can be used by applications that install a wrapper for - rl_getc (rl_getc_function) so they can respond to signals that - arrive while waiting for input in the same way as rl_getc. The app - can use rl_pending_signal() to get the most recently-received - signal. From a discussion about Gnuplot initiated by - Rin Okuyama - -lib/readline/readline.h - - rl_check_signals: new extern declaration - -lib/readline/doc/rltech.texi - - rl_check_signals: document new public function - -variables.c - - set_pwd: test for and force an inherited OLDPWD to be a directory - if OLDPWD_CHECK_DIRECTORY is defined in config-top.h (it is by - default). Issue raised by Mikulas Patocka - -config-top.h - - OLDPWD_CHECK_DIRECTORY: new define, defined to 1 by default - - 11/29 - ----- Makefile.in - - pathexp.o: add dependencies on libintl.h. Reported by - Ross Burton - - 12/1 - ---- -lib/sh/ufuncs.c - - fsleep: add blocking and releasing SIGCHLD using sigprocmask - around call to select(2) even if pselect(2) is not available - - 12/3 - ---- -execute_cmd.c - - coproc_setstatus: new utility function, take a pointer to a coproc - and a status and mark the coproc as dead and having been reaped - with that status. Used by child processes who want to invalidate - the coproc's pid - - 12/5 - ---- -subst.c - - process_substitute: instead of just having a flag to denote that a - file descriptor is connected to a process substitution, store the - pid of the child process (still needs work) - - find_procsub_child,set_procsub_status,reap_procsubs: utility - functions to allow the job control code to detect that a process - substitution child has died and deallocate the file descriptors - or pathname - -subst.h - - find_procsub_child,set_procsub_status,reap_procsubs: extern - declarations - -nojobs.c - - set_pid_status: if we are reaping a process substitution, call - set_procsub_status to record the fact - -jobs.c - - waitchld: if we are reaping a process substitution, call - set_procsub_status to record the fact. Doesn't really do anything - yet - - 12/6 - ---- -execute_cmd.c - - execute_command: don't call unlink_fifo_list if we're in the - middle of executing a list of commands (executing_list != 0). - Partial fix for bug reported by Stephane Chazelas - - - execute_simple_command: don't close process substitution file - descriptors in the parent after forking children in a pipeline; - defer until pipeline completes, since parent may have inherited - fds from a calling scope (e.g., via `.'). EXPERIMENTAL - - execute_disk_command: don't close process substitution file - descriptors in the parent after forking the child. EXPERIMENTAL - - 12/7 - ---- -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - show-mode-in-prompt: clarify that this must be enabled before the - vi and emacs mode strings are prefixed to the prompt. Report from - Rob Foehl - - 12/8 - ---- -execute_cmd.c - - execute_coproc: don't warn about an existing coproc if the write and - read file descriptors are unusable (-1), as they will be after a - call to coproc_closeall in a subshell. Fixes spurious warning - reported by Tobias Hoffmann - -jobs.c - - bgp_resize: avoid overflow when calculating the new size if the - child process limit is something ridiculously large. Report and - fix from Natanael Copa - -execute_cmd.c - - execute_builtin_or_function: if we return via the return builtin, we - don't get a chance to free the saved fifo list, so add an unwind- - protect to make sure it happens. Part of fix for leak reported by - Oyvind Hvidsten - - execute_command_internal: if we unwind via the return builtin (e.g., - we execute a function which then returns via the return builtin to - a previous function), we don't free the saved fifo list, so add an - unwind-protect to make sure the free happens. Rest of fix for leak - reported by Oyvind Hvidsten - -subst.c - - add_fifo_list: for the FIFO case (no /dev/fd), make sure we - initialize the new members of the fifo list after xrealloc - - 12/9 - ---- -subst.c - - dev_fd_list: now a list of type `pid_t' so we can store process - associated with the pipe fd into the right element; change all - necessary functions (copy_fifo_list, add_fifo_list) - - process_substitute: store pid of child process into the right - index in dev_fd_list after opening the pipe. Process ID of -1 means - process has been reaped and fd needs to be closed (or FIFO needs to - be unlinked); value of 0 means slot is unused - -jobs.c - - wait_for_background_pids: call reap_procsubs to make sure we clean - up all reaped process substitutions before trying to wait for - everything (still needs work) - -tests/{run-procsub,procsub.{tests,right}} - - new file, tests of process substitution that have failed in the past - - 12/10 - ----- -jobs.c - - wait_for_background_pids: warn if one of the jobs is stopped - -subst.c - - wait_procsubs: new function, call wait_for for every "live" process - substitution - -jobs.c - - wait_for_background_pids: call wait_procsubs to reap any living - process subsitutions - - 12/13 - ----- -lib/readline/bind.c - - parser_if: add support for testing the readline version, using the - full set of arithmetic comparison operators (and supporting both - = and ==), using version numbers of the form major[.[minor]] - - 12/14 - ----- -subst.[ch] - - string_list_dollar_star: now takes QUOTED and PFLAGS arguments like - string_list_dollar_at, changed all callers. Not used yet. - - 12/16 - ----- -subst.c - - param_expand: broke out cases of expanding unquoted (quoted == 0) - $* on the rhs of an assignment statement (pflags & PF_ASSIGNRHS) - with various values of IFS (unset, null, set to non-null value) to - capture the expansion subtleties. From a report back on 11/24 by - Martijn Dekker - - 12/17 - ----- -array.h - - set_element_value: new define, sets array element AE to VALUE - -variables.c - - set_pipestatus_array: use set_element_value where appropriate - - 12/18 - ----- -subst.c - - parameter_brace_find_indir: when expanding the indirect parameter - to find the eventual variable name, we don't perform word splitting. - Make sure this does the right thing for * and @. Fixes bug - reported by isabella parakiss - - 12/19 - ----- -doc/{bash.1,bashref.texi} - - indirect expansion: make sure to note that the value of the indirect - variable does not undergo word splitting as one of its expansions, - as in fix from 12/18 - - 12/22 - ----- -subst.c - - parameter_brace_expand_rhs: make sure the value this function returns - when OP is `=' is quoted appropriately, as the callers expect. More - changes from Posix interp 221. Fixes report from Martijn Dekker - - -variables.c - - assign_hashcmd: if running in a restricted shell, make sure the - target of the hash assignment can be found via a $PATH search, to - prevent users assigning commands to the hash table they would not - ordinarily have access to. Fixes issue raised by Drew Parker - - -builtins/hash.def - - hash_builtin: if running in a restricted shell, make sure the - pathname target of `hash -p' can be found via a $PATH search, to - prevent users assigning commands to the hash table they would not - ordinarily have access to. - - 12/27 - ----- -array.c,arrayfunc.c,... - - many changes to clean up unused variables and functions. From a - report from Siteshwar Vashisht - - 12/28 - ----- -lib/readline/terminal.c - - _rl_term_clrscroll: save the `E3' termcap capability, which clears - the scrollback buffer where supported. Unused right now - -lib/readline/rlprivate.h - - _rl_term_clrscroll: extern declaration - -lib/readline/bind.c - - parser_if: added simple variable comparison capability. Allowable - operators are `=', `==', and `!='; boolean variables must be - compared to either `on' or `off'; variable names must be separated - from the operator by whitespace - -doc/bash.1,lib/readline/doc/{rluser.texi,readline.3} - - document new `if variable comparison value' construct - - 1/2/2018 - -------- -lib/glob/sm_loop.c - - EXTMATCH: when matching against !(patlist), if a filename beginning - with a `.' does not match any of the patterns in patlist, don't - return it as a match if leading dots need to be matched explicitly - (flags & FNM_PERIOD). Report from Eric Cook - - 1/3 - --- -variables.[ch] - - bind_function_def: takes an additional flags argument. If FLAGS&1, - overwrite any existing function_def hash table entry; if FLAGS==0, - leave any existing function_def alone. - -make_cmd.c - - make_function_def: call bind_function_def with flags == 0 - -execute_cmd.c - - execute_intern_function: call bind_function_def with flags == 1 so - we have function_def information that's correct for where the - function is defined, not just where it's last parsed. Fixes report - from Bruno Vasselle ; final piece of - fix from 12/15/2011 - - 1/4 - --- -subst.c - - param_expand: deal with string_list_dollar_star returning NULL. - Fixes bug reported by Martijn Dekker - -builtins/history.def - - history_builtin: enabled code that performs range deletion - - 1/5 - --- -subst.c - - do_assignment_internal: if performing a compound assignment, make - sure to pass ASS_CHKLOCAL flag to do_compound_assignment if the - assignment word has the W_CHKLOCAL flag set - - do_compound_assignment: honor ASS_CHKLOCAL flag and check for an - existing local variable before creating or modifying a global - variable - -builtins/declare.def - - declare_internal: new (undocumented so far) option: -G. Means to - act on global variables (create, modify) if no local variable is - found with the specified name - - declare_find_variable: new declare-specific wrapper functon for - declare builtin; obeys -g and -G options in one place - - declare_internal: if no variable is found after following any nameref - chain, look up the variable using declare_find_variable to honor the - -G option. XXX - so far, this is the only place that function is used - -subst.c - - shell_expand_word_list: before calling make_internal_declare, add - 'G' to the options list if W_CHKLOCAL is set in the word's flags. - This makes builtins like `readonly' that modify local variables in - a function behave the same for scalar and array variables - - 1/11 - ---- -parse.y - - shell_getc: move code that decides whether to append a space to an - alias expansion here from mk_alexpansion, so we can inhibit adding - a space if we're currently parsing a single or double quoted string - - 1/12 - ---- - -parse.y - - clear_string_list_expander: take a pointer to an alias that's about - to be freed and make sure there aren't any pointers to it in the - list of pushed strings. If there are, zero it out in the pushed - string list to avoid referencing freed memory in pop_string() - -alias.c - - free_alias_data: if an alias being freed is currently being expanded, - call clear_string_list_expander to remove references to it from the - list of pushed strings - - 1/14 - ---- -pcomplib.c - - progcomp_search: add code to look up an alias for the CMD argument - and return the completions for the first word of that alias if one - is found. Just a start at completing aliases, a much-requested - feature - -pcomplete.h - - COPT_LASTUSER: last flag value used by user-settable completion - options - - PCOMP_RETRYFAIL, PCOMP_NOTFOUND: new #defines, possible return values - from programmable_completions in FOUNDP argument. Moved RETRYFAIL - define here from pcomplete.c to avoid collisions with user-settable - option values (COPT_*) - - 1/15 - ---- -pcomplete.c - - programmable_completions: if we don't find any completions for a - command, and RETRY is 0, see if the command is a defined alias, - expand it, and try to expand the first word of the value as a - command, and find any programmable completions for it. Here right - now, could be moved to attempt_shell_completion later if we need - to do more analysis of the expanded line. We'll see how it works - in practice. (Disabled for now.) - - 1/16 - ---- -parse.y - - grammar: when timing the null command, make sure to turn off the - flags in parser_state (PST_REDIRLIST) that make_simple_command sets - when given a NULL second argument, since it assumes that it's going - to turn those off when it gets the next word of the simple command - (which it never gets in this case). Fixes bug reported by - Anti Räis - - 1/19 - ---- -lib/readline/rltty.c - - prepare_terminal_settings (termios/termio): if there is a function - bound to the VDISCARD character in the current keymap, set VDISCARD - to _POSIX_VDISABLE while readline is active. From a report from - Rhialto - - 1/22 - ---- -builtins/history.def - - histtime: check whether or not localtime() returns NULL, and make - sure we only call strftime() with a valid struct tm. This can happen - when the timestamps in the history file overflow a time_t. Fixes bug - reported by Luke Dashjr - -bashline.c - - edit_and_execute_command: if we're in vi editing mode, make sure - we end up in insert mode after executing the commands from the - edited file. This seems to be what other shells do. Report from - Stan Marsh - - 1/26 - ---- -bashline.c - - command_word_completion_function: match alias and shell function - names case-insensitively if the readline completion-ignore-case - variable is set. Inspired by report from - -lib/readline/display.c - - update_line: when performing a dumb update after wrapping the line - (usually due to printing the prompt), make sure we adjust - _rl_last_c_pos if there are invisible characters in prompt lines - other than the first (we assume those invisible characters are in - the last line, which is nearly always the case). We adjust by the - total number of invisible chars less the number of invisible chars - in the first prompt line. From a report in - https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1745273 - -execute_cmd.c - - execute_command_internal: if redirections attached to a compound - command fail, make sure we discard the `internal_fifos' unwind- - protect frame after freeing the copied fifo_list and before returning - - 1/30 - ---- -lib/readline/rlprivate.h - - BRACK_PASTE_FINI: add \r to the end of the string to avoid problems - with the tty driver thinking the cursor was in the wrong position. - Fixes issue reported by Egmont Koblinger - - 1/31 - ---- -lib/sh/zread.c - - zread,zreadintr: call check_signals() before calling read() to - minimize the race window between signal delivery, signal handling, - and a blocking read(2). Partial fix for FIFO read issue reported by - Oyvind Hvidsten - -doc/{bash.1,bashref.texi} - - shopt: document `assoc_expand_once' shell option - - 2/1 - --- -config-top.h - - DONT_REPORT_SIGTERM: define, so non-interactive shells will no - longer print termination messages for child processes killed by - SIGTERM - - 2/6 - --- -lib/readline/text.c - - rl_insert: don't attempt to optimize typeahead if we are only reading - a fixed number of characters (rl_num_chars_to_read > 0) - -redir.c - - redir_special_open: if the shell is restricted, return a - RESTRICTED_REDIRECT error for attempts to open /dev/tcp and /dev/udp - sockets. Inspired by report from Blake Burkhart - - do_redirection_internal: if redir_open returns RESTRICTED_REDIRECT, - return that right away (instead of errno) so we can print a better - error message - - 2/11 - ---- -jobs.c - - bgp_resize: fix problems with (pid_t) overflow when calculating new - size for table when js.c_childmax is near the limit of a pid_t - (e.g., 2**31 - 1 on a 32-bit system, or 2**63-1 on a system with - 32-bit pid_t). Fixes hang reported by Natanael Copa - based on his patch from 12/8. - - bgp_resize: cap max table size for bgpids at MAX_CHILD_MAX (32768) - -include/typemax.h - - TYPE_MINIMUM, TYPE_MAXIMUM: updated definitions from coreutils-8.29, - silences some compiler warnings - - 2/14 - ---- -Makefile.in - - maybe-clean: use cd and pwd -P to test whether or not two directory - names identical, since topdir = '.' and BUILD_DIR = full pathname - when you use something like `bash ./configure'. Problem reported by - Michael Felt - -subst.c - - split_at_delims: if SD_NOQUOTEDELIM is in the flags argument, don't - treat `'' and `"' as candidates for possible sequences of delimiters, - even if they're part of the delimiter set (the delims argument). - Fixes problem with completing lines like `foo --bar='quux baz' xx' - reported by Nick Patavalis - - 2/15 - ---- -copy_cmd.c - - copy_word_list: build the list in the right order, avoiding having - to reverse it at the end. Helps with long argument lists - -shell.c - - bind_args: build the argument list in the right order, avoiding - having to reverse it at the end. - - bind_args: only call push_args to save argc and argv as BASH_ARGC - and BASH_ARGV if debugging mode is enabled (debugging_mode != 0). - Inspired by report from Ambrose Feinstein - - bind_args: note that we've saved BASH_ARGC and BASH_ARGV by setting - bash_argv_initialized - - shell_reinitialize: reset bash_argv_initialized back to 0 so - BASH_ARGV and BASH_ARGC will be recreated if we're in debugging mode - -variables.c - - save_bash_argv: new function, initializes BASH_ARGV and BASH_ARGC - from the saved positional parameters - - init_bash_argv: initialize BASH_ARGV and BASH_ARGC if - bash_argv_initialized == 0 - -builtins/shopt.def - - shopt_set_debug_mode: if we're turning on debug mode, initialize - BASH_ARGC and BASH_ARGV if bash_argv_initialized == 0 - - 2/16 - ---- -execute_cmd.c - - execute_function: make sure BASH_ARGV and BASH_ARGC are initialized - before calling push_args (and before calling remember_args) - -builtins/source.def - - source_builtin: make sure BASH_ARGV and BASH_ARGC are initialized - before calling push_args (and before calling remember_args) - -builtins/evalfile.c - - _evalfile: if the shell compatibility level is 44 or lower, make - sure BASH_ARGV and BASH_ARGC are initialized before calling - array_push - -builtins/shopt.def - - compat44: new shell option. This will be the last compatXX option - -doc/{bash.1,bashref.texi} - - compat44: document new shell option - - 2/21 - ---- -builtins/common.h - - ISOPTION: check s[1] before s[2] to avoid out of bound reads. Fixes - bug reported by jeremy@feusi.co - -input.h - - B_SHAREDBUF: new flag for buffered input fds, indicates that this - fd shares its b_buffer with another fd - -input.c - - duplicate_buffered_stream: when duplicating *from* the buffer - corresponding to bash input, make sure the new buffer has B_SHAREDBUF - in the flags, because copy_buffered_stream copies pointers - - duplicate_buffered_stream: if the buffer being copied to has the - B_SHAREDBUF flag set, make sure the b_buffer doesn't get freed. - Fixes use-after-free bug reported by jeremy@feusi.co - - save_bash_input,close_buffered_stream: make sure a buffer with - B_SHAREDBUF set has its b_buffer set to NULL before calling - free_buffered_stream - - 2/24 - ---- -subst.c - - parameter_brace_expand_error: add parameter saying whether or not - we are checking whether value is null, so we can have different - error messages for ${x:?} and ${x?}. Report and fix from - don fong - - 3/5 - --- -lib/readline/bind.c - - _rl_read_file: instead of calling stat/open on the passed filename, - use open/fstat to avoid one possible filename translation and close - a small (benign) race condition. Report and fix from Roy Ivy - - - 3/11 - ---- -variables.c - - makunbound: if new variable localvar_unset is non-zero, mark local - vars in previous scopes as invisible and unset so they will show - up as unset until that previous scope returns (similar to how local - variables in the current local scope are handled). localvar_unset - is currently set to 0 with no way for a script to change its value. - Eventually there will be an option to modify it. From a bug-bash - discussion started by Nikolai Kondrashov back - on 2/11/2018 - - 3/13 - ---- -subst.c - - expand_word_list_internal: short-circuit and exit right away if a - variable assignment preceding a special builtin fails in posix mode - - expand_word_list_internal: if a variable assignment precedes an - empty command name (after expansion), fix to exit right away when - the shell is in posix mode - - 3/15 - ---- -doc/{bash.1,bashref.texi} - - Add text to Pathname Expansion clarifying that a slash must be - matched by a slash in the pattern when matching pathnames, but - not in other matching contexts. Suggested by - -builtins/common.c - - read_octal: allow octal numbers greater than 777 to accommodate - modes and umasks that include sticky/setuid/setgid bits. Report - and fix from Martijn Dekker - - 3/19 - ---- -lib/readline/bind.c - - rl_generic_bind: make sure we only assign to prevkey in the loop - if the key sequence index is > 0, so ic is valid. Fixes bug - reported by Koichi Murase - -builtins/read.def - - read_builtin: be slightly less aggressive checking for timeouts and - SIGALRM: if we successfully read a character, don't check for a - timeout until we store or process it. Fixes timing problem - reported by Rob Foehl - - 3/22 - ---- -sig.c - - termsig_handler: add a call to exit(1) after the kill, just in case - there are circumstances where the SIG_DFL signal handler is - ignored. Report from Andrei Vagin - - 3/25 - ---- -lib/readline/bind.c - - _rl_function_of_keyseq_internal: new internal function that takes a - length parameter to accommodate NUL in the key sequence. Patch from - Koichi Murase - - rl_function_of_keyseq_len: new application-callable function that - takes a length parameter; otherwise equivalent to rl_function_of_keyseq. - -lib/readline/readline.h - - rl_function_of_keyseq_len: add extern declaration for new function - -lib/readline/doc/rltech.texi - - rl_function_of_keyseq_len: document new function interface - -bashline.c - - bash_execute_unix_command: use rl_function_of_keyseq_len to handle - key sequences with embedded NULs (\C-@). Fix from Koichi Murase - - -lib/readline/bind.c - - rl_bind_key_if_unbound,rl_bind_key_if_unbound_in_map: run the KEY - argument through rl_untranslate_keyseq to produce a symbolic sequence - that can encode \C-@. - - rl_bind_keyseq_if_unbound_in_map: translate the key sequence in order - to accommodate symbolic key sequences; should be a no-op for `raw' - key sequences such as the arrow key seqeunces from terminfo. Change - from Koichi Murase - - 4/2 - --- -jobs.c - - wait_for: when setting the SIGINT signal handler to wait_sigint_handler - make sure we're not setting old_sigint_handler recursively, as we - can when running an external command in a trap we took after a - command exited due to SIGINT. We don't want to overwrite - old_sigint_handler here. Fixes bug reported by Dr. Werner Fink - - -execute_cmd.c - - execute_disk_command: when there is a command_not_found_hook, make - sure the subshell turns off job control before running it, in case - it runs processes. We don't want it to manipulate process groups. - Fixes bug reported by ииллов има - - execute_command_internal: make sure the command run by the `command' - builtin doesn't cause the ERR trap to be executed; wait for the - status to be returned by the command builtin. Fixes bug reported by - Martijn Dekker - - 4/4 - --- -subst.c - - process_substitute: handle longjmp back to top_level and function - returns (return_catch) in the child process, like command - substitution, so we don't longjmp back to some arbitrary spot from - the `exit' or `return' builtins, or on an expansion error, like - the command timing code. Fixes bug reported by Basin Ilya - - - 4/6 - --- -parse.y - - read_token_word: when reading a matched pair of backquotes as part - of a word, treat it as quoted so the characters are read as a single - word, but do not let the presence of the backquote mark the word as - quoted. Fixes here-document delimiter bug reported by Denys Vlasenko - - - 4/7 - --- -execute_cmd.c - - execute_case_command: call quote_string_for_globbing with the - QGLOB_CTLESC flag for both quoted and unquoted words, so it will - remove CTLESC/CTLESC in all cases while converting other quoted - characters to use a preceding backslash. Bug reported by - Martijn Dekker - - 4/9 - --- -smatch.c - - posix_cclass_only: helper function that checks whether a pattern has - only posix single-byte character classes ([:alpha:], etc.) or has - none at all - - xstrmatch: if running in a multibyte locale, make sure to short- - circuit to the single-byte matching code only if there are no - unrecognized character class names, since the wide character ctype - functions allow locales to define their own character class names - (e.g., "hyphen"). Fixes issue reported by yangyajing - - 4/10 - ---- -configure.ac,cross-build/qnx.cache - - qnx: add a configure cache file for cross-building, treat qnx 7 like - qnx 6 in terms of cpp options. Fix from Brian Carnes - - -aclocal.m4 - - BASH_CHECK_DEV_STDIN: experimental change to test for /dev/stdin - independently of /dev/fd or /proc/self/fd. Suggested for QNX by - Brian Carnes - - - 4/11 - ---- -lib/glob/glob.c - - glob_testdir: return -2 if DIR is a symlink, to differentiate it from - any other kind of non-directory file - - glob_vector: if we have GX_ALLDIRS (globstar), we want to skip over - symlinks to directories, since we will pick up the real directory - later. Fixes incompatibility reported by Murukesh Mohanan - - -bashline.c - - bash_execute_unix_command: changes to make READLINE_POINT apply to - characters instead of bytes when in a multibyte locale. Report and - fix from Koichi Murase - - 4/12 - ---- -builtins/evalstring.c - - parse_and_execute_cleanup: now takes an argument which is the value - of running_trap at some point before parse_and_execute was called; - changed callers in sig.c, builtins/evalfile.c - -builtins/common.h - - parse_and_execute_cleanup: changed prototype - - 4/13 - ---- -builtins/evalstring.c - - parse_and_execute_cleanup: if the argument holding the previous state - of running_trap is the same value as the current running_trap state, - don't call run_trap_cleanup: assume that there is a caller who will - take care of the cleanup after this returns. Fixes recursive trap - call on "eval return" reported by Martijn Dekker - -parse.y - - read_a_line: if remove_quoted_newline is non-zero, indicating the - here-document delimiter is unquoted, we will be running the contents - of the here-document through word expansion and need to quote CTLESC - and CTLNUL in the input. Fixes bug with ^A in here document reported - by Jorge Alberto Baca Garcia - - 4/18 - ---- -pathexp.c - - quote_string_for_globbing: make sure the QGLOB_CTLESC code handles - both CTLESC CTLESC and CTLESC CTLNUL in the same way. Fixes bug - reported by Martijn Dekker - - 4/19 - ---- -execute_cmd.c - - execute_command_internal: before executing any command in the current - shell, and before copying any existing FIFO list, call - reap_procsubs to unlink or close any process substitution pipes - associated with processes that have exited. Fixes hang in test suite - when trying to open a FIFO with no process having it open for - reading - - 4/26 - ---- -parse.y - - read_token_word: if returning REDIR_WORD for a {id}>foo construct, - for example, make sure to assign the_word to yylval.word before - returning, in case a recursive call to the parser overwrites it - (e.g., when evaluating array indexes). From a message to - austin-group-l from Stephane Chazelas - -lib/glob/sm_loop.c - - BRACKMATCH: if we have an invalid character class in an otherwise - well-formed bracket expression, don't try to match each character - of the (invalid) class individually; just skip over the class and - move on. From a message on the austin-group list from - Stephane Chazelas - - 4/27 - ---- -variables.c - - push_exported_var,push_func_var,push_temp_var: make sure to set the - context correctly in the variable we bind in the previous (non-temp) - scope. Report from Martijn Dekker - -pathexp.c - - unquoted_glob_pattern_p: a pattern that contains a backslash can - have it removed by the matching engine (since backslash is special - in pattern matching), so if the pattern contains a backslash, and - does not end in a backslash, we need to return true. Fixes bug - reported by Robert Elz - -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: same change to return TRUE for a backslash - that doesn't end the pattern - -lib/sh/timeval.c - - print_timeval: use locale_decpoint() instead of fixed `.' to print - decimal point. Bug report in austin-group email from Joerg Schilling - - -lib/sh/clock.c - - print_clock_t: use locale_depoint() in the same way as print_timeval - - 4/29 - ---- -subst.c - - expand_cond_node: if special != 0, make sure to add QGLOB_CTLESC - to the flags passed to quote_string_for_globbing. Same issue as the - one with `case' fixed on 4/7, report from Martijn Dekker - - - 4/30 - ---- -redir.c - - do_redirection_internal: r_close_this: if the file descriptor is - already closed before the shell is asked to close it, make sure to - add an undo list redirect to make sure it stays closed. Report from - Martijn Dekker - - 5/2 - --- -variables.c - - push_posix_temp_var: new function, takes the SHELL_VAR * passed as - an argument and uses the name and value to create a global variable - - merge_temporary_env: if posixly_correct is set, call - push_posix_temp_var to create global variables, otherwise call - push_temp_var to preserve the old behavior. Right now, it's only - called when in posix mode, but that might change. This undoes the - change from 4/27 when in posix mode - - 5/3 - --- -sig.c - - struct that holds the terminating signal information has a new - field: whether that signal is expected to cause a core dump - - termsig_handler: if the call to kill(2) doesn't kill the process, - we have a problem. If our pid is not 1, we just exit with status - 128+sig (fake the sig exit status). If the pid is 1, we assume - we're in a Linux pid namespace and aren't allowed to send a signal - to ourselves. If we need to generate a core dump, we try to get - the kernel to SIGSEGV us by dereferencing location 0. If not, we - just exit with 128+sig. From a report and patch from Andrei Vagin - - - 5/4 - --- -bashline.c - - bash_execute_unix_command: make sure that parse_and_execute is called - with newly-allocated memory to avoid prematurely freeing the - command. Report and fix from Koichi Murase - - 5/7 - --- -builtins/shopt.def - - syslog_history: a shell option to control whether history is logged - to syslog; can be modified at runtime. Original patch from - Siteshwar Vashisht - -config-top.h - - SYSLOG_SHOPT: new configurable option, determines whether there is a - shell option to control syslogging history lines at runtime and sets - the default value of the option - -bashline.c - - syslog_history: new variable to control whether history lines are - sent to syslog; default value is the value of SYSLOG_SHOPT (or 1 - if that's not defined) - - bash_add_history: send history lines to syslog if syslog_history is - non-zero - - 5/10 - ---- - -variables.c - - push_var_context: if we are in Posix mode and manipulating the - temporary environment (temporary_env), implement behavior specified - in Posix interp 1009 and make sure that temporary assignments - preceding function calls modify the current environment *before* - the function is executed. - -[bash-5.0-alpha frozen] - - 5/12 - ---- -execute_cmd.c - - execute_in_subshell: subshells should set loop_level == 0, since - they are no longer "enclosed" by the loop, according to posix. - Report from Aeron.E. Wang - - 5/24 - ---- -Makefile.in - - pkgconfigdir: don't fail installing bash.pc if this directory doesn't - exist or isn't writable -- there's no error in failing to install - something nothing will use - - install-headers-dirs: creat $(pkgconfigdir) if it doesn't exist - -lib/sh/shmbchar.c - - utf8_mblen: replace with version from gnulib - - utf8_mbstrlen: reimplement using utf8_mblen so it handles invalid - multibyte sequences in the same way as mbstrlen - -lib/readline/mbutil.c - - _rl_utf8_mblen: utf-8 specific version of mblen from gnulib - -include/shmbutil.h - - ADVANCE_CHAR,COPY_CHAR_P: do better job detecting end of string in - UTF-8 locales (should not be called with an empty string, but to - be safe) - - 5/25 - ---- -lib/sh/utf8.c - - new file, utf-8-specific functions collected from other files - -externs.h - - extern declarations moved around for utf8.c - -include/shmbutil.h - - SADD_MBCHAR, SADD_MBQCHAR_BODY, ADVANCE_CHAR_P: if the locale is a - UTF-8 locale, don't bother with a call to mbrlen if the current - character cannot start a multibyte character - -variables.c - - push_var_context: only merge the temporary environment in posix mode - if we are executing a shell function (flags & VC_FUNCENV). Report - from Martijn Dekker - -lib/readline/mbutil.c - - _rl_get_char_len: don't call mbrlen if we are in a UTF-8 locale and - the character cannot start a multibyte sequence - -builtins/read.def - - read_builtin: if mb_cur_max > 1, call read_mbchar only if we're not - in a utf-8 locale or, if we are, the character we just read indicates - the start of a multibyte sequence - -subst.c - - string_extract_verbatim: don't call MBRLEN if we're in a utf-8 - locale and the current character can't start a multibyte sequence - - setifs: don't call MBRLEN if we're in a utf-8 locale and the first - character of $IFS can't start a multibyte sequence - -lib/readline/kill.c - - rl_bracketed_paste_begin: make sure we return 0 here if rl_insert_text - returns the right number of characters inserted to be consistent - with other functions. Returns 1 otherwise. Report and fix from - Gabe Krabbe back in March, 2018 - -lib/readline/readline.c - - rl_subseq_result: make sure r is < 0 before checking map[ANYOTHERKEY] - to see if we shadowed a key that should now be tried - - 5/27 - ---- -variables.c - - assign_aliasvar: perform same validity check on subscript assignment - as alias builtin performs on name argument. Bug report from - Mike Jonkmans - - 5/29 - ---- -builtins/setattr.def - - set_var_attribute: we should not propagate a variable assignment - preceding a builtin back to the calling environment unless the - shell is in posix mode. Since previous versions of the shell do - this, setting the shell compatibility level to 44 or less will - continue the propagation behavior - - 6/1 - --- -lib/readline/histexpand.c - - history_tokenize_word: as part of teaching history tokenization more - and more about shell syntax, allow command and process subsitution - and extended globbing patterns to appear within a word being - tokenized and not just at the beginning. Fixes bug reported back in - 2/2017 by ecki@tofex.de - -bashhist.c - - load_history: use HISTSIZE_DEFAULT (still defaults to "500") to set - the initial value of $HISTSIZE. HISTSIZE_DEFAULT can be overridden - in config-top.h - - 6/4 - --- -configure.ac - - make sure we link against an external readline library that's at - least version 8 - - 6/8 - --- -pcomplete.h - - INITIALWORD: internal compspec name for programmable completion on - the initial (usually the command) word - -bashline.c - - attempt_shell_completion: if we are in a command position and the - user has defined a compspec for INITIALWORD, use programmable - completion to complete command words. Original patch from - Luca Boccassi - -lib/readline/doc/rluser.texi,builtins/complete.def,doc/bash.1 - - make it clearer that -D takes precedence over -E when supplied as - options to `complete', not when they are applied during completion - -builtins/complete.def - - complete_builtin,compgen_builtin: add support for -I option - - print_one_completion,print_compopts: display -I when appropriate - -lib/readline/doc/rluser.texi,doc/bash.1 - - complete,compgen: document new -I option and its effect - - 6/10 - ---- -lib/readline/histfile.c - - read_history_range: don't apply the heuristic and try to append a - history line to an existing history entry if we don't have any - history entries. Bug and fix from Edward Huff - - 6/12 - ---- -bashline.c - - attempt_shell_completion: don't all the programmable completion for - INITIALWORD if programmable completion is disabled - - attempt_shell_completion: make sure in_command_position remains set - for an empty command word on an otherwise blank line, making the - presence of assignment statements optional. Report from - Luca Boccassi - - 6/20 - ---- -lib/malloc/malloc.c - - morecore,internal_malloc,internal_free: requests for more than - 128K bytes (defined as MMAP_THRESHOLD and saved in the new - malloc_mmap_threshold variable) are now satisfied via mmap and - freed via munmap. We only use mmap if we have mmap and MAP_ANON - (or MAP_ANONYMOUS). These blocks are not available for splitting - or coalescing, so every request for 128K bytes or smaller is - satisfied via sbrk(). We don't use mremap for realloc yet, but - we could in the future - -lib/malloc/mstats.h - - malloc_stats: the malloc stats now include the number of calls to - mmap and the total number of bytes requested via mmap. The number - of calls to munmap is captured in each bucket's lesscore count - -lib/malloc/stats.c - - print_malloc_stats: now prints an indication of where the change from - sbrk to mmap takes place, and prints number of mmap calls and total - number of bytes allocated using mmap - - 6/22 - ---- -variables.c - - get_bashargcv: new dynamic "fetch" variable for BASH_ARGV and - BASH_ARGC, for backwards compatibility: if a script makes a - reference to either variable at the top level (not in a shell - function) without enabling debugging mode and not having initialized - the variable previously (using a simple semaphore), create the - variables - - 6/25 - ---- -configure.ac - - opt_bash_malloc: bash malloc no longer disabled for systems that - require eight-bit alignment; the bash malloc has had this for a - long time - - 7/4 - --- -bashline.c - - pre_process_line: if command-oriented history is enabled, and the - line being expanded is the second or later in a multi-line command, - and we know the command is being saved as the current history entry, - decrease history_length before calling history_expand so references - like !! refer to the previous history entry as usual - -lib/readline/histexpand.c - - history_quoting_state: new variable, can be set by calling - application before calling history_expand to note that the string - being expanded is part of a quoted string. Can be set to a single - quote, a double quote, or 0 (no quoting) - - history_expand: look at history_quoting_state and honor the - single-quote setting by not expanding any initial portion of the - line before the closing single quote. This allows history expansions - to be performed on a line containing a closing single quote if they - appear after the single quote - -lib/readline/history.h - - history_quoting_state: extern declaration - -bashhist.c - - bash_history_inhibit_expansion: if history_quoting_state indicates - that this string is single-quoted, skip over the single-quoted - portion and determine whether or not the portion after the - quoted string needs to be inhibited from history expansion - -parse.y - - shell_getc: set history_quoting_state based on the contents of the - current delimiter before calling pre_process_line - - 7/6 - --- -lib/readline/doc/hsuser.texi - - describe the default behavior of backslash and single and double - quotes - -lib/readline/doc/hstech.texi - - history_quoting_state: describe effect of setting this variable - - history_quotes_inihibit_expansion: expand the description to include - the default quoting behavior that setting this variable enables - - 7/9 - --- -support/man2html.c - - unescape: use memmove instead of strcpy to handle overlapping strings - Report and fix from Bernhard M. Wiedemann - -lib/sh/getenv.c - - getenv: check that environ is non-NULL before looking through it. - Report and fix from Keeley Hoek - - 7/12 - ---- -braces.c - - mkseq: use better integer overflow handling for systems with 32-bit - ints and 64-bit intmax_ts. Bug reported by Simon Wörner - as the result of fuzzing - -builtins/declare.def - - declare_internal: make sure bind_variable returns non-NULL when - setting attributes for a variable named as an argument to declare - that also appears in the temporary environment (and is a nameref). - Bug reported by Simon Wörner - -parse.y,externs.h - - reset_readahead_token: new convenience function for the rest of - the shell, resets token_to_read if it's a newline (as it will be - after reset_parser is called) - -eval.c - - reader_loop: if we're just going to execute one command, make sure - the read-ahead token isn't set to something that will result in a - NULL command (by calling reset_readahead_token), since the code - will take that as the one command and set EOF_Reached - - 7/15 - ---- -doc/{bash.1,bashref.texi} - - indirect expansion: clarify that the expansion works on parameters, - not just variables (NAMEs). Suggested by konsolebox - - - 7/16 - ---- -doc/{bash.1,bashref.texi} - - INSIDE_EMACS: document its effect on line editing - - 7/17 - ---- -lib/readline/{readline.c,rlprivate.h} - - _rl_eof_found: new variable, private to the readline library, that - indicates whether the current call to readline() will return NULL - because we read EOF - -lib/readline/rltty.c - - rl_deprep_terminal: if bracketed paste mode is active, the last - character of the string to disable it is \r (to avoid confusing - the terminal driver about where the cursor is). In this case, - output a newline before returning so subsequent text (like the - `exit' bash prints) doesn't overwrite the prompt. Bug from - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903936 - -variables.c - - make_local_assoc_variable: add second argument like corresponding - local array function, to allow this function to return an existing - local array variable to the caller for the caller to handle - -variables.h - - make_local_assoc_variable: change function prototype to add second - arg - -{subst.c,variables.c} - - make_local_assoc_variable: change callers - -builtins/declare.def - - declare_internal: call make_local_assoc_variable with a non-zero - second arg to have it return an existing local array variable to be - flagged as an error. Fixes bug reported by Grisha Levit - - - declare_internal: call make_local_array_variable with unconditional - second argument of 1 for the same reason as above - - 7/18 - ---- -variables.c - - bind_invalid_envvar: new function, takes invalid names from the - initial environment (names that are not valid shell identifiers) and - stores them in a separate hash table (invalid_env) - - maybe_make_export_env: make sure to add names from invalid_env to - the export env - - assign_in_env: for now, prevent variable names that aren't shell - identifiers from being added to the temporary environment. Addresses - issue raised by Grisha Levit - -test.c - - unary_test: rearrange code slightly to avoid a wasted variable lookup - if the argument to -v is a subscripted array reference - - 7/19 - ---- -variables.c - - nameref_transform_name: if a name doesn't resolve to a shell variable, - this function will check whether it resolves to a nameref that - points to a variable that hasn't been created yet - -variables.h - - nameref_transform_name: extern declaration - -subst.c - - do_compound_assignment: make sure that we follow any nameref chain - if the name passed resolves to a nameref that points to a variable - that doesn't exist. Fixes issue raised by Grisha Levit - - -builtins/declare.def - - declare_internal: before calling any variant of make_local_variable, - make sure to perform any transformation of the name indicated by an - existing nameref. Fixes issue raised by Grisha Levit - - - 7/20 - ---- -builtins/declare.def - - declare_internal: if we are creating a global variable with -g, even - if we're not giving it a value, check for namerefs at the global - scope to avoid confusion with namerefs at the local (function) scope. - -subst.c - - expand_word_internal: if a double-quoted string expands to nothing, - make sure we note that for later by setting had_quoted_null, just - as we do for single-quoted empty strings - -subst.[ch] - - W_SAWQUOTEDNULL: new flag (replaces W_HASCTLESC, which is unused), - means that we saw a possibly-discarded quoted null while expanding - this word - -subst.c - - expand_word_internal: if expansion results in a non-empty word but - we saw a quoted null during expansion (had_quoted_null == 1), set - W_SAWQUOTED_NULL in the returned word - - expand_word_internal: if a recursive call to param_expand comes back - with W_SAWQUOTEDNULL set in the resulting word, set had_quoted_null - to note it - - parameter_brace_expand_rhs: if a recursive call to expand_word_internal - returns a non-quoted-null string (after an optional call to - string_list) make sure we pass the W_SAWQUOTEDNULL flag back to the - caller - - word_list_split: if a word expands to nothing after expansion and - splitting, but we saw a quoted null during the expansion - (W_SAWQUOTEDNULL), return an empty word - - 7/25 - ---- - -subst.c - - do_compound_assignment: if creating a local variable, make sure to - set `newname' to the name of the variable returned from find_variable, - since that follows namerefs. Fixes issue raised by Grisha Levit - - - 7/29 - ---- -subst.c - - get_var_and_type: if VALUE is NULL, check before calling dequote_string. - Report and fix from Grisha Levit - - 7/30 - ---- -variables.c - - make_local_{array,assoc}_variable: make sure we're not trying to - inherit a value from an incompatible array type. Fixes issue raised - by Grisha Levit - - nameref_transform_name: if we're trying to resolve a nameref that - will be used to create a local variable, make sure the nameref is - at the same variable scope. Report from Grisha Levit - - - 8/2 - --- -array.c - - array_subrange: change to use string_list_pos_params after creating a - WORD_LIST from the array slice, like assoc_subrange does - -subst.c - - parameter_brace_substring: since assoc_subrange and array_subrange - both call string_list_pos_params now, treat the results the same as - the VT_POSPARAMS case (pos_params also calls string_list_pos_params). - Fixes behavior difference between ${a[@]:sub} and ${@:sub} reported - by Ilkka Virta - - 8/3 - --- -array.c - - array_patsub: rewrite to work in terms of a WORD_LIST * and call - string_list_pos_params on the result to be consistent with the - expansions of ${@/pat/rep} and ${*/pat/rep} - -assoc.c - - assoc_patsub: rewrite to work in terms of a WORD_LIST * and call - string_list_pos_params on the result to be consistent with the - expansions of ${@/pat/rep} and ${*/pat/rep} - -subst.c - - parameter_brace_patsub: change how return value of {array,assoc}_patsub - is treated to make it identical to pos_params_pat_subst, since they - all call string_list_pos_params now - - expand_string_for_pat: make sure we preserve the value of - expand_no_split_dollar_star instead of just unconditionally setting - it back to 0 in case it was 1 before this function was called - - 8/6 - --- -array.c - - array_modcase: rewrite to work in terms of a WORD_LIST * and call - string_list_pos_params on the result to be consistent with the - expansions of ${@,,} and ${*,,} - -assoc.c - - assoc_modcase: rewrite to work in terms of a WORD_LIST * and call - string_list_pos_params on the result to be consistent with the - expansions of ${@,,} and ${*,,} - -subst.c - - parameter_brace_casemod: change how return value of {array,assoc}_modcase - is treated to make it identical to pos_params_modcase, since they - all call string_list_pos_params now - - 8/8 - --- -builtins/declare.def - - declare_internal: if we are making local variables, and not dealing - with the nameref attribute, make sure that any nameref variable we - followed when resolving the name given was at the same variable - context. If not, we just want to make or use a local variable with - the name passed; if so, we want to use the nameref value as the - variable name. Report from Grisha Levit - - 8/9 - --- -configure.ac - - globasciiranges: RRI now on by default, must be turned off explicitly - at configure time or runtime with `shopt -u globasciiranges' - - 8/14 - ---- -variables.c - - dispose_saved_dollar_vars: decrement stack pointer before looking - for saved positional parameters to dispose; stack pointer always - points to the first unused slot - - 8/15 - ---- -variables.c - - dollar_arg_stack: now a stack of struct saved_dollar_vars, which has - an array for the first ten (dollar_vars) and a WORD_LIST * for the - remaining (rest_of_args). Fixes performance issue with function calls - and large numbers of positional parameters raised by - Bize Ma - - {save,restore,free,free_saved}_dollar_vars: new functions to manage - dollar_vars and dollar_arg_stack members. Need to keep these in sync - with whatever remember_args does - - push_dollar_vars: use save_dollar_vars, which just copies pointers, - and directly assign rest_of_args, without copying the words, to the - dollar_arg_stack entry. Have to clear dollar_vars and rest_of_args - with the assumption that callers will call remember_args(args, 1) - immediately following - - pop_dollar_vars: free current positional parameters and restore old - ones from pointers saved in dollar_arg_stack, making sure to - invalidate any cached value for "$@" - - dispose_saved_dollar_vars: free saved pointers from current index - into dollar_arg_stack - -doc/{bash.1,bashref.texi} - - POSIXLY_CORRECT: make sure to note that bash makes sure this variable - is set when posix mode is enabled - - 8/17 - ---- -{jobs,nojobs}.c - - set_jobs_list_frozen: set jobs_list_frozen to a particular value. - Intended to save and restore the value around code sections instead - of unconditionally unfreezing it. - -jobs.h - - set_jobs_list_frozen: extern declaration - -execute_cmd.c - - execute_pipeline: if lastpipe is enabled, save and restore the - value of jobs_list_frozen using freeze_jobs_list/set_jobs_list_frozen - to avoid problems with race conditions and nested pipelines - causing jobs to be removed from the jobs table. Fixes savannah issue - https://savannah.gnu.org/support/index.php?109541 reported by - Björn Kautler - - 8/24 - ---- -execute_cmd.c - - lastpipe_cleanup: call set_jobs_list_frozen instead of - unfreeze_jobs_list - - execute_pipeline: set up lastpipe_cleanup with old value of - jobs_list_frozen - - 9/3 - --- -builtins/printf.def - - getuintmax,getfloatmax: on a conversion error, return as much of the - value as we were able to convert instead of 0. Fixes bug reported - by Robert Elz - - 9/4 - --- -lib/readline/text.c,lib/readline/rlprivate.h - - _rl_backward_char_internal: new function, guts of rl_backward_char - and rl_backward_byte, not currently used there - -lib/readline/vi_mode.c - - _rl_vi_advance_point: new function, move point forward by one - character, handling multibyte locales and characters and the end - of line semantics - - _rl_vi_backup_point: new function, move point backward by one - character, handling multibyte locales and characters - - rl_vi_eword,rl_vi_eWord: use rl_vi_advance_point instead of a simple - increment to handle multibyte characters. Fixes bug reported by - Enrico Maria De Angelis - - 9/5 - --- -lib/readline/vi_mode.c - - rl_vi_fword,rl_vi_fWord: use rl_vi_advance_point instead of a simple - increment to handle multibyte characters - - rl_vi_bword,rl_vi_bWord: use rl_vi_backup_point instead of a simple - decrement (and _rl_vi_advance_point where necessary) to handle - multibyte characters - - rl_vi_complete,_rl_vi_change_mbchar_case,_rl_vi_domove_motion_cleanup: - use _rl_vi_advance_point instead of simple rl_point increment - - vi_delete_dispatch,vi_change_dispatch,vi_yank_dispatch: use - INCREMENT_POS instead of a simple increment to rl_mark to handle - multibyte characters - - rl_vi_column: use _rl_forward_char_internal, starting with - rl_point == 0, to handle multibyte characters (Posix says `character - position', not index) - - 9/7 - --- -configure.ac - - changed release status to `beta' - - 9/9 - --- -lib/readline/display.c - - _rl_update_final: if the bottom line has zero characters and we are - on that line at column 0, don't bother with an additional \r\n. - Fixes redisplay nit reported by Per Bothner - - -configure.ac - - openbsd needs DEV_FD_STAT_BROKEN defined - -[bash-5.0-beta frozen] - - 9/11 - ---- -builtins/exec.def - - exec_builtin: make sure to sync the buffered stream where bash is - reading input (especially if it's fd 0) so a command exec'd by the - script can read the rest of stdin after the exec - - 9/15 - ---- -lib/readline/histexpand.c - - history_tokenize_internal: if the event contains embedded newlines - (e.g., bash with command-oriented history and lithist), use them as - word delimiters, equivalent to space and tab, so they don't end up - as separate words. Fixes issue pointed out by Viktor Dukhovni - - - history_tokenize_word: don't break if we get a newline (though we - shouldn't get one due to the loop in history_tokenize_internal - - history_expand_internal: use newline as a whitespace character when - expanding by words, as we do with history_tokenize_internal - -jobs.h - - J_PIPEFAIL: new flag for `flags' element of job struct - -jobs.c - - stop_pipeline: if pipefail_opt set, newjob gets J_PIPEFAIL in its - flags word - - raw_job_exit_status: use J_PIPEFAIL (setting of pipefail when job - created) instead of current setting of pipefail status to determine - how to compute exit status of pipeline. Tentative implementation of - Posix proposal - -expr.c - - exp0: don't call expr_bind_variable with a NULL string. Fixes - fuzzing bug reported by Eduardo Bustamante - - expr_bind_variable: don't try to do anything with a NULL or empty - LHS - - 9/16 - ---- -lib/readline/undo.c - - rl_do_undo: before we release the undo list entry we've just - processed, make sure we avoid any pointer aliasing issues caused - by having the entry being removed as part of the undo list in - _rl_saved_line_for_history. Fixes fuzzing bug reported by - Eduardo Bustamante - - 9/17 - ---- -[bash-5.0-beta released] - - 9/18 - ---- -lib/readline/bind.c - - name_and_keymap: new struct for keymap names and maps - - builtin_keymap_names: static array of builtin keymap names and - maps; preparing for allowing applications to set the names of - keymaps they create; keymap_names is initially a pointer to - this array - - _rl_get_keymap_by_name,_rl_get_keymap_by_map: new functions for - searching the keymap_names array and returning an index - - rl_get_keymap_by_name, rl_get_keymap_name: rewritten in terms of - new functions above - - rl_set_keymap_name (char *name, Keymap map): new function, set - name of MAP to NAME. NAME must not be builtin; MAP must not be one - of the builtin keymaps. Request and initial implementation from - Tom Tromey - -lib/readline/readline.h - - rl_set_keymap_name: new extern declaration for new public function - -lib/readline/doc/rltech.texi - - rl_set_keymap_name: add documentation - -lib/readline/doc/rluser.texi - - add text to `set keymap' description to note that applications - can add keymap names that can be used there - - 9/20 - ---- -parse.y - - shell_getc: don't execute the alias hack (returning a space at the - end of the string) if we are parsing a command substitution that - starts with a double paren (subshell inside a comsub), in which - case the flags are PSH_DPAREN. Fixes fuzzing bug reported by - Eduardo Bustamante - -lib/readline/isearch.c - - _rl_isearch_dispatch: default case: make sure we check multibyte - char length when deciding whether to enlarge the search string - buffer, instead of using the old assumption. Fixes fuzzing bug - reported by Eduardo Bustamante - -builtins/fc.def,execute_cmd.c - - fixed some missing free()s uncovered by coverity. Report from - Siteshwar Vashisht - -lib/glob/glob.c - - glob_vector: make sure name_vector is initialized to NULL - -lib/sh/{pathcanon,pathphys}.c - - {pathcanon,pathphys}: use memmove instead of strcpy on a possibly- - overlapping region of memory - -subst.c - - parameter_list_transform: make sure to dispose the word list in all - cases before returning - - parameter_brace_expand_rhs: make sure t1 is freed before returning - due to an invalid name resulting from an indirect expansion - -support/man2html.c - - fixed a couple of memory leaks - - 9/21 - ---- -subst.c - - process_substitute: if we are part of a job control process chain - (pipeline_pgrp != shell_pgrp), have the child shell forked to run - the process substitution set pipeline_pgrp to its own PID, - effectively becoming a process group leader without changing - its own process group. Fixes stray SIGHUP issue reported by - Jeremy Townshend - - 9/23 - ---- -arrayfunc.c - - assign_array_element: if we are assigning to an existing associative - array, and assoc_expand_once is set, allow `*' and `@' as subscripts. - Partial fix for report from Grisha Levit - -variables.c - - bind_int_variable: if valid_array_reference (lhs) is not true, - make sure that the lhs is a valid identifier before assigning the - value - -arrayfunc.c - - valid_array_reference: allow blank subscripts. They are treated as - `normal' keys for associative arrays and evaluate to 0 for indexed - arrays. More of fix for report from Grisha Levit - - - 9/24 - ---- -bashline.c - - restore_tilde: if the expanded length (xl) is longer than vl - we end up requesting a negative amount of memory (an extremely - large unsigned number). Just punt and return val in this case. - Fuzzing bug reported by Eduardo Bustamante - - restore_tilde: make sure we return what the user typed if tilde - expansion fails - - 9/29 - ---- -builtins/shopt.def - - uncomment `localvar_unset' option definition - -doc/{bash.1,bashref.texi} - - document `localvar_unset' shell option - -arrayfunc.c - - valid_array_reference: if we are parsing a subscript for an existing - associative array, the `assoc_expand_once' option is set, and the - VA_ONEWORD flag is set in FLAGS (meaning there should be nothing - following the closing `]'), don't call skipsubscript to find the - closing `]', use one that is at the end of the word. Part of fix for - issue reported by Grisha Levit - -builtins/{printf,set}.def - - pass VA_ONEWORD as part of flags value everywhere valid_array_reference - is used - -config-top.h - - CHECKWINSIZE_DEFAULT: now 1, so check_window_size is on by default - - HISTEXPAND_DEFAULT: new define, allows builder to enable or disable - history expansion by default at build time - -doc/{bash.1,bashref.texi} - - checkwinsize: document new default value - -bashhist.h - - HISTEXPAND_DEFAULT: don't define if it's already defined. Strict - POSIX mode continues to default to off - - 9/30 - ---- -lib/readline/input.c - - win32_isatty: win32-specific changes from GDB. Patch submitted by - Tom Tromey , originally from Eli Zaretskii - - - 10/1 - ---- -lib/readline/vi_mode.c - - rl_vi_start_inserting: start an undo group so we can grab the text - inserted here as a single unit, avoiding any insert coalescing - performed by rl_insert_text. Report and fix from Richard Todd - - - 10/3 - ---- -subst.c - - parameter_brace_transform: if we're asked to display the attributes - of an unset variable, check that the variable exists even if - get_var_and_type returns NULL (it checks invisible_p). Requested by - Michal Pesa - -lib/readline/kill.c - - _rl_bracketed_text: new function, collects the text pasted in - bracketed paste mode and consumes the bracketed paste end marker; - returns the pasted text and its length - - rl_bracketed_paste_begin: call _rl_bracketed_text to collect the - text - -lib/readline/isearch.c - - _rl_isearch_dispatch: set cxt->lastc to -7 if the input resolves to - rl_bracketed_paste_begin - - _rl_isearch_dispatch: if cxt->lastc == -7, call _rl_bracketed_text - to collect the pasted text and add it to the accumulating search - string. Only works if ESC is not one of the isearch terminators. - Fixes issue reported in Debian bug report 891780, - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=891780 - - 10/5 - ---- -variables.c - - push_posix_tempvar_internal: new function, body of push_func_var - with additional argument saying whether it's being called from a - function or (special) builtin code path - - push_builtin_var: new function, calls push_posix_tempvar_internal - with second argument indicating builtin code path - - push_func_var: now a stub that calls push_posix_tempvar_internal - with second argument indicating function code path - - pop_scope: if called from a special builtin, call push_builtin_var - instead of push_func_var to do the right variable propagation - -builtins/shopt.def - - progcomp_alias: uncomment, make available to users - -doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi - - progcomp_alias: document shopt option, describe its use in - the section on programmable completion - -trap.c - - decode_signal: handle SIGRTMIN+n at runtime, with the `SIG' prefix - or without, case-insensitively if requested, and return SIGRTMIN+n. - These values could be different than what was available at compile - time. Report and patch from Rasmus Villemoes - - 10/8 - ---- -execute_cmd.c - - execute_command_internal: only set line_number from command->value.Subshell - if the type == cm_subshell; otherwise defer and set later - - 10/10 - ----- -examples/loadables/seq.c - - seq: new loadable builtin, derived originally from coreutils:seq.c - but with very little of that code remaining - - 10/12 - ----- -trap.c - - run_pending_traps,_run_trap_internal: honor evalnest_max and - increment/decrement evalnest accordingly, since trap actions - are processed as if run by `eval'. Feature suggsted by Mike - Gerwitz - - 10/16 - ----- -expr.c - - expr_skipsubscript: new function, calls skipsubscript with flags - similar to arrayfunc.c:valid_array_subscript if assoc_expand_once - is set and it looks like we've already expanded the subscript of - an associative array. Reported back on 8/27 by Grisha Levit - - - readtok: call expr_skipsubscript instead of skipsubscript - -arrayfunc.c - - valid_array_reference: call skipsubscript with a third arg computed - from the VA_NOEXPAND flag only if we're expanding an associative - array subscript -- we already figure out whether or not we are - -[bumped release status to beta2] - - 10/20 - ----- -builtins/setattr.def - - set_or_show_attributes: after isolating NAME, make sure to restore - the "[+]=" in case we need the word later. Issue pointed out by - Grisha Levit - - 10/21 - ----- -lib/readline/search.c - - noninc_search_from_pos: if we are supposed to be searching for a - pattern (vi mode), make sure to pass S to _hs_history_patsearch, - since that has any leading `^' stripped - -lib/readline/histsearch.c - - _hs_history_patsearch: if the search isn't anchored, put a `*' at - the beginning to force fnmatch to match anywhere in the line (could - look at this later to make a change to history_search_internal that - would avoid the need to add the leading `*') - -subst.c - - parameter_brace_expand_rhs: treat a failure to assign a variable with - a ${param:=value} expansion as an expansion error, and, in a non- - interactive posix-mode shell, exit the shell - - param_expand: don't set W_SPLITSPACE for $* unless IFS is NULL; - consistent with other uses of W_SPLITSPACE - - 10/22 - ----- -doc/{bash.1,bashref.texi} - - tweak description of bash conditional expressions to note that the - test and [ commands determine their behavior based on the number of - arguments. Suggested by Ilkka Virta - - 10/24 - ----- -execute_cmd.c - - execute_simple_command: don't set $_ to NULL when executing a - command that forks; just leave it unchanged. Tweaked the documentation - slightly as a result. Inspired by report from Ricky Tigg - - - 10/28 - ----- -redir.c - - here_document_to_fd: make sure the temp files used to store here - documents are readable (and writable, where necessary) by the user. - This can happen in the unlikely case that someone decides to shoot - himself in the foot by setting the umask to 400. Issue originally - raised back in March by Stephane Chazelas - ; fix inspired by Martijn Dekker - - - 10/29 - ----- -lib/readline/terminal.c - - bind_termcap_arrow_keys: bind the "kI" capability (what the Insert - keypad key outputs) to overwrite mode. Patch from Xose Vazquez Perez - - - 10/30 - ----- -braces.c - - mkseq: make sure to terminate result array before passing it to - strvec_dispose on an interrupt. Report and fix from Corbin Souffrant - - - 11/6 - ---- -trap.c - - _run_trap_internal: if the signal shows up as SIG_CHANGED after - running the trap handler, check for terminating signals and run any - terminating signal handler indicates. Fixes issue reported by - Owen Stephens - - 11/7 - ---- -execute_cmd.c - - execute_builtin: don't merge the temporary environment when the - `return' builtin is being executed if it's being executed by the - `command' builtin, since that's supposed to inhibit the special - builtin properties. Part of POSIX conformance problems reported - by Martin Rehak - -builtins/cd.def - - bindpwd: if canonicalization fails when -P is specified (e.g. if the - directory name length exceeds PATH_MAX), reset dirname ($PWD value) = - to the_current_working_directory (Posix cd description, step 10.) - Part of POSIX conformance problems reported by Martin Rehak - - -builtins/kill.def - - kill_builtin: support -sSIG and -nSIG without requiring them to be - separate arguments. POSIX says a "conforming implementation" should - accept them. - Part of POSIX conformance problems reported by Martin Rehak - - - 11/8 - ---- -arrayfunc.c - - array_value_internal: return NULL for invisible array variables. - Fixes issue with FUNCNAME sometimes returning invalid value reported - by Great Big Dot - -builtins/cd.def - - change_to_directory: if we are in posix mode, and the chdir to the - absolute pathname ($PWD/dirname) fails, return an error without - trying to use just `dirname' (posix cd step 10). - Part of POSIX conformance problems reported by Martin Rehak - - -execute_cmd.c - - execute_case_command: use expand_word_leave_quoted to expand the - word, then dequote the resulting string. This performs the - expansions in the order posix specifies. - Part of POSIX conformance problems reported by Martin Rehak - - -subst.c - - expand_word_unsplit: rewrite in terms of expand_word_leave_quoted - - ifs_whitespace: new macro, Posix ifs whitespace (ISSPACE; member - of current locale's space char class) - - ifs_whitesep: new macro, whitespace that is a member of $IFS; used - by list_string and get_word_from_string - - list_string: use ifs_whitesep instead of spctabnl in case $IFS - contains whitespace characters that are not space, tab, or newline - - get_word_from_string: use ifs_whitesep instead of spctabnl in case - $IFS contains whitespace characters that are not space, tab, or - newline. - Part of POSIX conformance problems reported by Martin Rehak - - - 11/9 - ---- -general.c - - posix_initialize: enable the shift_verbose option when turning on - posix mode, and disable it when posix mode is disabled. From a - report by Eric Blake - -doc/bashref.texi - - posix mode: note the effect of posix mode on shift_verbose - - 11/12 - ----- -subst.c - - parameter_brace_expand: if parameter_brace_expand_word returns an - error, make sure to set TEMP = 0 (to note that the variable is unset). - From a report by Grisha Levit - - param_expand: if expanding $! when set -u is enabled, honor the - PF_IGNUNBOUND flag and just return NULL, relying on the caller to - take care of understanding that the variable is unset - From a report by Grisha Levit - - parameter_brace_expand: if we are checking nullness, and we have a - valid array expansion, a quoted null string resulting from the array - expansion of a * or @ subscript satisfies the nullness check. - From a report by Grisha Levit - - 11/14 - ----- -aclocal.m4 - - BASH_CHECK_LIB_TERMCAP: add last-ditch check for libncursesw, since - it's apparently the only curses library on some distributions. - Report from John Frankish - - 11/16 - ----- -bashline.c - - attempt_shell_completion: allow an initial word completion to - complete a partial first word (point appears in the middle of - the word) before resorting to command completion. Report and fix - from Luca Boccassi - -[bash-5.0-beta2 frozen] - - 11/27 - ----- -bashline.c - - attempt_shell_completion: better fix for problems with fix from - 11/16. Report and fix from Tom Ryder - -expr.c - - expr_skipsubscript: fix return type. Report and fix from - Andreas Schwab - - 11/29 - ----- -subst.c - - quote_escapes_internal: refactored quote_escapes into a function - that takes an additional flag saying whether or not we are going - to split the result. If we are not, and CTLESC is in IFS, we quote - the CTLESC (ditto for CTLNUL) to prevent it being removed when the - string is dequoted. - - quote_escapes: call quote_escapes_internal with FLAGS == 0 - - quote_rhs: new function, calls quote_escapes with FLAGS == PF_NOSPLIT2 - so that a CTLESC will be quoted if CTLESC is in $IFS - - parameter_brace_expand_word: call quote_rhs on the value of a variable - if PFLAGS includes PF_ASSIGNRHS, indicating that we will not be - splitting the word, but we will be dequoting it. Fixes bug reported - by Martijn Dekker - - param_expand: same change as for parameter_brace_expand_word - -execute_cmd.c - - execute_in_subshell: if we are running a trap (running_trap > 0), - turn off the SIG_INPROGRESS and SIG_CHANGED flags for that signal - by calling run_trap_cleanup and reset running_trap to 0 (watch the - second part!). Tagged for bash-5.1. - - 11/30 - ----- -lib/readline/doc/rltech.texi - - rl_set_keymap_name: correct typo in the name; some updates to the - description that clarify usage. Report from - - 12/4 - ---- -aclocal.m4 - - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: a test of whether fnmatch(3) - understands bracket equivalence classes ([=c=]) for characters - that collate with equal weights but are not identical - -configure.ac,config.h.in - - call BASH_FUNC_FNMATCH_EQUIV_FALLBACK and define - FNMATCH_EQUIV_FALLBACK to 1 if it can be used for equivalence - classes - - 12/5 - ---- -execute_cmd.c - - eval_arith_for_expr,execute_arith_command,execute_cond_command: make - sure running_trap == 0 before we reset the_printed_command_except_trap - Report from Peng Yu - -lib/glob/smatch.c - - _fnmatch_fallback_wc: new function, takes two wide characters c1 and - c2, converts them to a pattern ([[=c2=]]) and a string (c1) for - fnmatch to determine whether or not they are members of the same - equivalence class - - collequiv_wc: call _fnmatch_fallback_wc if rangecmp_wc returns - non-zero if FNMATCH_EQUIV_FALLBACK is defined, so we know that - fnmatch understands equivalence classes. Another Posix test suite - issue from Martin Rehak - - 12/6 - ---- -redir.c - - add missing cases to switch statements to shut up gcc - - 12/7 - ---- -builtins/set.def - - find_minus_o_option: new helper function, returns index into - o_options given option name - - minus_o_option_value,set_minus_o_option: use find_minus_o_option - -general.c - - new table of variables (currently all shopt options) that are - modified by going into and out of posix mode; num_posix_options() - returns the number of variables - - get_posix_options: fill in a bitmap passed as an argument (or return - a new one) of values of posix-mode-modified variables in the table - - set_posix_options: set values of posix-mode-modified variables from - the table using the passed bitmap for values - -builtins/set.def - - get_current_options: make the bitmap large enough to hold the options - in the set table and the table of posix-mode-modified variables; call - get_posix_options to fill in those values after the values from the - o_options table - - set_current_options: call set_posix_options to reset the values of - the posix-mode-modified variables at the end of the bitmap, after - the o_options values. Fixes issue reported by PJ Eby - - - 12/9 - ---- -parse.y - - select_command: add two additional productions to support select - commands without a word_list following the `in'. Fixes omission - reported by Martijn Dekker + - bashline.o: add dependency on ${DEFDIR}/builtext.h. Report from + Fazal Majid 12/11 ----- -variables.c - - assign_in_env: don't allow namerefs in temporary environment - assignments to create variables with invalid names for export. Fixes - bug reported by Grisha Levit +builtins/wait.def + - wait_builtin: don't assign the variable given with -p if there are no + jobs to wait for. Report and fix from Ouz - 12/14 +arrayfunc.c + - kvpair_assignment_p: return non-zero if argument L appears to be a + key-value pair associative array compound assignment + - expand_and_quote_kvpair_word: run a single word in a key-value pair + associative array compound assignment through the appropriate + expansions and single-quote the result + +arrayfunc.h + - kvpair_assignment_p, expand_and_quote_kvpair_word: extern declarations + +subst.c + - expand_oneword: detect whether VALUE appears to be a key-value + pair compound assignment and call the appropriate function to expand + each word in the resulting list. Fixes inconsistency reported by + oguzismailuysal@gmail.com + + 12/12 ----- -parse.y - - don't change last_command_exit_value in the 'error yacc_EOF' production - if the parser sets it to something non-zero; just make sure it - indicates an error. Fixes problem with unexpected EOF in eval - reported by Martijn Dekker - - 12/17 - ----- -expr.c - - exp2 -> expmuldiv - -lib/sh/smatch.c - - fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being - used - -hashlib.c - - hash_string: add FNV offset as initial value for hash instead of - starting at 0, changes hash for associative arrays and requires a - bunch of changes to the "right" test suite files - -variables.c - - rseed: make it explicitly 32 bits; that's all we're interested in - anyway +subst.c + - command_substitute: don't reset pipeline_pgrp to shell_pgrp if we + are already forked to run a command (SUBSHELL_FORK). Fixes SIGINT + in command substitution in here-document in forked child issue + reported by oguzismailuysal@gmail.com 12/18 ----- - -variables.c - - brand: add some comments, make the constants explicitly 32 bits; - use signed 32-bit values for the intermediate calculations. The - algorithm is still minstd - -[bash-5.0-rc1 frozen] +execute_cmd.c + - execute_pipeline: execute the lastpipe code even if prev == 0. It + can only be 0 here if stdin was closed when this function was + executed + - execute_pipeline: if prev == 0, set lstdin to a sentinel (-1) that + means to close fd 0 after executing the command, and call close(prev) + before restoring stdin. restore_stdin now understands -1, and closes + fd 0. Fixes issue reported by Tomas Janousek 12/21 ----- -doc/bash.1 - - }1: remove macro definition; it's outlived its bugfix purpose. - Report from Derek Schrock - - 12/22 - ----- -subst.c - - expand_arith_string: set W_NOTILDE in the flags so we don't perform - tilde expansion at all, even for the previously-special-case array - subscript expansion. Report from Bize Ma - - expand_word_internal: take out Q_ARRAYSUB check for tilde expansion +doc/bashref.texi + - PROMPT_COMMANDS: clean up a couple of remaining instances of this + name. Report from Eli Schwartz 12/26 ----- -builtins/evalstring.c - - parse_and_execute: if the eval builtin gets a parser error while - parsing a string in posix mode, don't exit the shell if the eval - was run by the command builtin. report from Martijn Dekker - +subst.c + - command_substitute: make sure that the child process always has + pipeline_pgrp == shell_pgrp: if pipeline_pgrp is non-zero when we + get to the child, meaning that we're part of an already-forked + child that is, for instance, running redirections, we need to reset + shell_pgrp to it to preserve the invariant. Fixes bug with terminal + being set to the incorrect pgrp reported by oguzismailuysal@gmail.com -examples/loadables/{basename,dirname}.c - - dirname_builtin: skip over any `--' ending the options. Report from - Peng Yu - - 12/27 + 12/29 ----- -examples/loadables/mkdir.c - - make_path: add argument noting whether or not the user specified -m; - only attempt the chmod on an existing directory if the user did so - - make_path: when creating intermediate directories, perform the - mkdir (path, 0) and chmod separately as the posix text recommends +configure.ac,builtins/shobj-conf,m4/threadlib.m4 + - midnightbsd: update auto-configuration to treat MidnightBSD like + FreeBSD. From https://savannah.gnu.org/patch/?10006 - 12/28 + 12/30 ----- -parser.h - - PST_COMMENT: new state, set when the shell is reading characters - until newline as part of comment processing +examples/loadables/stat.c + - stattime: use strftime with a default format or the format supplied + with the -F option to format the file time information + - stat_builtin: now takes a -F fmt option for a strftime format string; + change to function calling sequences to pass the format down to + stattime -parse.y - - shell_getc: don't return a space at the end of a token if the parser - is consuming a comment. Fixes bug reported by Harald van Dijk - +examples/loadables/Makefile.in + - stat: now built and installed by default 12/31 ----- -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: revert change from 4/27 that makes this - function return non-zero for a backslash in the string. Based on a - report from Tom Ryder +command.h + - SUBSHELL_IGNTRAP: new flag value -[bash-5.0 frozen] +jobs.c + - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the + child process, meaning that we should not execute trap handlers for + trapped signals -[bash-5.0 released] +execute_cmd.c + - execute_in_subshell, execute_simple_command, execute_disk_command: + make sure to unset SUBSHELL_IGNTRAP after a child process restores + the original signal dispositions + - execute_simple_command: make sure to set SUBSHELL_IGNTRAP after + make_child returns and we're setting subshell_environment directly - 1/6/2019 +subst.c + - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after + the child process has reset the trapped signal dispositions + +trap.c + - trap_handler: if we get a signal for which we have set a trap, but + SUBSHELL_IGNTRAP is set in subshell_environmnent, make sure we + restore the original signal disposition and resend the signal to + ourselves. Fixes issue reported by Nikolay Borisov + (or at least makes the race window much smaller) + +sig.c + - initialize_terminating_signal: set the original signal handler from + the return value from sigaction; a minor optimization that saves a + system call or two + + 1/5/2021 -------- - -examples/loadables/basename.c - - make sure to include bashgetopt.h. Reported by Angel - - -lib/malloc/malloc.c - - stdlib.h: include if botch isn't defined to provide a declaration - for abort() - -hashlib.c,Makefile.in - - fixes to make hash library testing work for others from - Eduardo Bustamante - -lib/readline/unicode.c - - u32toutf16: correct the second argument to be wchar_t *, and treat - it as such, even though it doesn't make a difference in practice. - Report and fix from Eduardo Bustamante - - 1/8 - --- - -builtins/return.def - - return_builtin: return EX_USAGE if we're not executing a shell - function or sourcing a script, so a posix-mode shell exits. Fixes - bug reported by Robert Hailey - builtins/declare.def - - declare_internal: don't let `declare -f +f' turn off the function - attribute. Fix from Grisha Levit - - declare_internal: reject attempts to add the -A or -a attributes - to functions. Report from Grisha Levit + - declare_internal: make some option combinations that don't make + sense errors (e.g., -f and -a/-A/-i/-n) + - declare_internal: if we build a new variable name by expanding the + value of a nameref variable, make sure to chop the `+' in a `+=' + off before going on - 1/9 + 1/7 --- -bashline.c - - completion_glob_pattern: new function, returns true if the passed - string contains a glob pattern that should be process by the glob - completion code. Completion glob patterns don't pay attention to - backslashes unless they're the last character in the string. This - is a different, more self-contained, fix for the problem reported - by Tom Ryder - -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: restore change from 4/27 and make this - function return non-zero if it encounters a backslash in the string. - It needs to match pathexp.c:unquoted_glob_pattern_p(). Adds fix - back for issue reported by axel@freakout.de - -test.c - - arithcomp: when calling evalexp, make sure to call it with the - EXP_EXPANDED flag, since all arguments here have been evaluated - already - -arrayfunc.c - - array_expand_index: call evalexp with EXP_EXPANDED flag, since we - have run the string through expand_arith_string already - - 1/11 - ---- -parser.h - - PST_ENDALIAS: new state, means we just consumed the last character - of an alias expansion and returned the fake space - -parse.y - - shell_getc: add PST_ENDALIAS to parser_state before returning the - fake space that marks the end of the alias, making sure to do it - only once. With that set, fall through to the pop_string(), making - sure to unset PST_ENDALIAS. Fixes alias bug reported by - Ante Peric +doc/{bash.1,bashref.texi} + - bind: add an example to the synopsis making it clear that you can + use any readline command line as a non-option argument, as it says + in the text. From a report from Dan Jacobson 1/12 ---- -lib/glob/glob.c - - {extglob,wextglob}_skipname: make sure we check the rest of the - pattern if the extglob pattern is null, and therefore won't match - anything. If that is followed by a `.', quoted or unquoted, we can - match a leading `.' in the pathname. This code is currently not - active. +locale.c + - local_shiftstates -> locale_shiftsates in the non-multibyte code + branch. Reported by Henry Bent -builtins/hash.def - - hash_builtin: if -d is supplied without an argument, print an error - message and return failure, just like -t without an argument. Fixes - inconsistency reported by Dan Jacobson +subst.c + - expand_compound_assignment_word: make sure to call dispose_words on + the WORD_LIST * returned from expand_oneword after turning it back + into a string. Fixes memory leak reported by Alexander Mescheryakov + 1/13 ---- -parse.y - - shell_getc: use shellblank when testing the last character of an - alias to determine whether or not to add a trailing space instead - of testing against a space only. These are the non-shell-metacharacters - that can delimit words. Used together with PST_ENDALIAS +variables.c + - bind_variable_internal: when performing an assignment to a subscripted + array variable that was the value of a nameref (used in the original + assignment), don't call make_variable_value on the value, since that + messes up +=. Just call assign_array_element and let that take care + of calling make_variable_value appropriately. Fixes bug reported by + Oguz + + 1/14 + ---- +findcmd.c + - search_for_command: if `checkhash' is set, don't add non-executable + files to the command hash table, since we will just remove them + later + +lib/sh/winsize.c + - get_new_window_size: set *rp and *cp even if READLINE is not defined + + 1/15 + ---- +lib/sh/winsize.c + - get_new_window_size: call rl_set_window_size only if we can determine + we're using readline: an interactive shell without no-line-editing, + or if we've already initialized readline, presumably in a non- + interactive shell + +support/Makefile.in + - man2html: add LDFLAGS_FOR_BUILD to the recipe. Report from + Jeffrey Walton 1/17 ---- -parse.y - - shell_getc: keep track of whether the last character read from - shell_input_line is an unquoted backslash and don't add a space to - the end of an alias if the alias value ends in an unquoted backslash. - From an austin-group mailing list discussion message from - Harald van Dijk +lib/readline/misc.c + - rl_operate_and_get_next: fix old K&R function declaration. Report + from Tom Tromey - 1/20 +lib/readline/readline.c + - _rl_internal_char_cleanup: move code that cleans up the active region + and deactivates the mark inside this function so callback mode + applications get the intended functionality. Report and fix from + sparrowhawk996@gmail.com + +lib/readline/bind.c + - rl_parse_and_bind: when using the arithmetic comparison operators on + the version, make sure to invert the tests so that we stop parsing + if the test fails. Report and fix from Tom Tromey + + 1/19 ---- -general.c - - check_identifier: make sure CHECK_WORD is non-zero before we check - whether or not the word consists of all digits. This allows function - names to consist solely of digits when not in posix mode. From a - report by Andrey Butirsky +Makefile.in + - pipesize.h: add dependency on ${BUILTINS_LIBRARY} to avoid parallel + makes trying to create it twice. Report and fix from + Richard Purdie + + 1/21 + ---- +subst.c + - param_expand: if a nameref expands to array[@] or array[*], make sure + to call chk_atstar so the right variables are set to split the + result. Report from Oguz 1/22 ---- -bashline.c - - initialize_readline: only unbind ^E in vi_movement_keymap if it's - still bound to the default rl_emacs_editing_mode. Fixes bug - reported by Greg Bell +builtins/declare.def + - Rewrote to reduce complexity. Still needs some work. - 1/23 +lib/readline/*.h, lib/tilde/tilde.h + - PARAMS: remove, rely on compilers understanding function prototypes + +lib/readline/{undo.c,histlib.h} + - _hs_replace_history_data: move extern declaration to histlib.h + +lib/readline/readline.c + - _rl_parse_colors: instead of an extern declaration for this, include + "parse-colors.h" for it + +lib/readline/{histfile.c,histlib.h} + - _hs_append_history_line: move extern declaration to histlib.h + +lib/readline/history.h + - HS_HISTORY_VERSION: define to 0x0801 (current library version) if + it's not already defined. We conditionally define it in case an + application has (unwisely) chosen to use it, since the history + library doesn't do anything with it yet + +lib/readine/{rlprivate.h,{search,misc,readline}.c} + - _rl_free_history_entry: add extern declaration to rlprivate.h, remove + extern declaration from c source files. Use HS_HISTORY_VERSION as a + sentinel that it's ok to use HIST_ENTRY in rlprivate.h + +lib/readline/{rlprivate.h,{isearch,search,undo}.c} + - _rl_saved_line_for_history: add extern declaration to rlprivate.h, + remove extern declaration from c source files, using HS_HISTORY_VERSION + in the same way + + 1/24 ---- -builtins/shopt.def - - we need the extern declaration for syslog_history if SYSLOG_HISTORY - is defined, since it's used even if SYSLOG_SHOPT is not defined. - From a Gentoo Linux bug report, eventually reported to bug-bash by - Tomas Mozes +lib/readline/signals.c + - _rl_handle_signal: make sure that all sigprocmask calls are protected + by HAVE_POSIX_SIGNALS. Report and fix from Tom Tromey - 1/25 + 1/26 ---- -command.h - - CMD_TRY_OPTIMIZING: new command flag, means this (simple) command is - a candidate for fork optimization (suppression) +lib/readline/callback.c + - rl_callback_read_char: make sure rl_linefunc is non-NULL before + calling through the pointer. The line function could have been + removed by the application before readline processes any typeahead + input. Bug reported by Matthias Klose , pointer + to root cause from Koichi Murase -builtins/evalstring.c - - can_optimize_connection: new function, takes an AND_OR list (&& or - ||) from parse_and_execute, makes sure it's the last in a possibly - multi-command list, and returns non-zero if it's a simple command, - indicating that it's a candidate for fork optimization. - - parse_and_execute: if we have a cm_connection command, call - can_optimize_connection to determine if it's a suitable candidate - and set CMD_TRY_OPTIMIZING if that returns non-zero - - optimize_fork: don't bother unless the rhs of the && or || command - has the CMD_TRY_OPTIMIZING flag set. These fix the bug reported by - Brad Spencer +lib/glob/glob.c + - skipname,wskipname: put in some additional checks for `.' to ensure + that we don't get false positives (or incomplete tests) that can + affect the results of extglob patterns. Reported by + gregrwm + 1/27 + ---- +lib/glob/glob.c + - extglob_skipname,wextglob_skipname: fixed an off-by-one error (SE + was being set to one character before the end of the pattern string, + not the null character at the end of the pattern string like other + callers of glob_patscan) that caused the last character of the last + subpattern to be cut off when calling skipname + - extglob_skipname,wextglob_skipname: some cleanups so the code is + closer to identical for the single-byte and wide character versions + + 2/1 + --- execute_cmd.c - - execute_connection: case AND_AND and OR_OR: call optimize_fork on - the right side of the command before executing `second'. This will - safely restore the fork optimization we removed from - parse_and_execute() - -builtins/complete.def - - build_actions: make sure the function name argument to -F is a - valid shell function name: it doesn't contain any invalid posix- - mode characters and doesn't contain any shell break characters that - would need to be quoted when defining a function. Fixes issue - reported by Great Big Dot - - 1/28 - ---- -variables.c - - dispose_temporary_env: make sure to save temporary_env to a temp - pointer and set temporary_env to NULL before trying to dispose it, - so no flush function ever tries to add a temporary variable back - into the table (e.g., bind_variable()) - - 1/29 - ---- -builtins/evalstring.c - - can_optimize_connection,optimize_fork: add the last command in lists - separated by `;' to the list of candidates for fork optimization - - 1/30 - ---- -examples/loadables/strftime.c - - strftime_builtin: try to extend the buffer longer than tbsize*3, - which is a minimum of 24 characters, in case some of the formats - (e.g., %c) expand to something longer than that. Fixes bug - reported by Stan Marsh - - 1/31 - ---- -lib/readline/undo.c - - rl_do_undo: before inserting text while undoing UNDO_DELETE, or - performing a deletion while undoing UNDO_INSERT, make sure that - rl_point is valid by calling _rl_fix_point. Fuzzing bug and fix - from Eduardo Bustamante - -lib/readline/search.c - - _rl_nsearch_abort: validate new values for rl_point and rl_mark by - calling _rl_fix_point(). Fuzzing bug and fix from - Eduardo Bustamante + - execute_simple_command: in posix mode, if we have a variable + assignment error while assigning into the temporary environment (e.g., + assigning to a readonly variable), a non-interactive shell running a + special builtin exits; a non-interactive shell running anything else + jumps back to the top level. A shell compiled with -DSTRICT_POSIX + exits unconditionally. + - execute_simple_command: make sure posix mode sets $? to non-zero + if a variable assignment error occurs preceding a non-special builtin subst.c - - string_extract_double_quoted: if we parse a syntactically-incorrect - $( expression while extracting a double-quoted string, si will - appear to go `backward'. Just skip over the rest of the string and - continue. Fuzzing bug from Eduardo Bustamante - -lib/readline/text.c - - rl_change_case: if towupper or towlower returns a valid wide char - that can't be converted back to a valid multibyte character, use - the original character and go on. Fuzzing bug from - Eduardo Bustamante - -lib/glob/glob.c - - wdequote_pathname: if there are no multibyte characters in pathname, - just call udequote_pathname and don't bother converting it to wide - characters - - glob_pattern_p: if there are no multibyte characters in the pattern, - just call internal_glob_pattern_p right away - -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: return 2 if we see only backslash-quoted - characters without any other unquoted glob pattern characters, so - interested callers can shortcut and just dequote the pathname - -pathexp.c - - unquoted_glob_pattern_p: return 2 if we see only backslash-quoted - characters without any other unquoted glob pattern characters, - consistent with the glob library - - unquoted_glob_pattern_p: don't count a backslash quoting a slash as - a backslash that will trigger a call to shell_glob_filename, since - backslashes at the end of patterns (pathname components) will always - fail to match. XXX - this is provisional - -lib/glob/glob.c - - glob_filename: if we have a directory name that has no unquoted - special glob chars, but has backslashes, just dequote it and return - it without going through the rest of the glob expansions. Partial - fix for issue with unreadable directories reported by - Andrew Church + - do_assignment_statements: take the code from expand_word_list_internal + that performs assignment statements, either standalone or preceding + simple command names, and factor it out into this function + - expand_word_list_internal: call do_assignment_statements where + appropriate 2/2 --- -lib/readline/readline.c - - readline_internal_teardown: if revert-all-at-newline is set, make - sure that the history position is at the end of the history before - calling _rl_revert_all_lines(). Fixes bug reported by - johnlinp@gmail.com and frederik@ofb.net +lib/glob/glob.c + - dequote_pathname: fix function definition for non-multibyte systems. + Report and fix from Marc Aurèle La France + +Makefile.in,doc/Makefile.in + - for certain targets, remove files before creating them to deal with + symlinked build trees. + Report and fix from Marc Aurèle La France + +examples/loadables/accept.c + - include limits.h before typemax.h + Report and fix from Marc Aurèle La France + +builtins/gen-helpfiles.c + - if USING_BASH_MALLOC is defined, make sure to undefine malloc as well + as free. Fixes bug reported by George R Goffe + +builtins/Makefile.in + - install-help: now depends on $(HELPFILES_TARGET) so we make sure the + separate helpfiles are created before we try to install them if we + don't go through the `all' makefile target + +configure.ac + - HELPDIR: now ${datadir}/bash/helpfiles + + 2/3 + --- +parse.y + - parse_string_to_word_list: before expanding a compound assignment + statement body, make sure to save any alias that's currently being + expanded. Restore the alias after the compound assignment is parsed. + Reported back in 11/2020 by Alex fxmbsw7 Ratchev 2/4 --- -builtins/complete.def - - complete_builtin: fix check for argument to -F to use strpbrk - instead of incomplete use of strcspn. Fix from Grisha Levit - +lib/readline/histexpand.c + - history_expand_internal: when calling the history_inhibit_expansion + function, make sure to call it using the string as we've expanded it + to that point (RESULT), adding the expansion and next characters + temporarily, since we make expansion decisions based on what we've + accumulated, not what we started with. This makes things like + echo abc!$!$ work, where before the second `!' inhibited expansion + because bash_history_inhibit_expansion mistakenly took it as the + second character in a `$!' word expansion. Fixes bug reported back + in 10/2020 by Paul Fox + +array.h + - array_pop: instead of calling array_dispose_element from this macro, + just call array_shift with the AS_DISPOSE flag 2/5 --- -lib/readline/readline.c - - rl_parse_and_bind: change parsing of boolean variable values to - look for and consume an optional whitespace-delimited word. This - allows trailing spaces and everything that follows to work. Idea - from Bize Ma - - rl_parse_and_bind: print error message about unknown variable names - instead of calling rl_variable_bind to do it - - rl_variable_bind: report error if setting string variable returns - non-zero +bashhist.c + - shell_comment: move condition to return 0 if the delimiter stack is + not empty or the shell is parsing a here document into the function + itself, don't have the callers check so the check is in one place. + Fixes bug reported by Oguz - 2/6 +array.h,variables.c + - ARRAY_ELEMENT_REPLACE: convenience define for modifying an array + element's value + +variables.c + - pop_args: a couple of code simplifications + + 2/7 --- -lib/readline/histfile.c - - read_history_range: close FILE before returning if the history file - size is 0 +lib/malloc/malloc.c + - pagesz: at least MALLOC_PAGESIZE_MIN (4096) bytes + - union mhead: now 16-byte aligned on all systems, 32-bit and 64-bit + pointers + - binsizes: since the smallest allocation overhead is now 16 bytes, + redo the buckets so binsizes[0] == 32; adjust the thresholds for + split/coalesce/prepopulate/mmap (NBUCKETS = 28; STARTBUCK = 0). + Sizes stay pretty much the same; indices change + - consistently use MALLOC_SIZE_T instead of long/unsigned int/int + - use MAGIC8_NUMBYTES as the length of the mh_magic8 buffer, in case + it changes later for alignment + - internal_remap: new function, calls mremap to reallocate a chunk of + memory allocated using mmap(); called from internal_realloc if the + old size and new size are both bigger than the mmap threshold + - internal_realloc: call internal_remap if the old size and new size + are both above the threshold where we use mmap for allocation + + 2/10 + ---- +include/timer.h + - new file, declaration for a timer struct to be used by a set of + functions to implement timers using SIGALRM or select/pselect + +lib/sh/timers.c + - new file, set of functions to manipulate timer objects and timeouts + using SIGALRM or select/pselect. Inspired by a patch from + Koichi Murase . Not used yet 2/11 ---- -bashline.c - - edit_and_execute_command: add the current line buffer to the history - list even if it's empty and rely on other code in bash_add_history - to take care to not add multiple semicolons with multiple blank - lines and command_oriented_history. Live with the blank lines as - history entries for now. Fixes problem reported by - Johannes Hielscher +builtins/read.def + - read_builtin: if there is a timeout set, block SIGCHLD around calls + to zread and its siblings, or calls to readline for `read -e', so + SIGCHLD (and the consequent waitpid) doesn't interrupt the read. + Fixes bug reported by Koichi Murase , but + there may be a different fix coming -lib/readline/misc.c - - _rl_revert_all_lines: renamed to _rl_revert_previous_lines, since - that is basically what it does - - _rl_revert_all_lines: now just makes sure the history offset is at - the end of the history and calls _rl_revert_previous_lines. Inspired - by a suggestion from johnlinp@gmail.com +Makefile.in,builtins/Makefile.in + - fix up dependencies, especially on builtins.h and builtext.h -lib/readline/readline.c - - readline_internal_teardown: revert change of 2/2, moved that code - into the (new) _rl_revert_all_lines - -lib/readline/rlprivate.h - - _rl_revert_previous_lines: new extern declaration - -builtins/bind.def - - bind_builtin: make sure the unwind-protect gets run when the --help - option is used, so use `case GETOPT_HELP:' instead of `CASE_HELPOPT;'. - Report and fix from Koichi Murase 2/12 ---- -lib/readline/util.c - - _rl_abort_internal: don't just turn off the MACRODEF state, call - _rl_kill_kbd_macro to delete any traces of an in-progress macro - definition before turning it off. Fixes fuzzing bug. +lib/readline/input.c + - rl_read_key: if we set rl_done == 1, set RL_STATE_DONE as well + Reported by Koichi Murase - 2/13 - ---- -examples/loadables/Makefile.in - - CCFLAGS: add $(CPPFLAGS) to value, based on a report from - Christian Weisgerber +lib/readline/isearch.c + - _rl_search_getchar: only call _rl_read_mbstring if rl_read_key returns + >= 0, avoid some work + +lib/readline/vi_mode.c + - _rl_vi_callback_change_char,_rl_vi_change_char: don't overwrite the + last replacement string if _rl_vi_callback_getchar returns -1. + It will likely make no difference, since the next read will return + an error or EOF, but being careful + - rl_vi_overstrike: if _rl_overwrite_char doesn't return 0, break out + of the loop + +lib/readline/text.c + - _rl_overwrite_char: return 1 if _rl_read_mbstring returns < 0 so + we don't try to insert garbage + +bashline.c + - posix_edit_macros: handle rl_read_key() returning <= 0 2/15 ---- -bashline.c - - posix_readline_initialize: keep track of the vi insertion keymap - binding for TAB, since we change it in this function. Save the - old binding before we change it when turning posix mode on, and - restore that old binding when turning posix mode off, as long as - the current binding is still rl_insert. Suggested by a report from - Koichi Murase +parse.y + - read_comsub: make sure to turn on the LEX_RESWDOK flag if we are in + a case statement and read a `)', since we can get a valid `esac'. + Fixes bug reported by Oguz + - read_comsub: if we're in a case statement, recognize `}' as a + reserved word and set the LEX_RESWDOK flag for the next word, since + we can get an esac (or another reserved word) after it + + 2/16 + ---- +parse.y + - reserved_word_acceptable: add ARITH_CMD and COND_END to the list of + tokens that can precede a reserved word, so you can use reserved + words after ((...)) and [[...]]. + Reported by Koichi Murase 2/17 ---- -builtins/exec.def - - exec_builtin: save value of job_control; use it to restore the value - of job_control if an exec fails in an interactive shell instead of - enabling it by default in an interactive shell. Report from - Grisha Levit - -lib/readline/bind.c - - _rl_function_of_keyseq_internal: make sure to use checks against LEN - instead of a NULL character in KEYSEQ to determine the length of the - key sequence. - Report and fix from Koichi Murase - - rl_bind_key: make sure the KEY argument is not larger than the - largest unsigned character. - Report and fix from Koichi Murase - - rl_translate_keyseq: make sure that M-x correctly adds "\ex" to the - key sequence array when convert-meta is set. - Report and fix from Koichi Murase - - rl_translate_keyseq: now unconditionally converts meta characters to - ESC-prefixed key sequences when processing \0nnn \Xnnn and \[char] - escape sequences that resolve to meta characters and for `normal' - characters that have the meta bit set - Report and fix from Koichi Murase - -jobs.c - - end_job_control: if the terminal pgrp (terminal_pgrp) is not the same - as the original pgrp (original_pgrp), set the terminal's pgrp to the - original pgrp so when we reset the shell's pgrp to original_pgrp, - we'll continue to be able to read from the terminal if the shell is - interactive. Fixes bug with turning off job control before starting - an interactive shell reported by Grisha Levit - +parse.y + - parse_comsub: use new LEX_CASEWD flag to track when we are reading + the WORD in `case WORD in' and turn on the LEX_RESWDOK flag when + that word ends. This allows $(case x in esac), which no one uses. + - parse_comsub: use LEX_PATLIST flag to track when we are reading a + case pattern list so `|' doesn't turn on the LES_RESWDOK flag + - parse_comsub: case_level: simple counter to count the number of esacs + we need to see before we're no longer in a case statement; analog of + esacs_needed_count from the lexer 2/19 ---- - -jobs.c - - end_job_control: if the setpgid(0, ...) succeeds, reset the value of - shell_pgrp. Fixes pgrp mismatch after failed exec in an interactive - login shell reported by Grisha Levit - - 2/20 - ---- -bashhist.c - - pre_process_line: save history_length before calling history_expand, - and after possibly decrementing history_length, just restore the old - value instead of incrementing it. Fixes bug reported by - Michael Albinus - - bash_add_history: don't bother calling really_add_history if the - history is stifled and the max number of entries is 0 - -aclocal.m4,configure.ac,m4/*.m4 - - replace the old set of gettext m4 macros with the latest m4 files - from the gnulib and gettext distributions - - 2/21 - ---- -builtins/cd.def - - bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always - failing - -command.h - - W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword} - -subst.c - - expand_string_for_rhs: set W_EXPANDRHS in word to be expanded - -subst.c - - expand_word_internal: when encountering a single or double quoted - string that expands to nothing, add a CTLNUL if the W_EXPANDRHS - flag is set and the word isn't quoted, indicating that the word - will eventually be split and we need to preserve the null to - produce an empty word. From a discussion on bug-bash started by - sunnycemetery@gmail.com - - 2/22 - ---- -bashline.c - - completion_glob_pattern: make sure to skip over a character quoted - by a backslash. Fixes bug reported by John Van Sickle - - - 2/23 - ---- -lib/readline/complete.c - - last_completion_failed: keep track of whether the last completion - attempt generated any matches - - rl_complete: if the last readline command was completion, but the - completion attempt didn't generate any matches, don't regenerate - and display the match list. Treat it as a new completion attempt. - Suggested by Richard Stallman - -bashhist.c - - maybe_append_history: try to handle the case where the number of - history entries in the current shell session is greater than the - number of entries in the history list. Based on a report from - - - 2/25 - ---- -aclocal.m4 - - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: use en_US.UTF-8 instead of - de_DE.UTF-8; it's more likely to be installed +parse.y + - CHECK_FOR_RESERVED_WORD: don't return ESAC if we read `esac' after a + left paren in a case pattern list. From an austingroup-bugs discussion + about https://www.austingroupbugs.net/view.php?id=1454 + - parse_comsub: if we read a `(' while looking for a case pattern list + and LEX_CKESAC is set, we have a leading left paren in the pattern + list and should turn off LEX_CKESAC so (esac) doesn't prematurely + terminate the case command. From an austingroup-bugs discussion + about https://www.austingroupbugs.net/view.php?id=1454 2/26 ---- -doc/{bash.1,bashref.texi} - - extdebug: make sure to note that setting this option in a startup - file causes an attempt to start the debugger. Noted by Linda - Walsh +builtins/history.def + - history_builtin: when checking negative offsets to -d, which are + supposed to count back from the end of the history list, check the + range against 0 instead of history_base, because the calculation is + done against history_length, which is independent of history_base. + Report and fix from Christopher Gurnee -builtins/fc.def - - fc_builtin: if we are not listing, and delete the last history entry, - make sure that histbeg or histend, whichever is greater, is clamped - at the value of last_hist to avoid dereferencing the just-removed - history index. Fixes bug reported by Chris King-Parra - - - 2/27 + 2/28 ---- -shell.c - - init_interactive: assignment to histexp_flag should be protected by - #ifdef BANG_HISTORY. https://savannah.gnu.org/patch/?9759 +doc/bashref.texi + - replaced a number of uses of @var with a mixture of @env and @dfn + to better match up with the texinfo standards -subst.c - - list_string: if we have a non-null string, but quoted null character - removal leaves an empty string, set W_SAWQUOTEDNULL in the returned - word flags so the caller can deal with it - - parameter_brace_expand_rhs: deal with word with null or empty word - and W_SAWQUOTEDNULL in the flags coming back from expand_string_for_rhs - by turning it into a quoted null word and modifying the flags. Part - of fix for bug report from Grisha Levit - - expand_word_internal: if a double-quoted string comes back with a - quoted null as the expansion of "$@", note that we saw it, but still - add a quoted null into the result string instead of short-circuiting. - Part of fix for bug report from Grisha Levit +doc/{bash.1,bashref.texi} + - clarify some aspects of the coproc description, especially the + use of NAME and when it's optional 3/1 --- -examples/loadables/fdflags.c - - O_CLOEXEC: instead of not using it, synthesize a definition for it - from unused bits in the file status word. It's only used as a - placeholder anyway. Fix from code by Robert Elz +subst.c + - read_comsub: fix off-by-one error in mbrtowc that causes a read one + character past the end of buf. Report and fix from + Platon Pronko in + https://savannah.gnu.org/patch/?10035 -execute_cmd.c - - execute_connection: call optimize_fork on the rhs of a `;' connection - to attempt to optimize the last simple command in a list + 3/3 + --- +builtins/ulimit.def + - ulimit_builtin: Posix compatibility: if the last command specified + by an option does not have an option argument, but there is an + operand remaining after all the options are parsed, treat the + operand as an argument to that last command. From an austin-group + discussion and a Geoff Clare suggestion back in November, 2020. + Austin Group interpretation 1418 + +examples/shellmath + - a package of shell functions to perform floating-point math entirely + in bash. Contributed by Michael Wood . Available + at https://github.com/clarity20/shellmath 3/4 --- -subst.c - - parameter_brace_expand: add `@' to the list of operators that cause - unbound parameter errors. Fixes oversight bug reported by - Martin Schulte +support/shobj-conf + - darwin: take out the -arch-only option in SHOBJ_XLDFLAGS and + SHOBJ_ARCHFLAGS; no longer needed + +doc/{bash.1,bashref.texi} + - coprocesses: suggested changes from rms@gnu.org; recommend the + `coproc NAME { commands; }' form as the simplest and most flexible 3/5 --- -subst.c - - expand_word_internal: update to fix from 2/21 and 2/27 to accommodate - contexts when word splitting will not take place (W_ASSIGNRHS). Fix - from Grisha Levit - - param_expand: if IFS is unset, and we are expanding $* in a context - where we're not going to be performing word splitting, just treat it - as if IFS=" " and don't set W_SPLITSPACE. Report and hint at fix - from Grisha Levit - - param_expand: if IFS is not null, and we are expanding $* in a - context where we're not going to be performing word splitting, and - we quote a null string (resulting in a quoted null), make sure we - set W_SAWQUOTEDNULL to note this for the caller - - parameter_brace_expand_rhs: make sure to remove any W_SAWQUOTEDNULL - flag for a the word on the rhs of the `=' operator if the original - string is null or the original string is not null and the returned - string (after dequoting) is not null. For instance ${v= ''} should - not have the SAWQUOTEDNULL flag set because it is " " after - expansion and dequoting, even though we saw a quoted null there - - 3/6 - --- -lib/sh/eaccess.c - - sh_eaccess: AIX needs the same kind of additional checks as FreeBSD - and Solaris when running as root and checking whether or not a file - is executable. Report and fix from REIX, Tony - - 3/7 - --- -lib/glob/glob.h - - GX_RECURSE: new flag, indicates internal call to glob_filename - -lib/glob/glob.c - - glob_filename: add GX_RECURSE to recursive call to glob_filename - - glob_filename: dequote a directory name (in the absence of a - filename) only if this is not a recursive call to glob_filename - ((flags & GX_RECURSE) == 0). Fixes bug reported by Dr. Werner Fink - +builtins/exec.def + - exec_builtin: set last_command_exit_value before calling exit_shell + so any exit trap gets the right value for $?. From Matthew Bauer + via https://savannah.gnu.org/patch/?10039 3/8 --- -parse.y - - handle_eof_input_unit: before calling exit_builtin, set - last_shell_builtin and this_shell_builtin appropriately, since the - exit builtin uses them to determine whether or not to exit - immediately. Fixes bug reported by Tom Levy +include/timer.h + - SHTIMER_ALRMSET: new flag, indicates that there is an active alarm + associated with this timer (falarm() was called) -lib/sh/shquote.c - - sh_double_quote,sh_mkdoublequoted,sh_backslash_quote_for_double_quotes: - make sure to handle multibyte characters that may contain characters - that need to be quoted in double quotes; adding a spurious double - quote may turn them into different characters or uncover characters - that are special in double quotes. Fixes bug reported by - Stephane Chazelas - - sh_backslash_quote: don't call COPY_CHAR_P if we're in a UTF-8 - locale and the current character doesn't have its eighth bit set; - only check mb_cur_max and is_basic if we're not in a UTF-8 character - set +lib/sh/timers.c + - shtimer_set: set the SHTIMER_ALRMSET flag after calling falarm + - shtimer_unset: don't call falarm(0,0) unless the SHTIMER_ALRMSET flag + is set 3/9 --- -subst.c - - read_comsub: if it looks like we're starting a multibyte character, - read a whole multibyte character from buf and add it all at once, - so we don't quote each byte in a multibyte character sequence. Fixes - bug uncovered by shquote changes from 3/8 +include/posixtime.h + - added some BSD convenience defines if they are not present + +parse.y,shell.h + - {save,restore}_parser_state: save and restore shell_eof_token and + pushed_string_list; change callers (e.g., xparse_dolparen) so they + don't have to manage them + + 3/10 + ---- +builtins/common.h + - extern declarations for moving to timers (sh_timer) for read builtin + timeouts + +quit.h + - CHECK_ALRM: remove, no longer used + +trap.c + - check_signals: call check_read_timeout instead of CHECK_ALRM + +bashline.c + - bash_event_hook: use read_timeout instead of checking `sigalrm_seen'; + that no longer exists + - bash_event_hook: accommodate readline timing out (not used yet) + +lib/sh/zread.c + - zread: call read_builtin_timeout() to check for a timeout before + calling a blocking read() + +builtins/read.def + - sigalrm,reset_timeout,check_read_timeout,read_builtin_timeout: new + and modified functions to use sh_timers for timeouts instead of + SIGALRM. Based on work contributed by Koichi Murase + + - read_builtin: use sh_timers for read timeouts (-t N) instead of + using SIGALRM + - edit_line: simulate receiving SIGALRM if readline times out (not + used yet) 3/11 ---- -subst.c - - expand_word_internal: if we are in a context where word splitting - will not occur, but one where we need to make sure we eventually - expand "$@" to multiple words, add a space as quoted so we can still - split on the space separator in $@. Fixes bug reported by - Grisha Levit +lib/readline/readline.c + - rl_initialize: call _rl_timeout_init to set things up for any timeout + that was set with rl_set_timeout + - readline_internal_charloop: if we longjmped because of a timeout, + make sure to set rl_done/RL_STATE_DONE and return; we are + abandoning this call to readline(). The readline timeout changes + were based on work contributed by Koichi Murase + - 3/13 +lib/readline/readline.h + - extern declarations for new timeout functions and hook + - rl_clear_timeout: new define + +lib/readline/callback.c + - rl_callback_read_char: if we longjmped because of a timeout, + make sure to set rl_done/RL_STATE_DONE and return; we are + abandoning this call to readline() + +lib/readline/util.c + - _rl_abort_internal: if we time out, don't ring the bell; let the + caller handle it + +lib/readline/input.c + - extern declarations for public and readline-library-private functions + and hooks to implement timeouts + - rl_set_timeout,rl_timeout_remaining: new public functions + - _rl_timeout_select: new function, uses select/pselect to implement + read timeouts that take timeouts set with rl_set_timeout into account; + calling hook function if a timeout occurs + - rl_gather_tyi, _rl_input_available: use _rl_timeout_select, taking + any existing timeout into consideration if it expires before the + timeout passed as an argument + - rl_getc: use _rl_timeout_select and handle any timeouts by calling + _rl_timehout_handle + - set_alarm,reset_alarm: new functions to implement timeouts using + SIGALRM for systems that lack a working select/pselect + - _rl_timeout_init: new function, sets things up for reading input + with a specified timeout + - _rl_timeout_handle: a timeout handler; calls any event hook and + sets up to abort the current readline() call + - _rl_timeout_handle_sigalrm: a timeout handler for systems using + SIGALRM to implement timeouts + +lib/readline/parens.c + - rl_insert_close: use _rl_timeout_select to take timeouts into account + +lib/readline/rlprivate.h + - extern declarations for readline-library-private timeout functions + +lib/readline/rltty.c + - rl_deprep_terminal: don't print a newline after the bracketed paste + disable sequence if we timed out + +lib/readline/signals.c + - _rl_handle_signal: if sig is SIGALRM, call _rl_timeout_handle_sigalrm() + +lib/readline/doc/rltech.texi + - rl_set_timeout,rl_timeout_remaining: document new public functions + - RL_STATE_TIMEOUT: document new possible state value for rl_readline_state + - rl_timeout_event_hook: document new hook function, called when + readline times out + +builtins/read.def + - read_builtin: changes to use the readline timeout functions to + implement timeouts with `read -e'; these use rl_set_timeout and + sh_timer structs together + + 3/12 ---- subst.c - - parameter_brace_substring, parameter_brace_patsub: treat the case - where pflags includes PF_ASSIGNRHS the same as if IFS is null, since - word splitting will not take place + - expand_string_dollar_quote: new function, expands $'...' and $"..." + in a string for those code paths that don't expand it themselves -{subst,array,assoc}.c,subst.h - - string_list_pos_params: add a fourth argument: pflags; change all - callers to initially pass 0 as fourth arg +subst.h + - expand_string_dollar_quote: extern declaration - 3/14 - ---- -subst.c - - expand_word_internal: split words with W_ASSIGNRHS flag set specially. - These and subsequent changes fix expansion bugs reported by - Grisha Levit +parse.y + - read_secondary_line: if $'...' or $"..." appears in the line, call + expand_string_dollar_quote to expand them. This now returns new + memory, need to change callers -subst.c - - string_list_pos_params: if we are expanding `@', make sure we honor - PFLAGS including PF_ASSIGNRHS and use string_list_dollar_at to make - sure the positional parameters are separated by spaces - - string_list_pos_params: if we are expanding `*', make sure we honor - PFLAGS including PF_ASSIGNRHS and separate the positional parameters - with the first character of $IFS - - pos_params_pat_subst,pos_params_modcase: calculate appropriate value - for PFLAGS depending on match flags value, and pass right value to - string_list_pos_params (affects @, * expansion) - - pos_params: now takes PFLAGS as argument to pass to string_list_pos_params; - changed caller +make_cmd.c + - make_here_document: account for read_secondary_line returning newly + allocated memory, free `full_line' appropriately -array.c - - array_pat_subst,array_modcase: calculate appropriate value for - PFLAGS depending on match flags value, and pass right value to - string_list_pos_params (affects @, * subscript expansion) - -array.[ch] - - array_subrange: now takes additional PFLAGS argument to pass to - string_list_pos_params - -assoc.c - - assoc_pat_subst,assoc_modcase: calculate appropriate value for - PFLAGS depending on match flags value, and pass right value to - string_list_pos_params (affects @, * subscript expansion) - STILL NEED TO DO SUBRANGE - -subst.c - - parameter_brace_substring: add PFLAGS argument to array_subrange - -arrayfunc.c - - array_keys: use string_list_pos_params instead of calling - string_list_dollar_{star,at} directly. - -arrayfunc.[ch] - - array_keys: now takes a PFLAGS argument, passes to string_list_pos_params - -subst.c - - parameter_brace_expand: add PFLAGS argument to call to array_keys - -subst.c - - parameter_brace_expand_indir: now takes a PFLAGS argument and uses it - in the call to parameter_brace_expand_word - - parameter_brace_expand: add PFLAGS argument to call to - parameter_brace_expand_indir +bashline.c + - shell_expand_line,history_and_alias_expand_line: expand $'...' and + $"..." in the line by calling expand_string_dollar_quote, since + that happens after history expansion and before alias expansion in + normal processing 3/15 ---- subst.c - - chk_atstar: now takes a PFLAGS parameter, changed callers. Will - eventually affect whether or not we saw $@ - - chk_atstar: if we see "$*" don't note that we saw $@ unless - expand_no_split_dollar_star is unset. This is what param_expand - does + - expand_string_dollar_quote: fix out-of-order initialization - 3/18 - ---- -lib/readline/misc.c - - rl_get_previous_history: if we are trying to go back from the - beginning of the history, or if we are trying to go back before the - beginning of the history, call _rl_free_saved_history_line to just - get rid of the history line we saved instead of using - rl_maybe_unsave_line, which modifies the current line buffer. - Fixes bug reported by lessbug - - 3/20 - ---- -execute_cmd.c - - execute_command_internal: save and restore line_number around - user_subshell setting it to the line number saved in the command. - Fixes bug reported in https://bugzilla.novell.com/show_bug.cgi?id=1128936 - - 3/21 - ---- -lib/sh/strtrans.c - - ansicstr: handle multibyte characters that are not preceded by a - backslash so we skip over potential escapes in characters whose - multibyte representation contains a backslash. Fixes issue reported by - Stephane Chazelas - -subst.c - - reap_some_procsubs: reap_procsubs, but parameterized to take the - max index to check -- general function for future use - - reap_procsubs: now just calls reap_some_procsubs with the right arg - -execute_cmd.c - - execute_command_internal: if we are using /dev/fd for process - substitution, reap the procsubs at the end of this function (FIFOs - do it at the beginning -- look at this more closely). Only do it - for loops to avoid fd exhaustion. Fixes bug reported by - sunnycemetery@gmail.com - - 3/22 - ---- -lib/readline/{rlprivate.h,signals.c} - - _rl_interrupt_immediately: removed as no longer used - -redir.c - - heredoc_expand: new function, called for both here-documents and - here-strings, takes care of expanding the document and returns a - string - - write_here_document: use heredoc_expand, call write(2) once on the - entire document; structure is now very similar to write_here_string - - 3/23 - ---- -redir.c - - here_document_to_fd: expand the here document/here string first, - using heredoc_expand, then decide what to do; remove calls to - write_here_document/write_here_string in favor of calling - heredoc_write directly - - here_document_to_fd: if the expanded document is of zero length, - just open /dev/null right away and return it -- idea from yash - - here_document_to_fd: if the length of the expanded document is - between 1 and PIPESIZE (pipe capacity, computed by builtins/psize.aux - and stored in builtins/pipesize.h), try to use a pipe: write - the document to the write end and return the read end. Prompted by a - report from Daniel Kahn Gillmor - -builtins/enable.def - - dyn_load_builtin: add warning if dynamic builtin with a load function - is loaded more than once, before running the load function a second - time. From a suggestion by Stan Marsh - - 3/25 - ---- -jobs.[ch] - - wait_for_any_job: takes a new argument, a struct procstat * that - gets the PID of the exited job's process leader (the one that - contributes the status) and the same status we return from the - function - -builtins/wait.def - - wait_builtin: pass a struct procstat * to wait_for_any_job to get - the pid of the job's process leader (and the same status the - function returns). We don't do anything with it yet - - 3/28 - ---- -variable.c - - seedrand: add a couple more variables to the random seed - -lib/sh/tmpfile.c - - sh_mktmpdir: new function, makes a temporary directory using - mkdtemp if it's available, and generates a filename using - sh_mktmpname (which uses mktemp, if available) and makes a - directory with it if not - -config-{top,bot}.h - - set up to use mkdtemp if available - -externs.h - - sh_mktmpdir: extern declaration - - MT_TEMPFILE: new flag for the tempfile functions; means to use the - value in the NAMEROOT argument as a template for the mktemp/mkstemp/ - mkdtemp functions. Not used in mainline shell code - -examples/loadables/mktemp.c - - mktemp: new loadable builtin, with BSD options and basic semantics - - 3/29 - ---- -builtins/common.c,builtins/printf.def - - builtin_bind_variable: moved bind_printf_variable to common.c from - printf.def, renamed to builtin_bind_variable, made global for other - builtins to use - -builtins/read.def - - bind_read_variable: now uses builtin_bind_variable - - 4/4 - --- -lib/readline/histfile.c - - history_rename: wrapper function for rename(2) to deal with the Win32 - refusal to rename over an existing file; changed callers. Bug and fix - from - - 4/8 - --- -builtins/trap.def - - display_traps,showtrap: take an additional int argument, that, if - non-zero, means to print a trap command for a signal whose disposition - is SIG_DFL - - trap_builtin: if the -p option is given, and posix mode is enabled, - pass the `show every signal' flag to display_traps so SIG_DFL signals - are displayed as `trap -- - '. From an austin-group - interpretation (1212) initiated by Robert Elz . - Tagged for bash-5.1 - - 4/9 - --- -jobs.c - - list_one_job: printing one job counts as notifying the user about - it, so add a call to cleanup_dead_jobs like in the other job display - functions. Fixes https://savannah.gnu.org/support/?109667 reported - by "Brian K. White" - - 4/10 - ---- -redir.c - - HEREDOC_PIPESIZE: define to PIPESIZE if not defined, allow it to be - specified at build time; used in here_document_to_fd to determine - whether or not a pipe is used - - HEREDOC_PIPEMAX: allow build-time definition of the max heredoc size - that will be written to a pipe - - here_document_to_fd: if F_GETPIPE_SZ is defined (Linux), ensure that - the document is shorter than the possibly-dynamic max pipe size, - and fall back to the tempfile implementation if it is not - - HEREDOC_PARANOID: if this is defined to a non-zero value, - here_document_to_fd ensures that both file descriptors opened on - the temporary file refer to the same file - -lib/sh/zmapfd.c - - zmapfd: increased the default allocation sizes - -lib/sh/zcatfd.c - - zcatfd: increased the default allocation sizes - -input.c - - localbuf: increased the default buffer size for reads - - 4/11 - ---- -subst.c - - cond_expand_word: like expand_word_unsplit, we need to peform - quoted null character removal on both the LHS and RHS of the - operator, since we are not performing word splitting. Fixes bug - reported by Matt Whitlock in https://savannah.gnu.org/support/?109671 - - 4/12 - ---- -jobs.c - - wait_for_background_pids: don't bother with the loop that waits for - and reaps all children of the shell in the case that it's inherited - some children it doesn't care about. Report from Daniel Kahn Gillmor - - - 4/14 - ---- -subst.c - - command_substitute: add an unwind-protect to make sure the read end - of the pipe gets closed in the parent on a SIGINT that interrupts - the zread. Fixes fast SIGINT fd leak reported by Tycho Kirchner - - -bashhist.c - - history_number: if enable_history_list is set (`set -o history' has - been executed), return the current history number even if we're - not currently saving commands in the history list - (remember_on_history == 0). Prompted by report from Paul Wise - - - 4/20 - ---- -doc/bash.1,lib/readline/doc/rluser.texi - - make it clear that the `bind' builtin can be used to set readline - keybindings and variables. Suggestion from Dan Jacobson - - - 4/22 - ---- -lib/glob/glob.h - - GX_SYMLINK: new internal flag denoting we are processing a symlink to - a directory. If GX_GLOBSTAR is active, we should not `descend' into - that directory - -lib/glob/glob.c - - glob_filename: if the directory portion of the pattern is `**' - (all_starstar), we have globbed all of the directories corresponding - to that pattern, and we encounter a name that is a symlink to a - directory, don't descend into it: if the filename portion is null, - return that name only; if the filename portion is non-null, skip over - it because we will pick it up when we process the `real' directory. - This is a better fix for the issue originally reported by - Murukesh Mohanan back in 4/2018 and - addresses the issue raised by Eli Schwartz - - glob_dir_to_array: slight optimization: if array[i] is the empty - string, don't bother to strcpy it or check the result for a directory - for GX_MARKDIRS support - - 4/23 - ---- -bashline.c - - test_for_canon_directory: test a pathname for a directory, but - expand and canonicalize it first using bash_filename_stat_hook() - before calling stat(2) - - bash_progcomp_ignore_filenames: strip non-directories out of a match - list, but use the function above that canonicalizes the pathname to - expand the name before testing - - bash_directory_completion_matches: use bash_progcomp_ignore_filenames - to strip out non-directories so we get consistent results between - programmable completion and tab completion. Fixes bug reported by - Ville Skyttä - -builtins/read.def - - read_builtin: allow read -e and read -u N to be used together, by - calling fdopen(fd) if fd != 0. Save and restore rl_instream. Fixes - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927768 - - 4/24 - ---- -lib/readline/input.c - - rl_getc: if readline catches SIGTSTP, the calling application must - not have had it ignored. Run the signal handler and set the signal - hook in case the application wants to handle it. Report from - Robert Elz - - 4/26 - ---- -parse.y - - parser_will_prompt: check and return true if we have consumed the - entire readline line buffer and will have to go back to readline for - more input, printing a prompt as a consequence - -eval.c - - parse_command: if parser_will_prompt() returns 0, indicating that we - still have unconsumed input in the readline line buffer, don't - execute PROMPT_COMMAND. TENTATIVE fix prompted by report from - Matteo Landi - -builtins/read.def - - set_eol_delim: save the old values before changing the bindings for - RETURN and the delimiter character, in case the delimiter is RETURN. - Fixes bug report from Stephane Chazelas - - read_builtin: if the delimiter is '\0' and we are using readline, - don't terminate the buffer and go back to read another character; - allow the NULL to pass through and terminate the read. - Fixes bug report from Stephane Chazelas - - 5/9 - --- -bashhist.c - - bash_delete_histent: decrement history_lines_this_session only if - remove_history returns a non-null history entry, and return failure - if it does return a null entry - -builtins/history.def - - history_builtin: when checking the argument to -d, display an error - if the argument is >= history_base + history_length, since that's - what history_get and remove_history check. Fixes issue reported by - - -support/shobj-conf - - hpux11: change stanza to create shared libraries on later versions of - HPUX 11. Contributed by Michael Osipov - -lib/readline/terminal.c - - _rl_init_terminal_io: assume TGETENT_BROKEN defined means that tgetent - returns 0 on success, as on HPUX 11. Bug reported by Michael Osipov - - -configure.ac - - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS - -execute_cmd.c - - select_builtin: set executing_builtin around the call to read_builtin - so we can run traps if the read call is interrupted. From a report - from Andreas Kusalananda Kähäri - - 5/12 - ---- -doc/bashref.texi - - The Restricted Shell: add some language detailing the weaknesses of - the restricted shell mode in isolation, inspired by a discussion on - the zsh mailing list - - 5/15 - ---- -xmalloc.h - - malloc: define to sh_malloc to get file and line information from - malloc (not xmalloc) calls. From a suggestion by achurch@achurch.org - (Andrew Church) - -builtins/evalstring.c - - parse_and_execute: make sure the parser is not expanding an alias - before terminating the loop that processes characters in the string. - Fixes problem with -c commands that end with an alias reported by - Yu Kou - - should_suppress_fork: make sure that we don't try to optimize out a - fork if the parser is still expanding an alias - - 5/16 - ---- -lib/readline/misc.c - - rl_get_previous_history: if previous_history() returns NULL, only - free the saved history if we were the ones who saved it; leave any - existing saved history entry alone. Fixes problem with ^N not working - at the end of the history if we previously moved back to the start - of history - -lib/readline/histfile.c - - read_history_range: when reading until FROM lines with a history - file that has timestamps, make sure to skip to the end of the command - line corresponding to the FROMth line instead of leaving line_start - pointing to it, and keep track of the start of the last timestamp in - last_ts for use by the loop below. Fix for history -n bug reported - by HIROSE Masaaki - -lib/readline/display.c - - init_line_structures: if, for some reason, _rl_screenwidth ends up - bigger than the line_size default of 1024 (e.g., gdb's setting the - terminal width to 0), make sure line_size is at least _rl_screenwidth. - From a report by Tom de Vries - - 5/17 - ---- -variables.c - - brand: split the code into a function that generates a 32-bit value - given the last value in the sequence (intrand32) and a function that - returns a 16-bit random number (brand) - - seedrand: small change in hopes of adding slightly more entropy - - brand: modify the 16-bit version to XOR the top 16 bits of the 32-bit - seed with the bottom 16 bits and return the lower 15 bits of that - result as before. Based on an analysis by Andrew Church - - - 5/18 - ---- -variables.c - - genseed: break code that generates the 32-bit seed for the RNG into - a separate function; call from seedrand - - {brand32,sbrand32,seedrand32}: new 32-bit versions of the random - number generator functions that use the entire 32-bit internal value. - Prep for systems that don't have /dev/urandom or arc4random() - - perturb_rand32: shake up the 32-bit LCRNG in subshells - - 5/19 - ---- -variables.c - - get_urandom32: get a 32-bit random number by using the first one of - these that succeeds: reading from /dev/urandom (if available), - calling arc4random (if available), and using the internal 32-bit - RNG (always available) - - SRANDOM: expand to a 32-bit random number. This is not a LCRNG, so - the numbers shouldn't have any relationship to previous returned - values. Assignments are accepted but have no effect on the sequence. - Not documented yet - - 5/20 - ---- -doc/{bash.1,bashref.texi} - - SRANDOM: document new special variable - - 5/22 - ---- -jobs.c - - find_pid_in_pipeline: abstract some code from find_pipeline to look - for a PID in a specific pipline passed as an argument - - find_pipeline: if we have some saved pipeline(s), look there to find - the PID instead of returning failure. This process could have been - started from a DEBUG trap that saved the_pipeline. Fixes Linux bug - reported by Hengyang Zhao - -builtins/bind.def - - unbind_keyseq: use rl_function_of_keyseq_len so you can unbind ^@ - (which translates to 0). Fixes bug reported by - Dennis Williamson - - 5/23 - ---- -lib/readline/display.c - - rl_redisplay: make sure that the line structures can hold up to - _rl_screenwidth characters, to support applications like gdb that - set the screen width to huge values. Report and fix from - Tom de Vries - - 5/24 - ---- -lib/readline/bind.c - - rl_generic_bind: move `ic' from block scope to function scope to - avoid problems with compilers that destroy and recreate it every - time through the loop. Report and fix from Adam Richter - - - 5/30 - ---- -jobs.c - - wait_for_job: now takes an additional struct procstat * argument, - and returns the pid and status of the job's `controlling process' - to the caller - -{jobs,nojobs}.c - - wait_for_background_pids: take a struct proctstat * argument and fill - it in with pid and status of the last process to terminate - -jobs.h - - wait_for_job, wait_for_background_pids: add additional argument to - declaration - -builtins/wait.def - - wait_builtin: set pstat.{pid,status} each time through the pid-or-job - loop and for wait without arguments - - 6/4 - --- -sig.c - - termsig_handler: clean up last_procsub_child before exiting, after - unlinking all FIFOs or closing FDs to all the pipes. Might need to - send it a SIGTERM too. Fixes issue reported by mwnx - -config-top.h - - CASEMOD_CAPCASE: no longer defined by default - - 6/5 - --- -lib/glob/glob.c - - glob_always_skip_dot_and_dotdot: new global variable, if set to - a non-zero value, no glob pattern will ever match `.' or `..'. - Disabled by default - - 6/7 - --- -bashline.c - - cmd_xmap: changes to support multiple cmd_xmaps, one per editing - mode keymap (one each for vi insert and command modes). Changes from - Koichi Murase - -execute_cmd.c - - execute_arith_command: change from expanding the expression using - expand_words_no_vars to use expand_arith_string, with the accompanying - conversion from a WORD_LIST into a string. This makes it more - consistent with other arithmetic expansions. Inspired by a - discussion begun by Nils Emmerich - - 6/10 - ---- -jobs.c - - waitchld: since process substitutions are asynchronous, save the - status of one that exits (that we still know about) in the bgpids - list - - 6/12 - ---- -jobs.c - - wait_for_background_pids: wait for the last procsub only if it's the - same as last_asynchronous_pid - -bashline.c - - bash_backward_shellword: changes to behave better when at the - beginning of the last character on the line and to leave point at - the beginning of the shellword, like backward-word. Fixes from - Andrew Gaylard - - 6/13 - ---- -bashline.c - - __P: Replaced with PARAMS. First of many - - bash_transpose_shellwords: transpose-words, but using `shellword' - word boundaries like shell-forward-word and shell-backward-word. - Contributed by Andrew Gaylard - - "shell-transpose-words": new name binding for bash_transpose_shellwords - - bash_readline_initialize: add default bindings for shell-forward-word, - shell-backward-word, shell-transpose-words, and shell-kill-word. - Suggested by Andrew Gaylard - -lib/readline/doc/rluser.texi - - shell-transpose-words: document - - {shell-forward-word,shell-backward-word,shell-kill-word,shell-transpose-words}: - document new default bindings bash now adds - -variables.c - - set_argv0: function to assign argv0 if it's found in the initial - shell environment. Suggested by Cuong Manh Le - - - initialize_shell_variables: call set_argv0() as part of shell - initialization - - 6/14 - ---- -execute_cmd.c - - execute_for_command: make sure to call stupidly_hack_special_variables - on the index variable each time bind_variable is called on it. If - someone does something nonsensical like `for OPTIND in ...' we want - the side effects to happen. Reported by Stephane Chazelas - - - execute_select_command: do the same thing for the selection variable - after calling bind_variable - - 6/15 - ---- -builtins/set.def - - unset_builtin: if neither -f nor -v is supplied, and a NAME cannot - be a shell variable because it's not a shell identifier, try to - unset a shell function whether we're in posix mode or not. Suggested - back in 1/2019 by PePa65 and Robert Elz - - -execute_cmd.c - - execute_simple_command: if this is being executed by the command - builtin (flags&CMD_COMMAND_BUILTIN), don't bother to print the - command words if set -x is enabled. From a report by Martijn Dekker - back in 4/2018 - - 6/19 - ---- -lib/glob/glob.c - - glob_filename: if we are not being called recursively, and there is - only a directory name, dequote the passed pathname and see if it - names an existing directory. If it does, return it; otherwise return - failure ((char **)&glob_error_return). This is what makes backslash - escaped-characters in pathnames in shell variables work the same as - the same value passed directly. From an anonymous comment on - https://savannah.gnu.org/support/?109629 and a discussion on the - austin-group list. - - 6/20 - ---- -pathexp.c,lib/glob/glob.c - - posix_glob_backslash: variable to control whether or not pathname - expansion handles backslashes in the pattern the way Posix says it - should. Enabled by default - -pathexp.h - - posix_glob_backslash: new extern declaration - -builtins/shopt.def - - posixglob: new option, reflects the value of posix_glob_backslash - -general.c - - posix_vars: add posix_glob_backslash to the table - - posix_initialize: set posix_glob_backslash to 1 when turning on - posix mode - - 6/21 - ---- -doc/{bash.1,bashref.texi} - - pathname expansion: note that under some circumstances the shell - will invoke the matching engine for words with unquoted backslashes - - posixglob: document the new shell option and its effects - - 6/27 - ---- -{config.h.in,configure.ac} - - setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as - appropriate - -shell.c - - disable_priv_mode: if we have setres[ug]id, use them over - set[ug]id, which only set the save user-id and group-id if the - process is running as root. From Ian Eldred Pudney - in https://savannah.gnu.org/patch/?9822 - - 6/28 - ---- -lib/glob/glob.c - - glob_vector: don't bother trying to read the directory if the filename - pattern doesn't have any globbing characters except backslash; just - dequote the pattern and try to lstat(2) it as if there were no - globbing characters at all. From an austingroup-bugs discussion - message from Stephane Chazelas - -bashline.c - - completion_glob_pattern: just call glob_pattern_p and make sure it - returns 1 (non-backslash globbing characters) - -builtins/help.def - - help_builtin: don't try pattern matching the help topic argument - unless glob_pattern_p returns 1 - -pathexp.c - - unquoted_glob_pattern_p: when in a bracket expression (open > 0), - don't allow an unquoted slash as part of the bracket expression. - Report from Stephane Chazelas - - 7/1 - --- -print_cmd.c - - print_function_def,named_function_string: make sure to call - PRINT_DEFERRED_HEREDOCS to finish printing any here documents and - delimiters before printing the function closing brace. Fixes bug - reported by Denis McKeon - -execute_cmd.c - - execute_command_internal: call reap_procsubs at the end of executing - a group command on systems that have /dev/fd. Fixes bug reported by - kfm@plushkava.net - - 7/3 - --- -jobs.c - - waitchld: this is in the potential SIGCHLD path, so don't call - bgp_add, which can potentially call malloc. The glibc malloc doesn't - handle that well. Report from howaboutsynergy@protonmail.com - - 7/5 - --- -builtins/bind.def - - bind_builtin: make sure return_code is >= 0 before returning it. - Fixes bug with bind -x and invalid key sequences reported by - bashbug@jonkmans.nl - - 7/8 - --- -doc/{bash.1,bashref.texi} - - unset: fixed up list of special variables that lose their special - properties if they are unset. Report and fix from Edward Huff - - - 7/9 - --- -test.c - - unary_test: update the `-N' test to use timespecs and nanosecond - granularity if available, and use mtime > atime instead of the - old mtime >= atime. Fixes bug reported by kfm@plushkava.net - -lib/sh/strtod.c - - strtod: make sure to use locale_decpoint() to determine the radix - character - - 7/11 - ---- -lib/sh/utf8.c - - utf8_mblen: return -2 if the UTF-8 sequence is incomplete - - utf8_mblen: 4-byte UTF-8 characters start with a byte <= 0xf4; limit - to 4-byte UTF-8 (since 5- and 6-byte code points were removed in 2003) - - 7/12 - ---- -parse.y,shell.h - - sh_input_line_state_t: if HANDLE_MULTIBYTE is defined, add members - for saving shell_input_line_property and its associated size; let - save_line_state and restore_line_state manage it. This means - restore_line_state no longer calls set_line_mbstate. From a report - from astian - -parse.y - - set_line_mbstate: if the current locale is not multibyte, just set - everything in the property array to 1 - - set_line_mbstate: use locale_utf8locale to optimize away calls to - mbrlen; just use utf8_mblen - - 7/14 - ---- -variables.c - - sv_tz: remake the export env if TZ is being unset. Fixes bug - reported by Travis Everett - -lib/readline/display.c - - rl_expand_prompt: if the prompt contains embedded newlines, compute - local_prompt_prefix before local_prompt because each call sets - local_prompt_newlines, and we want the values computed in the call - that uses local_prompt to be the ones that we use. Fixes prompt - wrapping bug reported by Tianon Gravi - - 7/16 - ---- Makefile.in - - added a number of dependencies from Vemake Vemake - as reported in - http://savannah.gnu.org/patch/download.php?file_id=47219 - - 7/19 - ---- -lib/sh/utf8.c - - utf8_mblen: changes to handle invalid multibyte sequences better, - even when N means that the sequence would be too short anyway - -arrayfunc.c - - bind_assoc_var_internal: new convenience function to assign a - key-value pair to an associative array. It gets the SHELL_VAR * AND - a HASH_TABLE *, which may or may not correspond to the assoc_cell - of the variable, and performs the insertion into the hash table. - Callers take care of passing the right values. - - bind_assoc_variable: call bind_assoc_var_internal to do the real - work - - assign_compound_array_list: change to assign associative array - key-value pairs into a new hash table (NHASH), so we can still use - the old value for expansion. We do this in place of clearing out - the contents of the associative array before performing the expansion - and assignments. After doing all the assignments into NHASH, we swap - NHASH into the variable as its value and dispose of the old value. - Fixes inconsistency reported by Darren 'Tadgy' Austin - - - 7/20 - ---- -aclocal.m4 - - include bashansi.h in a bunch of AC_TRY_RUN recipies to avoid - exit() being flagged as an implicit declaration. Report and fix - from Chris Yungmann - -shell.c - - set_exit_status: set last_command_exit_value to the argument and make - sure to set PIPESTATUS from that exit value - -shell.h - - set_exit_status: extern declaration + - {TAGS,tags}: add ETAGS/ETAGSFLAGS/CTAGS/CTAGS flags; make sure to + cd to the source directory before running them to get source files + that don't have absolute paths. Fix from Mike Jonkmans + parse.y - - report_syntax_error: make sure to set PIPESTATUS if we set - last_command_exit_value on a syntax error - - parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS - when we set last_command_exit_value + - xparse_dolparen: don't longjmp if FLAGS includes SX_NOLONGJMP. From + a report by Xu Lu -sig.c - - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set - last_command_exit_value - -variables.c - - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value - -arrayfunc.c - - find_or_make_array_variable,array_expand_index,assign_compound_array_list: - call set_exit_status to set PIPESTATUS and last_command_exit_value - -builtins/evalstring.c - - parse_and_execute: set PIPESTATUS when we set last_command_exit_value - -braces.c - - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value - -eval.c - - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value - -make_cmd.c - - set PIPESTATUS when setting $? due to syntax errors or constructs - not being available - -expr.c - - expr_streval: set PIPESTATUS when setting $? due to syntax errors - -subst.c - - extract_delimited_string,extract_dollar_brace_string,do_assignment_internal, - call_expand_word_internal,array_length_reference,param_expand, - parameter_brace_expand_word,parameter_brace_expand_rhs, - parameter_brace_expand_error,parameter_brace_expand,err_unboundvar: - set PIPESTATUS when setting last_command_exit_value on error - conditions - -redir.c - - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value - on error conditions - -subst.c - - match_upattern,match_wpattern: if the match length is greater than the - string length, short-circuit and return failure. Fixes bug - reported by Eduardo Bustamante - - 7/22 - ---- -lib/glob/sm_loop.c - - BRACKMATCH: if we think we've matched, tighten up the rules for - the closing right bracket in the bracket expression to be correct - in the presence of invalid character classes, collating symbols, - and equivalence classes. If they're invalid, they shouldn't require - additional right brackets to close them - - 7/25 - ---- -builtins/colon.def - - add the right includes so colon_builtin and false_builtin can take - a WORD_LIST * argument like the prototype says they do - - 7/29 - ---- -lib/readline/kill.c - - _rl_read_bracketed_paste_prefix: read the character prefix that - indicates a pasted string in bracketed paste mode. If we don't - read a valid bracketed paste prefix, push the other characters - back onto the input stack with _rl_unget_char - - _rl_bracketed_read_key: handle reading pasted input when bracketed - paste mode is enabled, including reading multibyte characters; push - anything beyond a single byte back onto the input stack where it - can be read by _rl_read_mbstring or subsequent input - - _rl_bracketed_read_mbstring: handle reading pasted input in bracketed - paste mode, using _rl_bracketed_read_key to get the pasted text, - then call _rl_read_mbstring to get the rest of any multibyte char - - -lib/readline/vi_mode.c - - _rl_vi_callback_getchar: call _rl_bracketed_read_mbstring to handle - bracketed paste mode input. Fixes issue with vi-change-char reported - by - - rl_vi_domove_getchar: just call _rl_bracketed_read_key and return - the result -- we're not interested in multibyte-character input here - yet - - rl_vi_replace: bind BRACK_PASTE_PREF key sequence if bracketed paste - mode has been enabled - - _rl_overstrike_bracketed_paste: key binding function for the bracketed - paste prefix key sequence in overwrite mode; reads the pasted text - and uses rl_vi_overstrike to add each character in overwrite mode. - Fixes issue reported by - - 7/31 - ---- -lib/readline/input.c - - _rl_read_mbchar: the first time through the loop (mb_len == 0), call - _rl_bracketed_read_key to process any bracketed paste characters - -lib/readline/text.c - - _rl_char_search: use _rl_bracketed_read_key in the non-multibyte - character case - -lib/readline/misc.c - - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key - -subst.c - - list_string: if string_extract_verbatim returns something, just make - a WORD_DESC * and add current_word directly to it, noting that we - don't want to free current_word (free_word = 0) - - string_extract_verbatim: if the separator string is the empty - string, don't bother with the loop -- just savestring the string, - update *sindex, and return the copy - - read_comsub: make the string we use to save the output from the pipe - 512 bytes instead of 128 (same size as the buffer used to read from - the pipe); fewer calls to xrealloc in the worst case - - parameter_brace_expand_length: optimize the common case (non-dynamic - scalar variable without `set -u' in effect) and just call MB_STRLEN - on the variable value in that case. From a report from - Alkis Georgopoulos - - 8/13 - ---- -execute_cmd.c - - execute_subshell_builtin_or_function: call subshell_exit() instead of - sh_exit() or exit() so the exit trap gets run. Fixes issue reported - in https://savannah.gnu.org/support/?109840 - - replace __P with PARAMS - -lib/readline/colors.c - - _rl_print_color_indicator: eliminate one use of S_ISLNK. - Report and fix from Christian Biesinger - - 8/22 - ---- -variables.c - - push_posix_temp_var: change to use bind_variable and modify variables - at the current local scope or create and modify variables at the - global scope, as if a standalone assignment statement had been - executed. This restores some bash-4.4 backwards compatibility with - respect to posix-mode assignment statements preceding special - builtins and shell functions. The bash-5.0 behavior, while perhaps - defensible, caused too many compatibility problems. Originally - prompted by several discussions with Martijn Dekker; the current - incarnation and tests based on a report to Debian BTS from - Thorsten Glaser - - 8/26 - ---- -shell.c,bashhist.c - - __P -> PARAMS - -shell.c - - set_option_defaults,reset_option_defaults: before calling - list_minus_o_options at invocation, call set_option_defaults to - set the options that are initialized to -1 to either 1 or 0, as - appropriate; then call reset_option_defaults to set them back to -1 - after list_minus_o_options returns - - init_interactive: if enable_history_list == -1, set it to 1, then - set remember_on_history to enable_history_list. Fixes bug reported - by Alex Kerzner - - init_noninteractive: if enable_history_list == -1, set it to 0, let - bash_history_reinit take care of setting remember_on_history - - init_interactive_script: if enable_history_list == -1, set it to 1, - then set remember_on_history to enable_history_list - -bashhist.c - - enable_history_list: initialize to -1 to note when it gets changed - by -o history or +o history at invocation - - 8/28 - ---- -lib/readline/terminal.c - - TGETENT_SUCCESS, TGETFLAG_SUCCESS: defines to represent successful - returns from tgetent and tgetflag, since HPUX manages to get them - wrong. New patch from Osipov, Michael - - TGETFLAG: new define, make sure tgetflag returns TGETENT_SUCCESS - - _rl_init_terminal_io: use TGETENT_SUCCESS and TGETFLAG - -configure.ac - - hpux: make sure to define TGETFLAG_BROKEN - - 8/30 - ---- -tests - - add copyright notices to all scripts longer than 15 lines at the - request of the FSF - - 9/1 - --- -lib/readline/complete.c - - _rl_complete_internal: move logic that checks whether the last - completion attempt failed and the current attempt returned a single - match and insert the single completion here. A better implementation - of Richard Stallman's suggestion of 2/23. - - 9/3 - --- -bashline.c - - edit_and_execute_command: reset the readahead token after calling - restore_parser_state, in case some call to reset_parser set - token_to_read. Fixes bug reported by null - - 9/9 - --- -execute_cmd.c - - execute_command_internal: if we're executing a command list - (executing_list != 0), save the old fifo list and close any new - FIFOs that the command opens. Fixes bug reported by - Kamil Cukrowski - - 9/10 - ---- -aclocal.m4,m4/intdiv0.m4 - - make sure `exit' is used consistently with included - - make sure `main' isn't declared to implicitly return int - - include before using ulimit - - include before testing string functions - - fixes from Florian Weimer - -configure.ac - - setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL, - which always fails - -shell.c - - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of - the HAVE_DECL variants, which always fail configure tests - -m4/intl.m4 - - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in - newer gettext releases - - 9/16 - ---- -builtins/help.def - - help_builtin: make the closing quote printed after the argument list - for a glob pattern argument a translatable string to ease translation - for certain languages. Report from Roland Illig - -builtins/{reserved,complete,exec,getopts}.def - - minor typographical fixes from Roland Illig - -siglist.c - - include general.h for INT_STRLEN_BOUND - - initialize_siglist: use the same string for the strlen and xmalloc - for the message about an unknown signal number; use INT_STRLEN_BOUND - instead of a fixed 10 for the number - -builtins/getopts.def,doc/{bash.1,bashref.texi} - - getopts: minor changes to the description of the effect of supplying - additional arguments. Report from Roland Illig - - 9/17 - ---- -jobs.[ch] - - save_proc_status: external interface to bgp_add, takes care of - blocking and unblocking SIGCHLD - - __P -> PARAMS - - 9/18 - ---- -jobs.[ch] - - procsub_{free,add,search,delete,waitpid,waitall,clear,prune}: new - functions to keep track of the list of active process substitutions - and their statuses. Implementation is currently a singly-linked list - of PROCESS *, so functions that expect a PROCESS * to manipulate - continue to work. Inspired by report from leo.dalecki@ntymail.com - - find_pipeline,cleanup_dead_jobs,wait_for_background_pids: call new - procsub_* functions to manage procsub list; don't call the functions - in subst.c any more - -subst.c - - process_substitute: call procsub_add with the PROCESS * returned - from make_child; let the functions in jobs.c manage the list. - waitchld continues to set the pid field in the fifo list as a hint - that a particular fd or FIFO is no longer used and can be reaped - - process_substitute: let the child process clear out any existing - procsub pid list - - wait_procsubs: no longer compiled in - -sig.c - - termsig_handler: replace discard_last_procsub_child with call to - procsub_clear - -lib/readline/display.c - - init_line_structures: fix a problem which results in references to - uninitialized memory when gdb sets the number of columns to 32767 - (their `unlimited'). Modification of change from 5/23. Report and - fix from Andrew Burgess - - 9/19 - ---- -parse.y - - xparse_dolparen: after calling parse_string to consume input, make - sure to reset the parser (reset_parser()) before restoring the EOF - token and the parser_state variable. Fixes issue with nested traps - running command substitutions in command lines with command - substitutions reported by Travis Everett - - 9/20 - ---- -doc/{bashref.texi,bash.1} - - fixed a typo in the example for the =~ operator: the ? should follow - the (a), not precede it. Report from hk - - some changes to the text describing regular expression matching for - the =~ operator - - 9/25 - ---- -general.c,builtins/shopt.def - - posix_glob_backslash: remove references to this variable and the - `posixglob' shell option - -doc/{bash.1,bashref.texi} - - remove references to the `posixglob' shell option - - 9/26 - ---- -{jobs,nojobs}.c - - DEFAULT_MAX_CHILD: bump this up to 4096 - - set_maxchild: set lmaxchild to MAX_CHILD_MAX if getmaxchild returns - -1 without changing errno (assume that sysconf returns -1 meaning - unlimited) - - initialize_job_control: call set_maxchild instead of inline code - - mark_dead_jobs_as_notified: call set_maxchild to set js.c_childmax - if it hasn't been set yet - - 9/30 - ---- -lib/glob/xmbsrtowcs.c - - xwcsrtombs: implementation of wcsrtombs from gnulib, modified to - treat invalid wide characters (or wide characters that can't be - converted to multibyte character sequences) as bytes. Should be - used only in unusual circumstances where wcsrtombs fails. - -lib/glob/glob.c - - wdequote_pathname: if wcsrtombs fails to convert the dequoted wide - character pathname back to a sequence of multibyte characters, call - xwcsrtombs to try to treat the invalid wide characters as bytes -- - the call to xdupmbstowcs treats bytes that don't convert to wide - characters as just bytes, which kind of causes this problem in the - first place. Inspired by report from Geoff Kuenning - -lib/readline/complete.c - - compute_lcd_of_matches: use the case-folding code (which performs - character-by-character checking and compares invalid multibyte - sequences as bytes) instead of the old case-sensitive code (which - used _rl_compare_chars), converting characters to lowercase as - needed. Fixes bug with invalid sequences in common filename prefixes - reported by Grisha Levit - - 10/1 - ---- -builtins/shopt.def - - reset_shopt_options: add in resets for some missing shopt options. - Report and fix from Grisha Levit - -execute_cmd.c - - execute_command_internal: make sure a failed attempt to define a - shell function causes the shell to exit if -e is enabled. Report - from Andreas Kusalananda Kähäri - - execute_command_internal: combine cm_function_def, cm_arith, and - cm_cond cases into one switch case, since the code is virtually - identical across all three - - 10/3 - ---- -pathexp.[ch],lib/glob/glob.c,lib/glob/glob_loop.c - - remove all references to posix_glob_backslash in preparation for - implementing austin group interpretation #1234 - -pathexp.c - - unquoted_glob_pattern_p: revert to bash-4.4 behavior of returning 1 - only if there is an unquoted `*', `?', or bracket expression, as - per austin group interpretation #1234 - -lib/glob/glob_loop.c - - INTERNAL_GLOB_PATTERN_P: revert to bash-4.4 behavior of returning 1 - only if there is an unquoted `*', `?', or bracket expression, as - per austin group interpretation #1234 - - 10/4 - ---- -variables.c - - assign_seconds,get_seconds: use the tv_sec value returned from - gettimeofday() instead of time() to get a better approximation of - the number of seconds since the epoch for future calculations. - From a report by Stephane Chazelas - -pathexp.[ch],{bashline,subst}.c - - shell_glob_filename: now takes an additional flags argument to pass - to quote_string_for_globbing - - 10/6 + 3/16 ---- subst.c - - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC - because quote removal hasn't been performed yet - - 10/7 - ---- -pathexp.c - - quote_string_for_globbing: if we have an unquoted backslash followed - by a CTLESC-quoted character (not CTLESC-CTLESC), just perform the - usual CTLESC-to-backslash conversion instead of skipping over it. - Fixes issue raised in austin-group discussion about globbing by - Geoff Clare (austin-group issue 1234), though - it's still inherently ambiguous - - 10/8 - ---- -include/shmbutil.h - - xwcsrtombs: extern declaration, to match other functions in that file - -lib/glob/glob.c - - wcdequote_pathname: new function, actual backslash quote removal code - from wdequote_pathname; wdequote_pathname calls it - -lib/glob/glob.c - - {udequote,wcdequote}_pathname: now public void functions - -lib/glob/smatch.c - - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or - wcdequote_pathname - -lib/glob/sm_loop.c - - DEQUOTE_PATHNAME: appropriate extern declaration - - BRACKMATCH: call DEQUOTE_PATHNAME to dequote a character class name - in a bracket expression. This is the result of a discussion on the - austin-group mailing list, from Geoff Clare and - Robert Elz - - 10/10 - ----- -execute_cmd.[ch] - - async_redirect_stdin: now a global function - -subst.c - - process_substitute: call async_redirect_stdin in the child to keep - it from having stdin connected to the terminal, since it's not a - job control process - - 10/11 - ----- -subst.c - - process_substitute: in the child process, set interactive = 0, since - an asynchronous process substitution process is not interactive. - Seems to fix issue reported by Grisha Levit - -lib/sh/shmatch.c - - sh_regmatch: implement a suggestion from Grisha Levit - and don't allow nocaseglob to enable case- - insensitive regexp matching. It hasn't been documented that way - in years - - 10/30 - ----- -bashhist.c - - bash_add_history: fix a couple of problems with adding extra blank - lines to history entries containing here-documents. Fixes bug - reported by Oguz - -lib/sh/shmatch.c - - BASH_REMATCH: no longer set to readonly. From a suggestion from - Rocky Bernstein - -doc/{bash.1,bashref.texi} - - BASH_REMATCH: document that it's no longer set to readonly - -subst.c - - getpattern: since expand_string_for_pat leaves the pattern quoted, - we need to remove quoted nulls before running the string through - string_list (and then quote_string_for_globbing, since QGLOB_CVTNULL - only handles pat[0] == CTLNUL). Fixes bug reported by Oguz - - - 11/4 - ---- -configure.ac,config.h.in - - AC_HEADER_MAJOR: look for `major' and `minor' in various header files - and define MAJOR_IN_MAKEDEV or MAJOR_IN_SYSMACROS as appropriate. - From a patch from Eli Schwartz - -examples/loadables/finfo.c - - include and as appropriate for - definitions of major/minor - - 11/6 - ---- -redir.c - - heredoc_expand: if we are expanding the WORD in a here-string, use - expand_assignment_string_to_string so the expansions are consistent - in contexts where word splitting is not performed. From a bug report - by Robin A. Meade - - 11/7 - ---- -parse.y - - xparse_dolparen: if the command substitution is incomplete or doesn't - end in `)', print an error message instead of allowing EOS to - terminate the comsub. From a bug report from - Oguz - - 11/11 - ----- -lib/sh/unicode.c - - u32toutf8: fix a typo that assigned the wrong value to the first - byte of a six-byte UTF-8 character. Report and fix from - István Pásztor - - 11/15 - ----- -doc/bash.1,lib/readline/doc/{history.3,hsuser.texi} - - quick substitution: make it clear that ^s1^s2^ is equivalent to - !!:s^s1^s2^, since that's the internal transformation we perform. - Reported by Jim Monte - - note that the `q' and `x' modifiers are mutually exclusive; last - one wins. Reported by Jim Monte - - note that the `G' modifier can work with `&' as well as `s'. - Reported by Jim Monte - - note that a word designator of `-' is equivalent to `0-'. - Reported by Jim Monte - - note that a missing `new' in a substitution modifier causes - instances of `old' to be deleted - -lib/readline/histexpand.c - - history_expand_internal: make multiple :p modifiers work to suppress - execution. Reported by Jim Monte - - get_history_word_specifier: fix so a `^' word designator works as - the second part of a range. - Reported by Jim Monte - - hist_error: make sure we don't blindly copy a null character into - the error string (e.g., if there is a missing word designator - following `:'). Reported by Jim Monte - - get_history_event: if the history event specifier (!) is followed - immediately by a `-' and a non-digit (e.g. !-a), make sure the - is - treated as part of a search string instead of making it an offset of - 0. Reported by Jim Monte - - 11/19 - ----- -lib/readline/{colors,complete,histfile,input}.c,support/shobj-conf - - fixes to make readline compile on the latest HPE Nonstop (Tandem) - releases. From Randall S. Becker - -subst.c - - pat_subst: if we have a null match, make sure we advance by one - character, not one byte. Bug reported by Chris Carlen - - - 11/22 - ----- -jobs.[ch],nojobs.c,builtins/jobs.def - - get_job_by_pid: now takes a PROCESS ** third argument; if non-null, - it gets a pointer to the PROCESS struct corresponding to the PID - argument. A convenience, not used by any caller yet - -builtins/wait.def - - interrupt_immediately: remove any uses, no longer used anywheren - -variables.c - - check_unbind_variable: return -2 if the variable name is readonly - (change) or non-unsettable (new) to differentiate the return value - from -1 from makunbound (which means variable not found) - -builtins/common.[ch] - - builtin_unbind_variable: identical to check_unbind_variable but calls - builtin_error; for use by builtin commands - -buitins/wait.def - - wait_builtin: now has -p VARNAME option, which takes the pid - returned by `wait -n' or wait without arguments and assigns it to - VARNAME, unsetting VARNAME first. Requested by Robert Elz - after a similar feature in netbsd sh (not - completely compatible yet) - -doc/{bash.1,bashref.texi} - - wait: document new -p option - - 11/25 - ----- -lib/readline/display.c - - rl_redisplay: auto-set horizontal scrolling if the terminal has - only one line; disable it if we auto-set it if the terminal grows - to more than one line. Fix from Sören Tempel - - -lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 - - horizontal-scroll-mode: document auto-setting behavior - -builtins/set.def - - set_posix_mode: make setting posix mode when it's already set, or - unsetting it when it's not set, a no-op. Inspired by a report - from Ulrich Mueller - - 11/26 - ----- -doc/{bash.1,bashref.texi} - - functions: clarify that when in default mode, function names are not - limited to shell identifiers. - Suggested by Reuti - - 11/27 - ----- -lib/readline/display.c - - _rl_optimize_redisplay: tell the redisplay routines to not worry - about calculating differences between the lines and just draw the - new one. Right now, it just sets the _rl_quick_redisplay flag - - rl_redisplay: if _rl_quick_redisplay is set, just draw NEW onto - the screen at column 0 with a dumb update and clear the rest of - the line. Intended to be used when the caller knows the new line is - sufficiently different from the old one (e.g., when drawing the - i-search prompt for the first time) that it doesn't pay off to do - the calculations. As a side effect, fixes the bug reported by - лекей Шилин - -lib/readline/isearch.c - - rl_display_search: if there isn't a search string, assume this is - the first time this is called and call _rl_optimize_redisplay to - give the redisplay code a hint - - 12/2 - ---- -builtins/wait.def - - wait_builtin: allow argument to -p to be a valid array subscript - - 12/3 - ---- -lib/readline/isearch.c - - _rl_isearch_fini: add call to _rl_optimize_redisplay because we are - switching the prompt back again and it's safer to redraw everything - (even though part of the line is the same) to deal with differences - in the prompt strings. Fixes additional problem reported by - лекей Шилин - -lib/readline/display.c - - update_line: quick redisplay no longer sets cpos_adjusted before - the dumb update - - update_line: adjust _rl_last_c_pos in the case of a dumb update if we - are redrawing the prompt that includes invisible characters, since - _rl_col_width does not. We adjust by the count of invisible chars in - the first line of the prompt - - update_line: make sure to clear the rest of the line if it looks like - the number of visible characters on the new line is less than the - number of visible characters on the current line; the old calculation - does that just for the number of bytes (which is also useful) - - 12/4 - ---- -lib/readline/display.c - - rl_redisplay: if we are changing from one line to multiple lines, - don't try quick redisplay - - update_line: changes to quick redisplay to take advantage of knowing - the physical length of the prompt to avoid having to compute column - widths of the prompt string again; moved code to call clear screen - to the quick update section; no longer performs `goto dumb_update' - - update_line: try to take advantage of prompt_physical_chars when we - know we have written the prompt string (several places) to set - _rl_last_c_pos and calculate column widths - - update_line: if the spot where the old and new lines are the same is - before the end of the prompt string, adjust NLS and OLS so we write - the entire prompt string (as long as it's all on one line) and can - take advantage of already knowing prompt_physical_chars so we don't - have to compute column widths - - update_line: when copying chars from first diff to last match, adjust - _rl_last_c_pos by prompt_invis_chars_first_line, not wrap offset, - since we are on the first line, and only do this if we inserted more - bytes than wrap_offset (old code checked _rl_last_c_pos, which is - wrong in the presence of multibyte characters) - - 12/5 - ---- -lib/readline/display.c - - ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos - is changed - - 12/12 - ----- -lib/readline/isearch.c - - _rl_isearch_dispatch: check for multibyte characters mapped to one - of the editing functions we treat specially to modify the search - string - - 12/13 - ----- -support/shobj-conf - - FreeBSD and Dragonfly are ELF-only and can use the same code as - Linux, so add those to the linux stanza and remove the old FreeBSD - version-specific sections. Report and fix from Baptiste Daroussin - - -bashline.[ch] - - bash_execute_unix_command: no longer static, available for other - parts of the shell to use + - process_substitute: set startup_state and parse_and_execute_level + to see if we can avoid a fork() bashline.c - - unbind_unix_command: take a key sequence as an argument, and unbind - it in the appropriate unix command keymap + - bash_spell_correct_word: bindable command (spell-correct-word) to + perform spelling correction on the current `shellword', using the + same code as the `cdspell' option and directory spelling correction + during completion. Feature suggested by in 10/2020 by + Karl Kleinpaste + - bash_spell_correct_word: bound to "C-x s" by default in emacs mode -builtins/bind.def - - unbind_keyseq: if we are unbinding a key sequence bound to - bash_execute_unix_command, which means it was added by `bind -x', - call unbind_unix_command() to remove it from the appropriate unix - command keymap. Fixes issue originally raised by - Koichi Murase and recently by - Šimon Let - - bind_builtin: check the number of bindings to bash_execute_unix_command - before and after a call to rl_parse_and_bind and if there are fewer - after binding, we know that the bind has re-bound one of the key - sequences that was bound to execute a shell command. We unbind any - key sequences from the list before the call to rl_parse_and_bind that - don't appear in the list after the call using unbind_unix_command - - 12/19 - ----- -include/posixstat.h - - added some definitions for MinGW. Report and patch from - Eli Zaretskii - - 12/20 - ----- lib/readline/display.c - - update_line: when wrapping lines containing multibyte characters at - the wrap point, and the number of screen positions consumed by the - first character on the new line isn't the same as the old line, - make sure we set OE before the `goto dumb_update;' since clearing - the rest of the line may use it. Tentative fix for bug reported by - Kirill Chibisov + - rl_redisplay: fix redisplay problem that occurs when switching from + the rl-digit-argument prompt "(arg: N)" back to the regular prompt, + and the regular prompt contains invisible characters -lib/readline/signals.c - - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code, - like _rl_handle_signal does - - 12/26 - ----- -lib/sh/stringvec.c - - strvec_posixcmp: new function that conforms to posix requirement for - sorting globs: perform a bytewise comparison if the two strings - collate equally. Posix interp 963 and 1070 - - strvec_sort: take a new flags argument, if non-zero use the posix - string comparison function - -pathexp.c - - shell_glob_filename: call strvec_sort with the flag value to be - posix conformant - -lib/sh/stringlist.c - - strvec_sort: change callers - - 12/29 - ----- -sig.c - - throw_to_top_level: set running_trap to 0 after calling run_trap_cleanup. - This avoids spurious (in non-release versions) warnings from - run_pending_traps the next time a trap handler for that signal - runs. Bug report from Martijn Dekker - - 1/14/2020 - --------- -bashline.c - - find_cmd_start: don't treat the open brace in brace expansion as a - command start character; only treat open brace specially if it can - be a reserved word. Fixes bug reported back in October, 2019 in - https://savannah.gnu.org/support/index.php?110063 - - 1/15 - ---- -lib/readline/readline.c - - _rl_dispatch_subseq,_rl_subseq_result: if we push back a character - with _rl_unget_char or otherwise go back up the chain without a - sequence match, make sure we back up in rl_executing_keyseq. - Report and fix from Koichi Murase - -builtins/bind.def - - unbind_keyseq: if we unbind something that ends up pointing to a - shadow keymap, restore the ANYOTHERKEY binding that we used when - binding it. - Report and fix from Koichi Murase - -bashline.c - - bash_execute_unix_command: if we walked cmd_xmap for rl_executing_keyseq - and ended up pointing to a keymap (type == ISKMAP) we want the - binding for ANYOTHERKEY instead. - Report and fix from Koichi Murase - -lib/readline/bind.c - - rl_bind_key: if we're trying to bind a key sequence containing '\0' - using the old-style binding syntax (C-SPC), make sure we quote the - NULL so it will make it through rl_translate_keyseq(). - Report and fix from Koichi Murase - - rl_bind_key: if we're overwriting a binding for a macro, make sure to - free the old macro value. - Report and fix from Koichi Murase - - rl_generic_bind: if we're overwriting a macro saved to ANYOTHERKEY in - a shadow keymap created by rl_generic_bind, make sure to free the - macro data. - Report and fix from Koichi Murase - -trap.c - - run_pending_traps: save and restore the value of running_trap around - cycle through pending signals so recursive trap handler calls don't - set running_trap to 0 - - _run_trap_internal: allow some signals the shell treats specially - (e.g., SIGINT) to run recursive handlers - - _run_trap_internal: don't turn off SIG_INPROGRESS flag if it was on - for this signal when _run_trap_internal was called - - _run_trap_internal: save and restore the value of running_trap around - running the trap handler, except for SIGCHLD. Fixes bug reported by - Martijn Dekker - - 1/16 - ---- -general.c - - posix_initialize: if turning posix mode off, restore settings from - any saved set, if one exists, instead of setting a default environment - - 1/17 - ---- -parse.y,subst.c - - process_substitution: now available in POSIX mode. Most recently - requested by Martijn Dekker ; requested several - times in the past - -doc/bashref.texi - - posix mode: remove restriction that posix mode is not available - -lib/readline/vi_mode.c - - rl_domove_motion_callback: make sure to extend rl_line_buffer so it - can hold the dummy blank character we're appending. From a fuzzing - report by Tillmann Osswald - - vi_yank_dispatch: after we do an undo, make sure to fix point to be - less than the (new) rl_end - -lib/readline/text.c - - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on - invalid multibyte sequences - - 1/18 - ---- -test.c - - for the `-v' operator, use a clever trick from Martijn Dekker and - just test whether N is between 0 and $#. - - 1/21 - ---- -lib/readline/text.c - - rl_change_case: fix argument to rl_extend_line_buffer; make sure to - reset s and e after call in case rl_line_buffer was reallocated - -lib/readline/vi_mode.c - - _rl_vi_save_replace: if start ends up being less than zero, make - sure we don't read before the start of rl_line_buffer - - rl_vi_overstrike_kill_line,rl_vi_overstrike_kill_word: replacement - functions for ^U and ^W in vi overstrike mode, to keep right value - for vi_replace_count. - - rl_vi_overstrike_yank: similar for ^Y and rl_yank - - 1/22 - ---- -lib/readline/display.c - - update_line: if we're trying to wrap lines on an autowrap terminal, - punt and do a dumb update if the number of bytes in the first char - on the new line is greater than the number of bytes in the first char - of the old line. There's no guarantee we'll be able to extend the - old line buffer enough to accommodate the new bytes - - update_line: try to avoid some operations when wrapping lines if the - number of bytes in the first characters of the old and new lines is - the same - - update_line: when updating vis_lbreaks after fixing up the lines when - wrapping, make sure we don't exceed an index of _rl_vis_botlin when - updating the line break offsets - -lib/readline/text.c - - rl_delete_text: if deleting text leaves the mark past rl_end, adjust - it to rl_end - -lib/readline/vi_mode.c - - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting - rl_point to rl_mark - - 1/23 - ---- -lib/readline/kill.c - - rl_kill_region,region_kill_internal: call _rl_fix_point - -lib/readline/text.c,lib/readline/rlprivate.h - - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end - - 1/24 - ---- -lib/readline/bind.c - - rl_translate_keyseq: rework how key sequences are translated with - the intent of normalizing backslash treatment. Since the current - behavior of, e.g., \C-\\, is inconsistent, this change chooses to - effectively treat and display \\ as \\ instead of \C-\. This is not - completely backwards compatible, but it seems like the most reasonable - choice. This allows things like \M-\a but is not compatible with - pre-bash-4.4 (readline 7.0) handling of \C-\, which is now treated - like \C-\0. If that proves to be a problem, we can add code to - understand \C-\ as equivalent to \C-\\. Since attempting to bind - "\C-\" has generated an error for a long time, it doesn't seem like - it will be too much of a problem. - Fixes from Koichi Murase - - rl_invoking_keyseqs_in_map: make sure to consistently output - backslash as `\\' instead of producing `\C-\' - Fixes from Koichi Murase - - 1/29 - ---- -bashline.c - - readline_get_char_offset: translate a readline buffer offset - (rl_point, rl_mark, rl_end) into a number of (possibly multibyte) - characters - - readline_set_char_offset: translate a number of (possibly multibyte) - characters into a buffer offset in rl_line_buffer. Uses a private - readline function to do it, which is bad - - bash_execute_unix_command: use readline_{get,set}_char_offset to - translate the rl_point to a character offset - - bash_execute_unix_command: bind READLINE_MARK variable, exposing - the value of rl_mark to `bind -x' functions - -doc/{bash.1,bashref.texi} - - READLINE_MARK: document new variable set by the shell - - 1/31 - ---- -examples/loadables/accept.c - - accept: new loadable builtin that will accept a TCP connection on a - specified port. Inspired by Stan Marsh - - 2/1 - --- -lib/readline/histfile.c - - history_do_write,history_truncate_file: translate the return value rv - to errno when histfile_restore returns -1 (e.g., if rename() fails). - Report and fix from A - - 2/3 - --- -lib/sh/ufuncs.c - - fsleep: if pselect/select is interrupted by a signal, return -1 and - let the caller deal with it - -lib/sh/timeval.c - - multimeval: new function, multiply a timeval by a constant integer - - divtimeval: new function, divide a timeval by a constant integer - -lib/sh/uconvert.c - - uconvert: new additional argument: EP. If non-null, it gets the - address of the first non-digit that ends conversion (like strtod); - we try to do as much of the conversion as possible if EP is set so - the caller can clean up - - 2/4 - --- -examples/loadables/mkfifo.c - - mkfifo: new loadable builtin - - 2/6 - --- -variables.c - - make_local_variable: make sure local variables that have the same - names as variables found in the temporary environment are marked as - local. From Grisha Levit back in 12/2018 - - 2/7 - --- -sig.[ch] - - restore_sigmask: function to restore top-level signal mask using - sigprocmask - -{sig,eval,jobs,nojobs}.c - - replace calls to sigprocmask with restore_sigmask(); remove extern - declarations of top_level_mask - -sig.c - - initialize_shell_signals: if SIGCHLD is blocked at shell startup, - not only remove it from top_level_mask but make sure it's unblocked - -execute_cmd.c - - execute_pipeline: if lastpipe is enabled and we're executing the - rightmost pipeline element in the current shell, make sure to unblock - SIGCHLD before calling execute_command, in case `return' or `exec' - is run and that call doesn't return. From a report by - Harald van Dijk following up to a report - by Martijn Dekker - - 2/10 - ---- -builtins/trap.def - - trap_builtin: in posix mode, when trap is run with -p, show - the disposition of all signals, even those that are still in the - default state, including signals that were ignored when the shell - starts up and haven't been reset. Don't do it in default mode. - From an austin-group discussion back in April, 2019 (interp 1211) - -findcmd.c - - search_for_command: don't add commands without the execute bit set - to the command hash table. From https://savannah.gnu.org/patch/?9789 - contributed by michaeljs1990 - - 2/11 - ---- -expr.c - - strlong: require `base#' to be followed by an integer constant; - otherwise throw an error. From a report from Jeremy Townshend - back in June, 2019 - -test.c - - unary_test: allow -v N to test whether or not positional parameter - N is set. Most recently suggested by Peng Yu - and Martijn Dekker - -builtins/getopts.def - - dogetopts: use number_of_args() to compute the number of positional - parameters - -{findcmd,variables,subst,trap,sig}.h,builtins/common.h - - __P --> PARAMS - -builtins/shift.def,builtins/common.c - - shift_builtin: moved code that modifies dollar_vars and rest_of_args - to common.c:shift_args(int times), part of move to localize changes - to positional parameters - -builtins/common.c,variables.c - - posparam_count: keep a running count of the number of posititional - parameters when dollar_vars and rest_of_args are set - - 2/12 - ---- -subst.c - - number_of_args: just return posparam_count - -builtins/shift.def - - shift_builtin: if asked to clear the positional parameters with - something like `shift $#', just call clear_dollar_vars instead of - iterating through them, unsetting them one by one - -subst.[ch],builtins/common.[ch] - - number_of_args: moved to builtins/common.c - - 2/14 - ---- -subst.c - - clear_fifo_list: when using named pipes, clear out the FIFO list - without unlinking anything and set NFIFO to 0 - -execute_cmd.c - - execute_disk_command: in the child, clear out the FIFO list, since - we haven't created any FIFOs yet - - execute_in_subshell: clear out the FIFO list, since we haven't - created any FIFOs yet - -parse.y - - special_case_tokens: allow `time -- command' - - 2/21 - ---- -subst.c - - get_var_and_type: if an unset variable (not an array) is supplied - with the `[@]' subscript, don't return "". Fix to bug reported by - Arfrever Frehtes Taifersar Arahesis ; - original bug introduced 7/29/2018 - - array_transform: take a STARSUB argument instead of VARNAME, since - we've already computed what kind of index the array reference uses - in get_var_and_type, and passing VARNAME to figure out the index - type doesn't do the right thing when we're using indirect variable - expansion. Fixes bug reported by - Arfrever Frehtes Taifersar Arahesis - - array_remove_pattern: take the same new STARSUB argument for the - same reason - - parameter_brace_transform,parameter_brace_remove_pattern: change - callers to pass STARSUB instead of VARNAME - - 2/22 - ---- -execute_cmd.c - - fix_assignment_words: if an assignment is supplied to a builtin that - creates or modifies local variables while a function is executing, - set the W_FORCELOCAL flag for that word in addition to any of the - various assignment flags - -subst.c - - shell_expand_word_list: while processing a list of assignments that - are arguments to a builtin that creates or modifies local variables, - if make_internal_declare fails while attempting to create the local - variable (or give it attributes), skip attempting the assignment but - otherwise do not make this a fatal error. This results in two error - messages: one to create the variable or modify its attributes, and - one while attempting to assign the value, but the errors to not - cause the function to return immediately. Fixes inconsistency - reported by Arfrever Frehtes Taifersar Arahesis - - - 2/23 - ---- -trap.c - - first_pending_trap: generalize into first_pending_trap and - next_pending_trap - -wait.def - - wait_builtin: close up the trapped-signal-arrives hole a little more - by looking for a signal that arrived between the last check for - pending traps and setting wait_intr_flag and behaving as if it - arrived while wait was executing. Use first_pending_trap and - next_pending_trap to find a pending trap that is not SIGCHLD - -trap.c - - trap_handler: longjmp to wait_intr_buf unconditionally if - wait_intr_flag is set; don't bother with interrupt_immediately any - more - -variables.c - - all_local_variables: now takes an arg saying whether to restrict - return value to visible variables or return all local variables, - even those that are unset (the new default) - - visible_variable_in_context: new function, restricts return values - to set local variables in the current context; variable_in_context - now returns all local variables in the current context, even the - unset ones - -variables.h - - all_local_variables: change extern function declaration - -builtins/setattr.def - - show_local_var_attributes: show all local variables at the current - variable context, including unset ones, and their attributes - - show_localname_attributes: show attributes for NAME as long as NAME - resolves to a local variable at the current variable context, even - if NAME is unset - -builtins/common.h - - show_local_var_attributes, show_localname_attributes: new extern - declarations - -builtins/declare.def - - declare_internal: allow `-p' option for `local' builtin - - declare_internal: if `local' is supplied without options, or with - the `-p' option, but no variable name arguments, display all local - variables at the current variable context by calling - show_local_var_attributes - - declare_internal: if `local -p' is supplied with variable name - arguments, call show_localname_attributes to display the attributes - for that name if it resolves to a local variable at the current - variable context. Fixes issue reported by - pepa65 - -subst.c - - array_var_assignment: if VAR is unset, print the declare command - without the assignment statement, just with the attributes - - array_transform: special-case the 'a' attribute and return the - attribute string even if the array variable is unset. Feature request - from Arfrever Frehtes Taifersar Arahesis - - parameter_brace_transform: if asked to display the attributes and - value ('A') of an unset variable, make sure we pass the variable, if - it exists with attributes but without a value, to string_transform - - string_transform: if we don't have a value but the operator is 'A', - pass the variable through to string_var_assignment - - string_var_assignment: if we have an unset variable with attributes, - return a declare command that just sets the attributes. Feature request - from Arfrever Frehtes Taifersar Arahesis - - 2/24 - ---- -locale.c - - mblen: don't try to use unless HANDLE_MULITBYTE is defined. From - https://savannah.gnu.org/support/?110200 - - set_default_locale: if HAVE_SETLOCALE isn't defined, set the default - locale to "C" - - 2/25 - ---- -general.c - - interrupt_immediately: remove all references to this that are - already commented out - - 3/2 - --- -variables.c - - push_var_context,push_posix_tempvar_internal: assignment statements - preceding shell functions no longer persist after the function - completes in posix mode. POSIX interp #654, was in P1003.1-2017 - - push_posix_temp_var: variable assignments preceding special builtins - now act as if an assignment statement had been executed in posix mode - (the Posix `current execution environment') instead of unconditionally - creating a global variable - -trap.c - - clear_pending_traps: new function, just clears the pending traps flag - for all signals - - 3/6 - --- -execute_cmd.c - - execute_in_subshell: check for interrupts and terminating signals - before resetting the terminating signal handlers, and clear all - pending traps -- they're not pending for us and we should not run a - trap handler for them - - execute_in_subshell: enable bash-5.1 change from 11/29/2018 that - resets the signal-in-progress flag if we're running a command in - a subshell, since we're not running the trap command (we are the - trap command) - - 3/10 - ---- -subst.c - - parameter_brace_expand: if we assign the empty string to a variable - using the [:]= expansion in a quoted expansion, make sure we note - we are returning a quoted null string to the caller by setting - W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo - +doc/bash.1,lib/readline/doc/rluser.texi + - spell-correct-word: document new function and its default binding 3/17 ---- -lib/readline/histfile.c - - history_truncate_file: only chown the file if we really need to. From - alex@lisas.de via https://savannah.gnu.org/support/?110207 - -lib/readline/bind.c - - rl_unbind_function_in_map: since we are looking for functions, not - key sequences, descend into keymaps attached to the keymap passed - as an argument. From a report from lockywolf@gmail.com back on 2/27, - TENTATIVE CHANGE - -variables.h - - MKLOC_ARRAYOK,MKLOC_ASSOCOK: new flags values for - make_local_{array,assoc}_variable so we can avoid hard-coded values - of 1 and make it possible to eventually pass in additional flags - -builtins/declare.def - - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK - - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK - -variables.c - - make_local_{array,assoc}_variable: understand new flags, pass - MKLOC_INHERIT to make_local_variable if it appears in the flags - argument - -builtins/declare.def - - declare_internal: add a new -I option for local and declare that - inherits attributes and value from a variable with the same name - at a previous scope. Inspired by netbsd sh - - if -I option is supplied, pass MKLOC_INHERIT to make_local_variable - and its array counterparts make_local_{array,assoc}_variable - -subst.c - - shell_expand_word_list: pass -I to declare if constructing a declare - command with make_local_declare, meaning we have an array or assoc - compound assignment. (Slighty unsatisfactory, but ok for now) Fix - for bug report from Kevin Locke , - https://savannah.gnu.org/support/index.php?109669 +doc/{bash.1,bashref.texi} + - cd: slight changes to specify that it sets PWD and OLDPWD + - {pushd,popd}: make it clear that these builtins use cd to change + the current working directory; change wording to simplify the + description and clarify the exit status 3/18 ---- -examples/loadables/basename.c - - basename_builtin: handle -- option without crashing. Report by Peng Yu - +execute_cmd.c + - execute_disk_command: after performing redirections, call + unlink_all_fifos() to remove the FIFOs created as part of + expanding redirections. They should have been opened by then, and + we're going to call shell_execve right away anyway, so we won't be + around to remove the FIFOs. From a report from + Michael Felt -jobs.c - - notify_of_job_status: if in posix-mode shell is started with -c, - jobs should print the status of completed jobs. From a report by - Robert Elz back in 12/18 - - 3/19 + 3/22 ---- -variables.c - - assign_in_env: if we're assigning POSIXLY_CORRECT or POSIX_PEDANTIC - in the temporary environment, save the values of the options - affected by posix mode so we can restore them when we restore the - old value of the variable after the command executes. Suggested by - Martijn Dekker +parse.y + - alias_expand_token: slight tweak to check for alias expansion: perform + expansion unconditionally if PST_ALEXPNEXT is set, and disable it + in case statement pattern lists if the previous token indicates a + command name is acceptable. + From a report by Oguz - 3/20 - ---- -syntax.h - - slashify_in_here_document: add `"' to this list, since POSIX says - that backslashes in here documents behave like backslashes in - double quotes, and backslash can quote a double quote in a double- - quoted string. This means that given P=A, - - cat < back in 1/2019. - - 3/23 - ---- -subst.c - - string_transform: add `U' (convert to uppercase), `u' (convert - first character to uppercase), and `L' (convert to lowercase) - transformations. Inspired by a discussion with Phil Smith - back in May, 2019 - - parameter_brace_transform: make sure `u', `U', and `L' are valid - transform operators - -doc/{bash.1,bashref.texi} - - parameter transformation: document new `U', `u', and `L' operators - -eval.c - - execute_prompt_command: if an array variable PROMPT_COMMANDS exists, - prefer it to PROMPT_COMMAND and execute all of the commands contained - as array elements in index order. From a proposal by Daniel - Colascione back in 1/2018 - - execute_array_command: function for array_walk to use when executing - commands in PROMPT_COMMANDS - -doc/{bash.1,bashref.texi} - - PROMPT_COMMANDS: new array variable - - 3/24 - ---- -builtins/ulimit.def - - new -R option, for RLIMIT_RTTIME (max time a real-time process can - run without blocking). Patch from Maciej Wolny - back in 7/2017 - -doc/{bash.1,bashref.texi} - - ulimit: document new -R option - -lib/readline/{display.c,rlprivate.h} - - _rl_clear_screen: now takes an argument saying whether to attempt to - clear the terminal scrollback buffer if the right termcap capability - exists - -lib/readline/{text.c,readline.h} - - rl_clear_display: new bindable command that clears the screen and - scrollback buffer - -lib/readline/funmap.c - - clear-display: new bindable command name - -lib/readline/emacs_keymap.c - - emacs mode M-C-l now bound to clear-display - -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - clear-display: document new function and default emacs mode binding - -arrayfunc.c - - assign_assoc_from_kvlist: allow compound assignments to associative - arrays that do not contain words of the form `[key]=value', assume - such lists are of the form (key1 value1 key2 value2). A missing or - empty key is an error; a missing value is treated as NULL. You - cannot mix the two forms. Inspired by a suggestion from Sebastian - Gniazdowski back in 7/2019 - -doc/{bash.1,bashref.texi} - - documented new associative array assignment syntax - -assoc.[ch] - - assoc_to_kvpair: new function that returns a string with quoted - key/value pairs from given associative array - -array.[ch] - - array_to_kvpair: new function that returns a string with quoted - key/value pairs from given indexed array (for completeness) - -subst.c - - parameter_brace_transform: new operator `K': produces the (possibly - quoted) value of a variable, except for arrays, where it expands to - indexed or associative array assignments in key/value pair form - - string_transform,parameter_list_transform: expand `K' to (possibly - quoted) values - - array_var_assignment: take a new fourth argument saying which kind - of assoc assignment statement to produce; calls array_to_kvpair or - assoc_to_kvpair as appropriate and just returns that value if - necessary without creating a declare command - - array_transform: if the operator is `K', call array_var_assignment - with new argument that will produce a list of key/value pairs - -doc/{bash.1,bashref.texi} - - document new 'K' parameter transformation operator +config-bot.h + - HAVE_MKDTEMP: fix typo 3/25 ---- -doc/bash.1,lib/readline/doc/{history.3,readline.3} - - some text and formatting cleanups from Bjarni Ingi Gislason - - -bashhist.c - - SYSLOG_MAXLEN: increase to 1024, since that seems to be what most - syslog daemons handle - - bash_syslog_history: if the line is longer than SYSLOG_MAXLEN minus - the header length, log it in multiple message with a sequence number - instead of truncating. Inspired by a report from - back in 7/2018 - -lib/readline/text.c - - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, - rl_keep_mark_active: new functions to manage an active region. We - don't do anything with an active region yet. Part of a large patch - for active regions from Daniel Colascione - originally back in 3/2018 - - rl_clear_screen: call rl_keep_mark_active to keep the region active - across the screen refresh - - rl_newline: make sure to deactivate the region even though we don't - do any redisplay with it yet - -lib/readline/readline.h - - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p, - rl_keep_mark_active: new extern function declarations. They are - public functions for now - -lib/readline/readline.c - - readline_internal_setup: make sure the region starts out as not - active - - readline_internal_charloop: make sure to deactivate the mark after - a command, unless the command calls rl_keep_mark_active keep it - active - -lib/readline/kill.c - - rl_bracketed_paste_begin: set rl_mark before inserting the pasted - text, so the pasted text defines the region - - rl_bracketed_paste_begin: set the region as active after inserting - the pasted text - -lib/readline/util.c - - _rl_abort_internal: make sure we deactivate the region - -lib/readline/{terminal.c,rlprivate.h} - - _rl_cr: new function to just output the term_cr (or '\r'). Part of - the active region patch - -lib/readline/display.c - - _rl_cr: use where appropriate to replace MSDOS-dependent code and - calls to tputs - lib/readline/terminal.c - - get and store the terminal sequences to enter and exit standout - (usually some background color) mode - - 3/26 - ---- -subst.[ch] - - copy_fifo_list: now returns void * - - close_new_fifos: now takes a void * as the first argument, since it's - usually the return value from copy_fifo_list - - close_new_fifos: (named pipes): cast first argument to a char *, - since copy_fifo_list will (someday) return a bitmap - - close_new_fifos: (HAVE_DEV_FD): cast first argument to a pid_t *, - since it takes a copy of dev_fd_list; use that in the loop to - determine whether or not to close file descriptors. First half of - fix for bug reported by Valentin Lab - - unlink_fifo_list: (named pipes): when compacting the list, make sure - to avoid the copy if i == j, and, after copying fifo_list[i] to - fifo_list[j], null out fifo_list[i] so we don't try to access it - later - -execute_cmd.c - - execute_command_internal: don't call reap_procsubs after executing - the command. Rest of fix for bug reported by Valentin Lab - - - execute_command_internal,execute_builtin_or_function: ofifo_list is - now a void * instead of a char * + - look in terminfo for key sequences for page up (kP) and page down + (kN) and bind them to history-search-{backward,forward}, + respectively. From a patch from Xose Vazquez Perez + 3/30 ---- -lib/readline/{terminal.c,rlprivate.h} - - _rl_standout_{on,off}: new functions, to enter and exit terminal - standout mode - -lib/readline/rlprivate.h - - _rl_refresh_line: new extern declaration - -lib/readline/display.c - - visible and invisible lines: added members to deal with tracking the - `current face' - - realloc_line: broke code to manage visible_line and invisible_line - allocation out of init_line_structures, added code to manage arrays - of visible and invisible line face info per character - - invis_{addc,adds,nul}: new functions to add characters to the - invisible line and keep the invisible face data updated with whatever - the current face is - - set_active_region: keep track of the display region that should be - in standout mode - - rl_redisplay: use invis_addc/adds/nul to update the invisible line - buffer instead of modifying invisible_line directly - - _rl_refresh_line: moved body of function here from text.c - -lib/readline/text.c - - rl_refresh_line: now just calls _rl_refresh_line and marks the display - as fixed +doc/bashref.texi + - expand the node describing $"..." string translation with additional + details and examples 3/31 ---- -variables.c - - bind_variable_internal: dynamic variables with assignment functions - now honor the readonly attribute by giving an error. Fixes issue - reported by Rob Landley - - assign_seconds: allow seconds to be assigned using an arithmetic - expression - - assign_random: allow RANDOM to be assigned using an arithmetic - expression +misc.c + - rl_fetch_history: moved here from vi_mode.c + - rl_fetch_history: negative arguments count back from the end of + the history, instead of taking you to the beginning of the history + list + - rl_fetch_history: in vi mode, an out-of-range argument rings the + bell and doesn't change the line -doc/{bash.1,bashref.texi} - - HISTCMD: note that assignments to HISTCMD have no effect +vi_mode.c + - rl_vi_fetch_history: call rl_fetch_history - 4/2 +readline.h + - rl_fetch_history: new extern declaration + +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - rl_fetch_history: add description + +builtins/setattr.def + - show_var_attributes: if a variable's value indicates that it should + be ANSI-C quoted, use ansic_quote instead of sh_double_quote to + format the value string. From proposal by Greg Wooledge + + + 4/5 --- -execute_cmd.c - - execute_in_subshell: make sure we note that we're not reading our - command input from a buffered stream any more, so we don't - sync the buffered stream backwards in subsequent commands this - subshell runs. Fixes bug reported by Ouz +arrayfunc.c + - unbind_array_element: if FLAGS includes VA_ONEWORD, don't use + skipsubscript to parse the subscript, just assume the entire SUB is + the subcript and that it contains the closing `]', so we just want + everything in SUB except the last character. - 4/3 - --- -builtins/read.def - - read_builtin: if a read in posix mode is interrupted by a signal, - make sure to preserve the value of errno around calls to - check_signals and run_pending_traps so any error message isn't quite - as confusing. Issue reported by Stan Marsh - -lib/sh/zread.c - - zread: preserve value of errno (always EINTR) around calls to - check_signals or check_signals_and_traps - -trap.c - - run_debug_trap: allow suppress_debug_trap_verbose being set to - turn off `set -v' temporarily while executing the DEBUG trap (if - it's set) - -builtins/fc.def - - set suppress_debug_trap_verbose so set -v won't be in effect while - the DEBUG trap runs. Most recently reported by Ami Fischman - ; originally raised by Boruch Baum - back in 10/2017 +parse.y: + - select_command: use compound_list instead of list, like for_command. + Report by Greywolf + - list: move this into compound_list (replacing the instance of `list' + in the compound_list production), remove from the grammar 4/6 --- -lib/readline/display.c - - puts_face,putc_face: new functions to write strings or characters to - the display while handling standout mode - - update_line,_rl_move_cursor_relative: take additional argument(s) - describing the visible and invisible faces corresponding to the - visible and invisible lines, respectively - -lib/readline/readline.c - - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on - by default) - -trap.c - - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0 - since run_pending_trap usually does these things - -sig.c - - throw_to_top_level: only call the SIGINT trap if there is a SIGINT - trap pending (shouldn't matter, just a check) - -bashline.c - - bash_event_hook: try to identify the signal of interest we've - received - - bash_event_hook: if in posix mode running the read builtin, and we - get a (trappped) SIGINT, throw to top level so we can interrupt - the read. From a report by Robert Elz +arrayfunc.c + - unbind_array_element: use VA_NOEXPAND instead of literal 1 4/7 --- -lib/readline/display.c - - update_line: make sure to update and compare face data at the same - time as comparing old and new line data: the lines are only the same - if the face information and character information are identical - (ofd, ols, etc.) - - update_line: make sure to copy face data along with line data - - update_line: use puts_face in place of _rl_output_some_chars to - output face data along with line data - - _rl_move_cursor_relative: when we write characters, make sure to take - the face data into account using puts_face - [END OF INTEGRATION OF ACTIVE MARK AND FACE PATCHES from - Daniel Colascione ] +lib/readline/funmap.c + - default_funmap: add missing `vi-undo' to the list of vi-mode bindable + functions. Reported by Xirui Zhao -{jobs,nojobs}.c - - make_child: to avoid installing a handler for SIGTERM in interactive - shells, and avoid race conditions with child processes resetting the - SIGTERM signal handler to the default, block SIGTERM and then - reset the SIGTERM handler to SIG_DFL before fork, then reset the - handler to SIG_IGN and unblock it in the parent after fork() returns. - Fix for readline and SIGTERM handling reported by Chris Down - (original change was back in 2/2013) that - allows a bash waiting in readline() for input to be killed with a - SIGTERM sent by another process - - take out calls to RESET_SIGTERM, no longer needed - -execute_cmd.c - - execute_in_subshell,execute_simple_command,execute_disk_command: - remove calls to CHECK_SIGTERM, since we don't install a handler - any more - -lib/readline/readline.c - - _rl_enable_bracketed_paste: enabled by default for the time being - - 4/9 + 4/8 --- -jobs.h - - JWAIT_WAITING: new flag for wait functions; means only wait for jobs - with the J_WAITING flag set - - J_WAITING: new job flag, part of arg list to `wait -n' - - IS_WAITING(i): job i has the J_WAITING flag set -jobs.c - - wait_for_any_job: if the flags includes JWAIT_WAITING, we only return - jobs with the J_WAITING flag already set; otherwise we skip them. - For `wait -n args' support +config-top.h + - DEFAULT_LOADABLE_BUILTINS_PATH: default value for BASH_LOADABLES_PATH -builtins/wait.def - - set_waitlist: take a list of jobspecs and set the J_WAITING flag in - each valid job from the list - - unset_waitlist: turn off the J_WAITING flag for all jobs where it's - set - - wait_builtin: if -n is supplied with a list of arguments, set the - J_WAITING flag in each job in the list, call wait_for_any_job with - the JWAIT_WAITING flag, and clean up by calling unset_waitlist(). - From a suggestion from Robert Elz back in 3/2019 - (originally in 10/2017) +doc/{bash.1,bashref.texi} + - enable: note that it uses $BASH_LOADABLES_PATH, and that the default + is system-dependent - 4/11 - ---- -lib/readline/display.c - - update_line: in step 5b of the line wrapping prompt code, make sure - OFDF and NFDF are set before performing a dumb update +variables.c + - initialize_shell_variables: initialize BASH_LOADABLES_PATH to the + default given in DEFAULT_LOADABLE_BUILTINS_PATH 4/12 ---- -sig.c - - termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before - resending a terminating signal to ourselves, in the event that this - is called in a signal handler context with the terminating signal - blocked. Inspired by a report from - - 4/13 - ---- - -lib/readline/text.c - - rl_newline: if the region is active, call rl_redisplay to clear - standout mode before returning - -lib/readline/display.c - - norm_face: new function to mark a portion of the invisible face - buffer as normal text (no standout) - - rl_redisplay: if the line consumes more than a screen's worth of - lines, mark the lines that are off the top of the display as having - a `normal' face +doc/{bash.1,bashref.texi} + - add link to git master tar file as a place to get the current version 4/14 ---- -variables.c - - LINENO: no longer has the integer attribute, since it does not take - arithmetic expressions on assignment (use $((expr)) instead) - -lib/readline/mbutil.c - - _rl_find_prev_utf8char: new function, uses the structure of UTF-8 - characters to find the start of the previous one no matter where we - start: at the beginning of the next character, at the end of a - multibyte character, or in the middle of a multibyte character. - EXPERIMENTAL - - _rl_find_prev_mbchar_internal: for now, call _rl_find_prev_utf8char - if we are in a UTF-8 locale. EXPERIMENTAL - - 4/15 - ---- -lib/readline/mbutil.c - - _rl_utf8_mblen: changes to handle invalid multibyte sequences better, - even when N means that the sequence would be too short anyway - -examples/loadables/csv.c - - csv: new loadable builtin to parse a line of csv data and store it - into an array supplied as an argument +bashline.c + - attempt_shell_completion: use -1 as a sentinel value for + in_command_position indicating that we cannot be in a command position + (e.g., because we're the target of a redirection) and should not + check for a programmable command completion or tell the programmable + completion code to use command completion. Report and fix from + Marc Aurèle La France 4/16 ---- -examples/loadables/cut.c - - cut: new loadable builtin - - lcut: new builtin that does what cut does but on a string supplied - as an argument (only one string for now) +builtins/bind.def + - bind_builtin: reverse sense of strvec_search return value when + deciding whether or not to remove a unix-command binding from the + cmd keymap. Bug report by Dale Sedivec - 4/17 - ---- -jobs.h - - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second - argument to make_child - -jobs.c - - make_child: now takes a set of flags as the second argument - -execute_cmd.c - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument - -subst.c - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument - -doc/{bash.1,bashref.texi} - - document that the words in a compound array assignment undergo all - the shell word expansions, including filename generation and word - splitting. From a report from E. Choroba - - 4/18 - ---- -subst.c - - command_substitute: use JOB_CONTROL instead of INTERACTIVE in the - test to determine whether or not to give the terminal back to - pipeline_pgrp - -jobs.c - - make_child: if FORK_NOTERM is set in the flags argument, don't call - give_terminal_to - -{jobs,nojobs}.c,jobs.h - - wait_for: now takes a second argument, a flags word - -{execute_cmd,subst}.c - - wait_for: change all callers to add second argument to wait_for - -jobs.c - - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call - give_terminal_to +lib/readline/doc/rltech.texi + - RL_PROMPT_{START,END}_IGNORE: document current values of \001 and + \002. Report from Mingye Wang 4/19 ---- -subst.c - - command_substitute: block SIGINT around call to read_comsub, so we - let any interrupts affect the command substitution. Fixes issue - reported by DALECKI Léo - -hashcmd.h - - FILENAME_HASH_BUCKETS: increase to 256 - -assoc.h - - ASSOC_HASH_BUCKETS: new define, set to 1024 - -variables.c - - make_new_assoc_variable,make_local_assoc_variable: call assoc_create - with ASSOC_HASH_BUCKETS as argument. This changes the hash function - and how the array keys are ordered (which is not guaranteed) - -builtins/read.def - - read_builtin: in posix mode, or if the read call returns -1/EINTR, - don't call run_pending_traps until the read command returns. This - allows a trap action to see the same exit status that the read - builtin would return when it exits on a signal (e.g., SIGINT == 130). - From a suggestion by +arrayfunc.c + - assign_assoc_from_kvlist: fix memory leak reported by konsolebox + 4/20 ---- -hashlib.c - - hash_rehash: function to rehash a table, after increasing or decreasing - the number of buckets. From patches from Thomas Kremer - (https://savannah.gnu.org/patch/?9850) and Koichi Murase - - - hash_grow,hash_shrink: grow or shrink a hash table by a factor of - HASH_REHASH_MULTIPLIER (4) - - hash_insert,hash_search: call hash_grow if necessary - -arrayfunc.c - - convert_var_to_{array,assoc}: if the original variable had no value - (it was unset), the array variable should be unset as well. Reported - by andrej@podzimek.org +command.h,subst.c + - W_ITILDE: remove, replace with a variable since it's only used inside + a single call to expand_word_internal 4/21 ---- -bashline.c - - set_saved_history: change logic used to decide where in the history - operate_and_get_next should start by using a logical offset into the - history list that is an offset from history_base. This avoids having - to take whether or not the history is stifled and full into account. - Report and fix from Greg Price - - operate_and_get_next: just calculate the logical offset of where we - should be in the history instead of an absolute offset - -lib/readline/input.c - - _rl_nchars_available: new function, returns the number of characters - available to be read if FIONREAD is available - - 4/22 - ---- -lib/readline/{readline.c,rlprivate.h} - - _rl_pending_command: new struct to hold information about a pending - command for readline to execute when the current command completes. - A command can set this up so that it gets executed like a - continuation before redisplay - -lib/readline/readline.c - - readline_internal_charloop: after _rl_dispatch returns, check - _rl_command_to_execute, and, if it's non-zero, redisplay and then - execute it as a command - - added a small set of library-private functions for managing the - executing key sequence (not used yet) - -lib/readline/isearch.c - - _rl_isearch_dispatch: if we have found an opcode or have added a - character to the search string and searched for it, reset the keymap - and okeymap members of the search context in preparation for reading - another key sequence/opcode - - _rl_isearch_dispatch: if we read a key sequence bound to an editing - command that is not an `opcode', set up _rl_command_to_execute to - execute it after the searching returns and arrange to break out of - the search - - _rl_isearch_dispatch: if we paste in text from bracketed paste, set - the mark as active so we can highlight it when we display the search - string - - _rl_isearch_dispatch: if we've found the search string, activate the - mark and set rl_point and rl_mark so the search string is highlighted - when we display the search results - - _rl_isearch_dispatch: do translation for keys that map to - rl_do_lowercase_version like we do when dispatching while reading a - key sequence - - 4/23 - ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: if bracketed paste mode is enabled and there are - enough characters waiting in the terminal's input queue, try to read - the bracketed paste prefix and jump straight to the opcode execution - if we read it. Otherwise, just go on with the ESC. Inspired by report - from - -parse.y - - parse_comsub: posix-mode shells don't allow a closing right paren to - delimit a pending here-document -- it requires the newline - -doc/bashref.texi - - POSIX mode: updated posix mode description with the new here-document - delimiter requirement - -lib/readline/search.c - - _rl_nsearch_dispatch: if bracketed paste mode is enabled, and we read - an ESC, try to see if we have a bracketed paste op and insert the - pasted next. If we don't, go on with the ESC - - _rl_nsearch_dosearch: experimental code to highlight the search string - when displaying the line found in the history. Only done when we are - not searching for a pattern, since we don't have information on the - end of the matching portion of the line. Experimental because it - changes where we put point and mark if searching is successful - -expr.c - - expr_streval: if find_variable for the case where the string is not - an array reference doesn't find anything, see if we can find - something by using find_variable_last_nameref and use the value - from there in the call to expr_streval, kind of using the expression - recursion to complement the nameref recursion. Report from - Daniel Molina +{subst.c,make_cmd.c,parse.y} + - W_DQUOTE: no longer used, use W_NOPROCSUB and W_NOTILDE directly + (for arithmetic commands and words in arithmetic for commands) 4/24 ---- -jobs.c - - {start,stop}_pipeline: don't reset pipeline_pgrp to 0 if it's already - the same as shell_pgrp, since we don't want to reset it in the middle - of a shell started to run a command or process substitution (after - forking a child to run one command, but before forking another, for - instance). Reported by Rob Landley +bashline.c + - executable_completion: since this function gets an unquoted filename + from rl_filename_completion_function, we need to quote special + characters before passing it to bash_directory_completion_hook. + Report from Alex fxmbsw7 Ratchev + + 4/26 + ---- +lib/readline/search.c + - _rl_nsearch_abort: move function calls around so _rl_restore_prompt + happens before rl_clear_message, like when aborting an incremental + search. Suggested by sparrowhawk996@gmail.com + +subst.h + - ASS_ALLOWALLSUB: new assignment flag value, means to allow @ and * as + valid array subscripts when assigning to existing associative arrays + +arrayfunc.c + - assign_array_element: allow assignment of key `@' to an existing + associative array if the caller passes ASS_ALLOWALLSUB + - assign_compound_array_list: allow ( [@]=value ) to an existing + associative array + +builtins/declare.def + - declare_internal: allow assignment of key `@' to an existing + associative array by passing ASS_ALLOWALLSUB to assign_array_element + as part of local_aflags. This affects declare, local, and typeset + +subst.c + - do_assignment_internal: allow a[@]=value to an existing associative + array by passing ASS_ALLOWALLSUB to assign_array_element 4/27 ---- -parse.y - - function_def: break the productions starting with `function' without - `()' into two productions to avoid a shift-reduce conflict. Report - and patch from Dale R. Worley +builtins/common.[ch] + - builtin_bind_var_to_int: wrapper for bind_var_to_int to be used by + builtin commands; placeholder for future work -variables.h - - localvar_inherit: add extern declaration here +builtins/wait.def + - builtin_bind_var_to_int: use instead of bind_var_to_int -subst.c - - shell_expand_word_list: take out change from 3/17 to pass -I to - make_internal_declare; it generates errors the user will find - confusing if there is a variable with the same name but a different - type at a previous scope - - shell_expand_word_list: check for and note whether or not -I is - supplied to the declaration command, since it changes the default - behavior of a compound assignment without -a or -A - - shell_expand_word_list: if we have a compound assignment that is an - argument to a declaration command, but there are no options supplied - to the command that determine the type of the array, make sure we - call make_internal_declare with either -a (no localvar_inherit or -I) - or at least -- (if we are inheriting), because we don't want the - declare to get skipped before we perform the word assignment. Fixes - bug reported by Ross Goldberg +builtins/common.c + - builtin_bind_variable: allow assignment of key `@' to an existing + associative array by passing ASS_ALLOWALLSUB to assign_array_element. + This affects printf and read + +builtins/variables.[ch] + - bind_var_to_int: add third `flags' argument to pass to bind_variable + instead of always passing 0 + +redir.c,builtins/common.c,builtins/printf.def + - bind_var_to_int: change callers, add third flags argument + +builtins/common.c + - builtin_bind_var_to_int: pass ASS_ALLOWALLSUB to bind_var_to_int so + builtins like wait can assign to assoc[@] and assoc[*] 4/28 ---- -subst.c - - expand_declaration_argument: new function, broke code that handles - compound assignments that are arguments to declaration commands out - of shell_expand_word_list into this function. No functional change - yet +bashline.c + - command_word_completion_function: make sure to initialize + old_glob_ignore_case before trying to restore from it + - command_word_completion_function: if we are completing a glob + pattern, make sure to set rl_filename_completion_desired, so we get + quoting and appending -- we are completing a filename, after all. + From a report from Manuel Boni - 4/29 - ---- -subst.c - - expand_compound_assignment_word: helper function for - expand_declaration_argument: takes NAME[+]=( VALUE ), converts VALUE - to a list of words, then single-quotes each word and reconstructs - the original word. This assumes the result will go to - do_word_assignment, which will remove the single quotes - - expand_oneword: helper function for expand_compound_assignment_word, - takes VALUE and performs the splitting into words, and then the - expansion and single-quoting of each individual word. Indexed and - associative arrays take different code paths, because they undergo - different expansions and associative arrays need special handling to - avoid having to scan for the end of the subscript multiple times - - expand_declaration_argument: call expand_compound_assignment_word to - get the expansion-before-calling-builtins word expansion sequence - correct. Better fix for for bug report from Kevin Locke - , - https://savannah.gnu.org/support/index.php?109669 +lib/readline/bind.c + - enable-active-region: separate control of the active region and + bracketed paste. Still set to the same default value as bracketed + paste, and enabling bracketed paste enables the active region. + Now you can enable bracketed paste and then turn off the active + region. -arrayfunc.c - - quote_array_compound_word: take [IND]=VALUE and convert it to - ['IND']='VALUE'. Called by quote_compound_array_list for each word - in the list - - expand_and_quote_assoc_qword: take [KEY]=VALUE and convert it to - ['expanded-key']='expanded-value' (or VALUE to 'expanded-value'). - Called by subst.c:expand_oneword() for each word in the list - - quote_compound_array_list: take a list of words and convert each - [IND]=VALUE to ['IND']='VALUE' (or just 'VALUE' if there is no - [IND]=). Used for indexed arrays - -arrayfunc.h - - expand_and_quote_assoc_word,quote_compound_array_list: new extern - declarations +doc/bash.1,lib/readline/doc/{readline.3,rltech.texi} + - enable-active-region: document new bindable readline variable and + its effects 4/30 ---- -doc/{bashref.texi,bash.1} - - rework description of reserved words a little; add a reserved words - node to bashref.texi. Based on a report from Dale R. Worley - +command.h + - W_ARRAYREF: new flag, meaning the word is a valid array reference + with subscript, replaces W_DOLLARSTAR, which was unused -builtins/history.def - - history_builtin: if the shell is restricted, don't allow pathnames - with slashes to be read or written. From a report from - Diffie +subst.c + - expand_subscript_string,expand_array_subscript: new functions to + parse and expand-and-quote array subscripts. For future use -shell.c - - maybe_make_restricted: add HISTFILE to the list of readonly variables - -doc/{bashref.texi,bash.1} - - document new restricted shell restrictions - - 5/1 + 5/3 --- -jobs.c - - wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM - is set in the flags argument +builtins/mapfile.def + - mapfile: if the delimiter is a newline, set unbuffered_read = 1 + for any file descriptor that isn't seekable and lseek sets errno + to ESPIPE (pipes, FIFOs, maybe terminal devices). If it's not a + newline, only allow buffered reads if the file descriptor is a + regular file. Report from Koichi Murase -subst.c - - command_substitute: call make_child with FORK_NOTERM flag so it - doesn't try to set the terminal's process group - - command_substitute: call wait_for with JWAIT_NOTERM so it doesn't - try to set the terminal's process group - - command_substitute: now that wait_for doesn't try to reset the - terminal's process group, remove the code that tries to clean up - after that +builtins/read.def + - read_builtin: only set unbuffered_read = 1 if the input is coming + from a pipe (which we can't seek on) or the input is a terminal and + we want to read a specified number of characters or we're using a + non-standard delimiter 5/4 --- -doc/bash.1 - - make sure to mention /etc/inputrc as the ultimate default readline - init file, like other documentation does. Update from - Greg Price -lib/readline/readline.c - - if the private startup hook function variable _rl_internal_startup_hook - is set, execute that after any user-specified startup hook - -lib/readline/rlprivate.h - - _rl_internal_startup_hook: new extern declaration - -bashline.c,lib/readline/{misc.c,readline.h} - - operate_and_get_next: moved to rl_operate_and_get_next so it's - available to all readline programs, uses _rl_internal_startup_hook. - Based on patch from Greg Price - -lib/readline/funmap.c - - "operate-and-get-next": now a bindable readline command - -lib/readline/emacs_keymap.c - - rl_operate_and_get_next: bound to ^O in emacs mode by default - -doc/bash.1,lib/readline/{readline.3,rluser.texi} - - operate-and-get-next: move to readline section of the manuals, out of - bash-specific functions section +builtins/mapfile.def + - mapfile: call zsyncfd before calling the callback. Suggested by + Koichi Murase ; we'll see how it goes 5/5 --- -hashlib.c - - hash_string: use a series of shifts and adds to avoid a multiply by - FNV_PRIME. From Landon Curt Noll's FNV web page +subst.h + - expand_subscript_string: extern declaration -builtins/fc.def - - fc_gethist,fc_gethnum: now take an additional argument indicating the - operating mode: if the arg is 1, fc is listing commands; if it is 0, - fc is executing commands. Affects how -0 is handled (fc_gethnum - returns -1). Changed callers to handle the return value appropriately. - Report from Jason Franklin about - seg fault and core dump - - fc_builtin: if fc_gethnum returns < 0 when setting histbeg or histend, - report a range error +{arrayfunc,subst}.c + - expand_subscript_string: replace expand_assignment_string_to_string + with calls to this when expanding array subscripts -doc/bash.1,lib/readline/doc/hsuser.texi - - fc: document how 0 and -0 are treated for listing and executing +subst.c + - cond_expand_word: call expand_word_internal with Q_ARITH if `special' + says we should quote for an arithmetic expression context + - expand_word_internal: call expand_array_subscript when we see `[' in + arithmetic or array subscript contexts, make conditional on the + compatibility level later + - expand_word_internal: make sure W_ARRAYREF makes it through this + function and into the returned word -shell.c - - run_one_command: call parse_and_execute with SEVAL_RESETLINE so the - line number gets set to 1. Reported by Rob Landley - - 5/8 + 5/6 --- -support/config.{guess,sub} - - update to latest versions -configure.ac - - add support for `genode' from Emery Hemingway +arrayfunc.c + - array_expand_index: call evalexp with a flag of 0 since we call + expand_arith_string with Q_ARITH and we want evalexp to remove + the quotes + +execute_cmd.c + - eval_arith_for_expr,execute_arith_command: now that Q_ARITH has an + effect on array subscripts (it quotes the special expansion + characters), call evalexp with 0 as the flags arg so quote removal + is performed on this quoted argument. Make this conditional on the + shell compatibility level later + - execute_cond_command: make sure to expand the argument to -v by + calling cond_expand_node with Q_ARITH, and correspondingly turn off + assoc_expand_once when calling unary_test with that argument, since + we want it to be expanded again to remove the quotes + - execute_cond_command: expand the arguments to the arithmetic operators + with Q_ARITH and pass TEST_ARITHEXP to binary_test to ensure that + it lets evalexp expand the arguments to remove the quoting + +test.c + - arithcomp: if TEST_ARITHEXP is in FLAGS, call evalexp with a flag + if 0 to force evalexp to expand the arguments to remove the quoting + +subst.c + - param_expand: since we call expand_arith_string with Q_ARITH, we need + to call evalexp with 0 instead of EXP_EXPANDED for $((...)) expansion + - expand_word_internal: if we recursively call expand_word_internal to + expand the contents of a double-quoted string, make sure we pass + through Q_ARITH if it appears in QUOTED + - verify_substring_values: call expand_arith_string with Q_ARITH and + correspondingly call evalexp with 0 instead of EXP_EXPANDED + +execute_cmd.c + - execute_cond_node: if -v is the operator, and the operand is a valid + array reference, pass TEST_ARRAYEXP flag to unary_test + + 5/7 + --- +builtins/common.[ch] + - set_expand_once: set array_expand_once to the value passed as the + first argument, returning the original value + +builtins.h + - ARRAYREF_BUILTIN: new flag for shell builtins, means that the builtin + can take array references, with subscripts, as arguments + +builtins/mkbuiltins.c + - set ARRAYREF_BUILTIN flag on builtins given in the arrayvar_builtins + array + +execute_cmd.c + - execute_cond_node: use set_expand_once to set array_expand_once to 0 + before calling unary_test with -v (see change from 5/6) + +arrayfunc.c + - unbind_array_element: allow the caller to choose whether or not a + subscript of `*' or `@' unsets the entire array by passing + VA_ALLOWALL in FLAGS. Right now, since the unset builtin doesn't + pass VA_ALLOWALL, those subscripts unset individual elements for + associative arrays. We preserve the old behavior of unsetting + indexed arrays for the time being with new indexed-array-specific + code + + 5/9 + --- + +builtins/shopt.def + - expand_once_flag: "assoc_expand_once" option now sets this flag, + calls set_assoc_expand on change + - set_assoc_expand: sets assoc_expand_once to mirror expand_once_flag; + placeholder for future changes + +builtins/common.h + - expand_once_flag: extern declaration + + 5/10 + ---- +doc/{bash.1,bashref.texi} + - note that case patterns undergo quote removal. Reported by + AlvinSeville7cf + + 5/11 + ---- + +builtins/bashgetopt.c + - list_optflags: flags associated with the word corresponding to + list_optarg, assuming list_optarg is a separate argument + +builtins/bashgetopt.h + - list_optflags: extern declaration + +builtins/set.def + - unset_builtin: set VFLAGS each time through the loop, since we take + whether or not the word has W_ARRAYREF set into account + - unset_builtin: don't pass VA_ALLOWALL to unbind_array_element for + now + +test.c + - unary_test: in the -v case, use assoc_expand_once in the first call + to valid_array_reference () + +builtins/printf.def + - printf_builtin: only set VA_ONEWORD if the option argument to -v has + W_ARRAYREF set (look at list_optflags) + + 5/12 + ---- + +subst.c + - expand_array_subscript: don't quote @ or * in the expanded subscript + at all, even when they are the only character in the subscript. See + how this works out -- it might uncover places where we need to allow + `*' and `@' as subscripts where they are not allowed now + +expr.c + - expr_bind_variable: pass ASS_ALLOWALLSUB to bind_int_variable so we + can allow (( A[@]=value )) when A is an existing associative array + +arrayfunc.h + - AV_ATSTARKEYS: new flag value, means to accept a[@] and a[*] but + treat them as keys/expressions and not special values + +arrayfunc.c + - array_value_internal: check AV_ATSTARKEYS and don't treat them as + ALL_ELEMENT_SUB values; they fall through to use as keys/indices + +test.c + - unary_test: if -v is passed an array reference, add AV_ATSTARKEYS to + the flags passed to array_value so we treat @ and * as keys for an + existing associative array + + 5/13 + ---- + +subst.c + - expand_cond_word: if SPECIAL == 3 (arithmetic expression), dequote the + resulting WORD_LIST * as if special == 0, because we don't want to + quote the list for pattern matching. Report from + Adjudicator Darren 5/14 ---- -test.c - - term: fix case where an argument that looks like a unary operator, - but doesn't have enough tokens left to have an argument to that - operator, was not being treated as a one-argument test. Affects - only uses of test with four and greater arguments, which posix says - are unspecified. This is a bug, or at least an incompatibility, at - least 30 years old. - - test_command: if there are unconsumed arguments, call test_syntax_error - with a `syntax error' argument if the first remaining argument starts - with a `-'. Better than a generic `too many arguments' error +subst.c + - expand_array_subscript: add double quote (") to the list of characters + that are backslash-quoted in subscripts after word expansion. + skipsubscript treats them specially, so you have to quote them to + do things like `key='"' ; array[$key]=1 ; [[ -v array[$key] ]]' + + 5/16 + ---- + +builtins/wait.def + - wait_builtin: if we longjmp to wait_intr_buf, call unset_waitlist if + we have called set_waitlist (wflags & JWAIT_WAITING). Fixes bug with + wait -n interrupted by a trapped signal (not SIGINT) reported by + Jonas Alfredsson + +jobs.c + - wait_sigint_cleanup: restore the old sigint handler before we longjmp + out by calling restore_sigint_handler() + + 5/17 + ---- +builtins/read.def + - bind_read_variable: now takes an additional argument, flags to pass + to builtin_bind_variable; change callers + - SET_VFLAGS: set vflags and bindflags + - read_builtin: call SET_VFLAGS to set vflags and bindflags from each + word before calling valid_array_reference and bind_read_variable + +builtins/common.c + - builtin_bind_variable: set vflags (for valid_array_reference) and + bindflags (for bind_variable/assign_array_element) separately for + clarity + +arrayfunc.c + - assign_array_element: sanity check: make sure that the subscript + returned by array_variable_name consumes the entire NAME, otherwise + flag it as a subscript error. This keeps things like + `KEY=' ]'; read assoc[$KEY] <<< hello' from assigning to incomplete + subscripts + +builtins/printf.def + - printf_builtin: if LIST_OPTFLAGS includes W_ARRAYREF, set VA_NOEXPAND + in VFLAGS + + 5/17 + ---- + +lib/readline/complete.c + - compute_lcd_of_matches: move a couple of strlen calls out of a loop + in calls to mbrtowc; performance improvement only. Report and fix + from sparrowhawk996@gmail.com + +lib/readline/bind.c + - rl_trim_arg_from_keyseq: take a key sequence and its length and + return the index into the key sequence following any initial numeric + argument. Return -1 if there is no numeric argument (the caller is + expected to make sure) or if the key sequence consists *only* of + the numeric argument. The caller should use the remainder of the + key sequence to look up the desired key binding. + +lib/readline/readline.h + - rl_trim_arg_from_keyseq: extern declaration + +bashline.c + - bash_execute_unix_command: if the argument count is > 1 or we have + an explicit argument, call rl_trim_arg_from_keyseq to get past the + numeric argument and deal with the rest of the key sequence. We still + need a way to pass it to the invoked program or function. From + a report from Jesper Nygards + + 5/18 + ---- + +bashline.c + - bash_execute_unix_command: if the user supplied a numeric argument + when invoking bash_execute_unix_command, pass it to the command in + the READLINE_ARGUMENT variable + +lib/readline/readline.[ch] + - _rl_del_executing_keyseq: convenience function to `delete' the last + character added to the executing key sequence. Intended to be used + before calling rl_execute_next or similar functions that push input + back to be re-read + +doc/{bash.1,bashref.texi} + - READLINE_ARGUMENT: documented new variable available for commands + defined using `bind -x' keybindings + +lib/readline/doc/rltech.texi + - rl_trim_arg_from_keyseq: documented new function 5/19 ---- -configure.ac,config.h.in - - getrandom: add test, define HAVE_GETRANDOM - - getentropy: add test, define HAVE_GETENTROPY -variables.c - - get_urand32: use getrandom; provide imperfect emulation that uses - getentropy if available, and falls back to reading /dev/urandom if - that's not available. The idea is to use /dev/urandom as little as - possible +builtins/evalstring.c + - should_suppress_fork: suppress the fork if we're in a process + substitution subshell, in addition to being a simple command + without redirections. From a report back in 10/2020 from + Hyunho Cho - 5/20 +bashline.c + - command_word_completion_function: if we're trying to complete an + absolute program (one containing a slash), don't run strcmp or + strcasecmp on the return value from rl_filename_completion_function, + since that duplicates work the filename completion function already + does. From a report back in 1/2021 by awa54@cdak.net + + 5/22 ---- -configure.ac - - updated version to 5.1-alpha +parse.y + - CHECK_FOR_RESERVED_WORD: if we are returning an ESAC and unsetting + PST_CASESTMT, decrement esacs_needed_count -lib/readline/readline.h - - updated defines to readline version 8.1 +parse.y,shell.h + - sh_parser_state_t: save and restore esacs_needed_count and + expecting_in_token in the shell parser state struct and + save_parser_state/restore_parser_state -variables.c - - brand: if shell_compatibility_level is 50 or below, don't xor the - top and bottom halves of the 32-bit random number together, since - previous versions did not +print_cmd.c + - print_simple_command: don't bother to call command_print_word_list + with an empty list + - print_simple_command: don't print a space before a redirection list + if there weren't any command words to print - 5/21 + 5/24 ---- -COMPAT - - overhauled and updated the descriptions of the various shopt compatNN - options -doc/bashref.texi - - Shell Compatibility Mode: new section, describes compatibility levels, - BASH_COMPAT, and the various compatNN shopt options +lib/sh/input_avail.c + - nchars_avail: make sure SET and OSET are declared on systems with + select(2). Reported by Larkin Nickle - 5/23 +parse.y + - cond_term: if we read a `!' toggle CMD_INVERT_RETURN instead of + setting it unconditionally. Report and patch from + Vincent Menegaux via + https://savannah.gnu.org/patch/?10070 + + 5/25 ---- -doc/bash.1 - - added Shell Compatibility mode section - doc/{bash.1,bashref.texi} - - changed shopt section to list the compatibility options and refer - to Shell Compatibility Mode section - - BASH_COMPAT: overhauled the text, refers to Shell Compatibility Mode - section + - test: add the ( $2 $3 ) case to the description of the four-argument + behavior. Inspired by a discussion with Christoph Anton Mitterer + 5/27 ---- -variables.c,/lib/sh/random.c - - moved functions that manage 16-bit and 32-bit random values to - lib/sh/random.c +doc/bashref.texi + - replace most of the GNU parallel section with a reference to the + tutorial on gnu.org -alias.c - - add_alias: don't bother checking null alias values for ending in - space or tab +lib/glob/glob.h + - GX_NEGATE: new flag; indicates whether the pattern is being negated + as part of an extglob pattern. Not used yet -braces.c,include/typemax.h - - move sh_imaxabs and overflow and underflow detection to typemax.h - so the expression evaluation code can use it in the future +lib/glob/glob.c + - extglob_skipname,wextglob_skipname: pass GX_NEGATE to the skipname + functions if the pattern is being negated. Not checked yet 5/28 ---- -lib/readline/kill.c - - _rl_bracketed_read_mbstring: make sure to fill in mb[0] even if - the locale says MB_CUR_MAX == 1 in case a caller uses it. Partial - fix for bug reported by Phi Debian +doc/{bash.1,bashref.texi} + - dotglob: add text to clarify that `.' and `..' have to be matched by + a pattern beginning with `.' or -- and this is the sketchy part -- + that a pattern beginning with `.' has to be one of the patterns in + an extended glob expression -lib/readline/vi_mode.c - - rl_vi_change_char: make sure _rl_vi_last_replacement gets filled in - in the case where MB_CUR_MAX == 1. Rest of fix for bug reported by - Phi Debian - - _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement - - 5/29 - ---- -lib/malloc/malloc.c - - __P -> PARAMS - - union mhead: now 16 bytes to force 16-byte alignment; extra 8 bytes - at the end of struct minfo to use for guard bytes. Enabled if - pointers are 64 bits (SIZEOF_CHAR_P == 8) - - if we have 64-bit pointers, prepopulate the 64-byte bin first instead - of the 32-byte bin (pointers and WORD_DESCs still fit into 32 bytes, - but WORD_LISTs are now 36 bytes with malloc overhead). We can still - split 64-byte blocks to satisfy 32-byte requests - - internal_malloc: fill in the new 8 mh_magic8 bytes with MAGIC1 guard - bytes - - internal_malloc: print a warning message if the returned pointer is - not aligned according to MALIGN_MASK - - internal_free: detect underflow by checking that mh_magic8 is full - of MAGIC1 bytes - - internal_realloc: detect underflow by checking that mh_magic8 is full - of MAGIC1 bytes - -lib/malloc/stats.c - - _print_malloc_stats: slight adjustment for better column alignment - - 6/1 - --- -execute_cmd.c - - execute_command_internal: treat a redirection failure with errexit - set as a command failure that exits the shell. Bug report from - Hyunho Cho +lib/glob/glob.c + - skipname,wskipname: perform the special checks for `.' only if the + pattern is not being negated 6/3 --- -redir.c - - redirection_error: takes a new argument, FN, which if non-NULL is - the filename to be used in the error message. +parse.y,shell.h + - eol_ungetc_lookahead: save and restore as part of the parser state + included in {save,restore}_parser_state -redir.[ch],builtins/evalstring.c - - redirection_error: changed extern declaration and callers - -redir.c - - do_redirection_internal: takes a new third parameter, FNP, a char ** - to use (*FNP, if non-NULL) to store and return the expanded filename - for those redirections that take one - - do_redirections: pass a char ** (&fn) to do_redirection_internal to - get a pointer to the expanded filename; pass it to redirection_error - if appropriate. Free FN in any case, since do_redirection_internal - won't. Fix for double expansion of filename in certain redirections - reported by Ouz - - 6/4 + 6/7 --- -parse.y - - parse_comsub: while we're reading a here-document, don't perform any - history expansion (set history_expansion_inhibited). Fixes issue - reported by "ladyrick" +lib/readline/display.c + - puts_face: make sure to cast each member of STR to unsigned char, so + it's not misinterpreted as EOF, which putc_face does not display. + Report and fix from Volodymyr Prodan in + https://savannah.gnu.org/patch/?10076 -general.h,parse.y - - __P -> PARAMS - -shell.c - - shellstart: struct timeval used to initialize shell starting time; - shell_start_time now initialized from shellstart.tv_sec - -variables.c - - assign_seconds: reset shellstart to set shell starting time - -pcomplete.c - - include posixtime.h instead of - -lib/sh/{ufuncs,uconvert}.c - - include posixtime.h instead of the inline conditional includes - -aclocal.m4 - - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the - deprecated AC_HEADER_EGREP - -posixtime.h - - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement - definition - -lib/sh/gettimeofday.c - - gettimeofday: replacement function, so we don't have to use - HAVE_GETTIMEOFDAY in the rest of the code - - 6/5 - --- -{lots of files}.[ch] -builtins/{lots of files}.{c,h,def} -lib/glob/{lots of files}.[ch] -lib/malloc/{lots of files}.[ch] -lib/sh/{lots of files}.c -include/{lots of files}.h -examples/loadables/{lots of files}.c - - __P -> PARAMS - -doc/{bash.1,bashref.texi} - - SECONDS: clarify that the number of seconds is always determined by - querying the system clock - - 6/8 - --- -configure.ac - - if CFLAGS is not supplied in the environment or on the command line, - add the gcc options that suppress warnings about parens and print - formats in a slightly different way that will avoid some collisions - -lib/readline/readline.c - - _rl_dispatch_subseq: don't set rl_last_func to rl_vi_arg_digit, just - the same as if it were rl_digit_argument. This allows functions like - rl_yank_last_arg, which behave differently when called multiple times - in a row, to work closer to what is expected. This allows what - Leo Alekseyev reported to work, with caveats - -lib/readline/vi_mode.c - - rl_vi_yank_arg: make sure to pass `key' to rl_yank_nth_arg, in case - it needs to use it later - - rl_vi_redo: suppress attempts to redo `.' when the current keymap is - vi_movement_keymap, since that will recursively call vi_redo +examples/shobj-conf + - aix*gcc: change SHOBJ_LD to ${CC}, prefix the SHOBJ_LDFLAGS flags + with -Wl, so gcc will pass them to the linker. Report from + lehel@maxer.hu in https://savannah.gnu.org/support/?110505 6/11 ---- -redir.c - - limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can - handle atomic writes without hanging. Tested on FreeBSD 13 +doc/{bash.1,bashref.texi} + - cd: additional arguments are not ignored; they raise an error. + Report from Douglas McIlroy -[bash-5.1-alpha frozen] +lib/glob/strmatch.h + - FNM_DOTDOT: enable special handling for `.' and `..': if FNM_PERIOD + is not set, `.' and `..' at the start of a string or as a pathname + component need to be matched by a `.' in the pattern and cannot be + matched by `?', `*', or a bracket expression + +lib/glob/glob.c + - glob_vector: pass FNM_DOTDOT to strmatch() if noglob_dot_filenames + is not set to enable special handling of `.' and `..'. Prompted by a + discussion with Nora Platiel + - skipname,wskipname: remove special checks for `.' and (disabled) + checks for `..' - 6/15 - ---- -subst.c - - do_assignment_internal: call stupidly_hack_special_variables on the - name returned from the variable assignment, in case there was a - nameref expansion, and on the original name only if the assignment - returned NULL. Fixes bug reported by James D. Lin +lib/glob/sm_loop.c + - GMATCH: implement special handling for FNM_DOTDOT and `.' and `..': + make sure they can't be matched by any special glob characters at + the start of the string or as a pathname component (if FNM_PATHNAME + is set). This also means that !(pattern) won't return `.' or `..' + if dotglob is set + - GMATCH,EXTMATCH: don't pass FNM_DOTDOT down to recursive calls, like + FNM_PERIOD, once we process the first character in the string or + pathname component + +lib/glob/smatch.c + - ISDIRSEP,PATHSEP,SDOT_OR_DOTDOT,PDOT_OR_DOTDOT: provide definitions + for single-byte or wide character strings for sm_loop.c to use 6/16 ---- -builtins/hash.def - - hash_builtin: don't print anything if the hash table is empty when - listing portably (-l) unless the shell compatibility level is <= 50 - Issue originally raised by - 6/17 +doc/{bash.1,bashref.texi},lib/readline/doc/{rluser,rltech}.texi + - slight wording changes to rewrite gender-specific language. From a + report by Vipul Kumar , suggested + language from G. Branden Robinson , + Lawrence Velázquez , + and Andrew Church + +builtins/fc.def + - fc_builtin: make sure an entry in the history list is non-null + before trying to write it to stdout or the temporary file. From a + report from Sibo Dong + +builtins/common.[ch] + - builtin_arrayref_flags: given a WORD_DESC * (which includes flags) + and a base set of flags, return a set of flags to pass to + valid_array_reference and similar functions + +builtins/set.def + - unset_builtin: call builtin_arrayref_flags to set vflags + + 6/19 ---- -pathexp.c - - glob_name_is_acceptable: extend GLOBIGNORE to ignore `.' and `..' - as a terminal pathname component instead of just ignoring filenames - that are `.' or `..'. From a suggestion by Ilkka Virta - - 6/18 - ---- -po/Makefile.in.in - - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have - to create the variable manually +parse.y + - parse_comsub: rewrite to recursively call the parser (yyparse()) and + return a string constructed from the resulting parse tree. Probably + will only work with bison. Error reporting is more accurate about + line numbers and invalid tokens, and command substitution errors + are caught earlier, before expansion + - DOLPAREN: new token, never created by yylex; only ever set by + parse_comsub and xparse_dolparen to indicate we're recursively + calling the parser for a command substitution + - comsub: new grammar production that's triggered by DOLPAREN and + parses a command substitution, returning a . It's one of + the possible end states for the top-level parser + - grammar: only call rewind_input_string if the shell's input is + coming from a string + - shell_ungets: push a string back onto the shell input; only used by + make_here_document for backwards compatibility -- allowing a here- + document to be terminated by a token at the end of a command + substitution + - yylex: don't need any more special handling when returning + shell_eof_token, but we keep the clause for future work + - read_token_word: don't handle backslashes (leave them in the input + stream) if we are reading a command substitution (PST_NOEXPAND) + - reserved_word_acceptable: allow reserved words after DOLPAREN + - report_syntax_error: better error handling if we hit EOF while + looking for the ending right paren in a command substitution + - parse_string_to_word_list,parse_compound_assignment: make sure to + turn off parse_comsub sentinel temporarily -lib/readline/doc/rltech.texi - - add descriptions of the active mark functions that are available to - applications. I guess they will remain public +make_cmd.c + - make_here_document: backwards compatibility: if we end a here + document on the same line as the end of a command substitution, + allow the token to terminate the here document (without requiring + a newline) and push the remainder of the line back for the parser + to consume and terminate the command substitution -subst.c - - valid_parameter_transform: new function, reject transformations - longer than a single character or invalid transformation operators - - parameter_brace_transform: call valid_parameter_transform +builtins/evalstring.c + - parse_string: if we read shell_eof_token and use it to terminate a + command, rewind the input string here before returning, instead of + guessing where to rewind it in the caller 6/22 ---- -lib/sh/zread.c - - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by - Jason A. Donenfeld -lib/sh/zcatfd.c - - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096) +redir.c + - do_redirection_internal: if VARASSIGN_REDIR_AUTOCLOSE is non-zero, + add a redirect to automatically close {var} - -xmalloc.c - - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think - it works - -examples/loadables/finfo.c - - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke - - -unwind_prot.c - - unwind_protect_mem_internal: make sure we allocate at least as many - bytes for an entire UNWIND_ELT. Fix from Jessica Clarke - - - 7/1 - --- -eval.c - - alrm_catcher: use write(2) instead of fprintf to print the - auto-logout message to the terminal - -jobs.c - - UNQUEUE_SIGCHLD: set queue_sigchld to 1 around call to waitchld(), - since it is not being called from a signal handler and so SIGCHLD is - not blocked. Fixes report by Godmar Back - - 7/2 - --- doc/{bash.1,bashref.texi} - - read: clarify that without any name arguments, the line assigned to - REPLY is not modified. From a question by M. Nejat AYDIN - with input from Eli Schwartz - + - varredir_close: document new shell option (the name is tentative) - 7/5 - --- -lib/readline/vi_mode.c - - _rl_vi_done_inserting: make sure to close out all undo groups when - leaving insert mode, so we don't have anything dangling. - Report and fix from David Fries + 6/24 + ---- - 7/6 - --- -lib/readline/vi_mode.c - - _rl_vi_domove_motion_cleanup: the `c' and `C' commands should enter - insert mode even if the motion command doesn't delete any text. - From a report by David Fries - - _rl_vi_done_inserting: add a missing rl_end_undo_group when - _rl_vi_doing_insert is set: there should be one begun by - rl_vi_start_inserting and one begun by the command (change or replace). - From a report by David Fries - - rl_vi_replace: set _rl_vi_last_key_before_insert to 'R' explicitly, - since other code checks that and we want to allow users to rebind - this function +parse.y + - yylex: if read_token returns a value < 0, return YYerror to the + parser + - parse_comsub: if the current_token is not shell_eof_token when + yyparse returns, return an error to read_token_word instead of + trying to keep parsing. Fixes interactive-only (?) bug reported by + Koichi Murase - 7/7 - --- -lib/readline/vi_mode.c - - rl_vi_{delete,change,yank}_to: if we have a non-null _rl_vimvcxt, - just reinitialize it so we don't have to allocate a new one. This is - a change primarily for callback mode, and fixes a memory leak +parser.h + - PST_NOERROR: don't print error messages in yyerror(), just reset + the parser and return -builtins/evalstring.c - - optimize_shell_function: try to optimize away the fork in the last - command in a shell function body, under certain conditions +parse.y + - yyerror: if parser_state & PST_NOERROR, don't print an error message + - xparse_dolparen: if the flags includes SX_COMPLETE, add PST_NOERROR + to parser_state, to inhibit error messages. Fixes bug with adding + lines with incomplete command substitutions to the history list + reported by Koichi Murase -execute_cmd.c - - execute_function: attempt to optimize away forks in a shell function - that is already marked NO_FORK and being executed in a command - substitution +subst.c + - skip_matched_pair: make sure to pass the SX_COMPLETE flag to + extract_delimited_string - 7/8 - --- -{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c - - interrupt_immediately: remove, no longer used + 6/28 + ---- -jobs.c - - waitchld: don't perform asynchronous notification if we are currently - executing a builtin (executing_builtin != 0). Inspired by a report - from Godmar Back +lib/readline/bind.c + - rl_trim_arg_from_keyseq: handle rl_vi_arg_digit if VI_MODE is + defined. Report and fix from Koichi Murase + - rl_trim_arg_from_keyseq: rework to handle case where the digit + argument is given as a discrete sequence of multiple rl_digit_argument + commands (e.g, "M-1 M-2" instead of "M-1 2"). Report and fix from + Koichi Murase + +subst.c + - pat_subst: avoid calling RESIZE_MALLOCED_BUFFER with STRLEN(s) as an + argument, since it ends up going into a loop. Report and fix from + Koichi Murase + +lib/sh/casemod.c + - cval: take the string length as an argument, to avoid having to call + strlen every time (in HANDLE_MULTIBYTE mode). The caller already has + this info. Report and fix from Koichi Murase + +builtins/complete.def + - print_cmd_name: single-quote the command name if it contains any + shell metacharacters + - print_one_completion: call print_arg with a second arg of 1 if the + function name contains shell metacharacters. Report and fix from + Koichi Murase + + 6/30 + ---- + +configure.ac + - substitute BASE_CFLAGS_FOR_BUILD and STYLE_CFLAGS into Makefile + targets + - take STYLE_CFLAGS out of the CFLAGS_FOR_BUILD variable that gets + substituted + - remove STYLE_CFLAGS from CFLAGS + - use `:+' expansion to set variables based on whether $GCC is set + or null, since configure can do GCC= + +support/Makefile.in + - man2html: remove CCFLAGS_FOR_BUILD from the recipe, leaving only + LDFLAGS_FOR_BUILD. Report from Jay K + - gen-helpfiles: remove CCFLAGS_FOR_BUILD from the recipe, leaving + only LDFLAGS_FOR_BUILD + - man2html: use $(STYLE_CFLAGS) in BASE_CCFLAGS variable for C file + compilation options + +{,builtins}/Makefile.in, lib/{sh,readline,malloc,glob}/Makefile.in + - use STYLE_CFLAGS so specifying CFLAGS=-g to make doesn't clutter the + output with warnings about parens and format strings 7/9 --- -lib/readline/signals.c - - _rl_handle_signal: block SIGTTOU while handling a SIGTTOU, since we - no longer run this in a signal handling context where SIGTTOIU would - be blocked +lib/readline/search.c + - make_history_line_current: call _rl_free_saved_history_line to clean + up _rl_saved_line_from_history and get all the code that frees it + into one place - 7/14 +lib/readline/misc.c + - _rl_free_saved_history_line: if rl_undo_list points to the data + member of _rl_saved_line_from_history, set it to NULL to avoid having + it point to freed memory, since the next thing we do now is to free + the undo list the data member points to + - _rl_start_using_history: call _rl_free_saved_history_line instead of + calling _rl_free_history_entry directly. Fixes memory leak reported + by Trung Dam + + 7/12 ---- -execute_cmd.c - - execute_simple_command: use new variable `cmdflags' instead of using - simple_command->flags directly; initialize from simple_command->flags - - check_command_builtin: take a simple command list of words starting - with `command' and including a command_word argument, and peel off - the `command' and any instances of `-p' and `--' and return the - updated list - - execute_simple_command: if the first word of the simple command is - `command', call check_command_builtin to peel off any `command' and - `-p' and `--' and go on to execute the rest of the words as a simple - command. If we're in posix mode, we've got the special builtins - handled before this runs. Fixes complaint about `command' in the - background running an extra bash process from Dmitry Alexandrov - +lib/readline/search.c + - make_history_line_current: free rl_undo_list before replacing the + current line with the line from history, since it is a private + undo list from reading the search string + +lib/readline/rlmbutil.h + - Since wchar_t/mbrtowc/wcrtomb are limited to 16 bits on Windows + with MSVC, start abstracting the differences using WCHAR_T/ + MBRTOWC/WCRTOMB + + 7/13 + ---- + +lib/readline/{complete,display,input,text,util,vi_mode}.c + - use WCHAR_T/MBRTOWC/WCRTOMB. Part of a set of Windows MSVC fixes + from sparrowhawk996@gmail.com + +builtins/{enable,hash,help}.def + - enable_builtin: use sh_chkwrite after output to check for write errors + + 7/16 + ---- +arrayfunc.c + - quote_compound_array_word: free SUB and VALUE after assigning from + sh_single_quote(). From a coverity report from + Siteshwar Vashisht + +bashhist.c + - bash_remove_history_range: free DISCARD_LIST after freeing its + elements + +bashline.c + - bash_directory_expansion: add code to free D as a separate branch, + though it's never hit in practice + +builtins/trap.def + - showtrap: free T even if show_default == 1 if it's a non-default + trap string 7/17 ---- -doc/bash.1 -lib/readline/doc/{rltech,hstech,rluser}.texi -lib/readline/doc/{readline,history}.3 - - a few small tweaks to make the language gender-neutral +execute_cmd.c + - execute_coproc: free NAME on invalid identifier error + +lib/glob/glob.c + - glob_vector: make sure NEXTLINK is allocated using malloc before + passing it to free() + - glob_filename: free RESULT before returning glob_error_return when + there is only a filename + +print_cmd.c + - indirection_level_string: make sure we free PS4 after calling + decode_prompt_string if *ps4 == 0 - 7/18 - ---- subst.c - - expand_word_internal: case `:' make sure the shell is either not in - posix mode or W_TILDEEXP is set before turning on W_ITILDE. The old - code would turn it on unconditionally if the W_ASSIGNMENT flag was - set. Fixes bug reported by Ouz + - parameter_brace_transform: if vtype == VT_VARIABLE, we need to free + a non-null VAL - 7/20 - ---- -builtins/complete.def - - replace macros used to print compspec actions, options, and other - info with a small set of functions that traverse the structs used - to hold that information and print everything instead of eumerating - each option and action separately. From a patch submitted by - Martin Kealey - - 7/27 - ---- variables.c - - push_posix_tempvar_internal: restore $SHELLOPTS after restoring the - values of shell options saved by `local -' by calling set_shellopts(). - Report from Grisha Levit + - assign_in_env: if NAME is not a valid shell identifier, free it + after printing the error message and before returning. These are + the rest of the fixes from Siteshwar Vashisht -flags.c - - reset_shell_flags: set histexp_flag to 0 and let bash_history_reinit - take care of setting history_expansion appropriately. Report and fix - from Grisha Levit + 7/22 + ---- +shell.c + - main: set dollar_vars[0] to shell_script_filename before calling + run_startup_files() in the non-interactive case. Restore it after + run_startup_files returns so we can get better error messages if + we can't open a script file. Suggested by several people, originally + by Marc Aurèle La France back in 2/2021 (in a + different form) and most recently by Tapani Tarvainen + 7/28 ---- -general.c - - assignment: if (FLAGS & 1), we are parsing the contents of a compound - assignment, and a word must begin with a `[' and have a valid - subscript terminated by `]' before the `=' to be considered an - assignment statemen and subsequently expanded like one. Report from - Alexey Izbyshev +trap.c + - any_signals_trapped: return that a signal is trapped only if it's + not ignored. This is an additional opportunity for optimization, + reported in https://bugzilla.redhat.com/show_bug.cgi?id=1981926 7/30 ---- -lib/glob/sm_loop.c - - BRACKMATCH: if the bracket expression is matching simple characters - and not a range, compare the character from the string and the - pattern directly, as required by Posix interp 948 +examples/loadables/sleep.c + - main: if the uconvert conversion fails, but the argument appears to + contain a GNU-like interval specifier like "1m30s", return + EX_DISKFALLBACK so the execute_builtin code tries to run the + external version -lib/glob/smatch.c - - charcmp_wc: split off code that calls wcscoll from rangecmp_wc, - just return the results of wcscoll - - rangecmp_wc: call charcmp_wc and impose a total ordering - by performing a byte comparison (or wint_t comparison) of C1 and C2 - as required by Posix interp 948 (charcmp_wc takes care of the - behavior of FORCECOLL) - - collequiv_wc: call charcmp_wc instead of rangecmp_wc - - charcmp: character comparison code from rangecmp - - rangecmp: call charcmp and impose total ordering as required by - Posix interp 948 - - collequiv: call charcmp instead of rangecmp - - _fnmatch_fallback: ASCII version of fallback for equivalence classes - when there are no multibyte characters in the pattern; just calls - fnmatch with a reconstructed equivalence class pattern - - collequiv: call _fnmatch_fallback if charcmp returns non-zero and - the configure check indicates fnmatch has character class support. - Fixes issue reported by Harald van Dijk +builtins/enable.def + - enable_shell_builtin: if the builtin isn't found, return EX_NOTFOUND + to allow the caller (enable_builtin) to react differently if it + wants to + - dyn_load_builtin: if the shared object isn't found, return EX_NOTFOUND, + change enable_builtin to deal with it + - enable_builtin: if there are no supplied options, and we attempt to + enable a non-existent builtin, try modifying `enable name' to the + equivalent of `enable -f name name' and return success if we + successfully load a builtin from a shared object. Proposed several + times, most recently by Robert Elz - 8/2 - --- -lib/readline/signals.c - - _rl_handle_signal: since we're not called in a signal handler context - any more, we don't need to explicitly unblock the signal we received - so the application's signal handler will get it when we resend the - signal to ourselves. It doesn't hurt anything to do it, but we don't - have to - - _rl_handle_signal: Set up a framework for any signals that need to - be blocked during cleanup: add the signal to SET (initialized to the - existing set of blocked signals) and set BLOCK_SIG to 1. We block - that set around the call to rl_cleanup_after_signal(). - - _rl_handle_signal: on AIX, if the signal is SIGHUP, make sure we - block SIGHUP while running rl_cleanup_after_signal() +doc/{bash.1,bashref.texi} + - enable: document new behavior of `enable NAME' when NAME is not a + current shell builtin 8/3 --- -jobs.c - - start_job: don't allow `fg' or `bg' in a command substitution to - attempt to start a parent's jobs. Suggested by Ouz - +lib/glob/sm_loop.c + - GMATCH: check for interrupts or terminating signals each time through + the loop and return FNM_NOMATCH immediately if received. Let the + higher layers deal with interrupting the match and jumping out. + Inspired by a report from andrej@podzimek.org -builtins/set.def - - set_current_options: only call change_flag or SET_BINARY_O_OPTION_VALUE - if the value has changed from what is stored in the bitmap, to avoid - any side effects from setting the options and save time on any - unnecessary function calls. Inspired by report from Grisha Levit - - -parse.y - - xparse_dolparen: before we jump to top level, check whether we are - still reading from the string (we might have run all the unwind- - protects) and turn off PST_CMDSUBST if we are not. Fixes fuzzing - bug reported by Jakub Wilk - - 8/4 + 8/6 --- subst.c - - process_substitute: set subshell_environment to include SUBSHELL_ASYNC - in the child process, since we passed FORK_ASYNC to make_child. Fixes - DEBUG trap problem reported by Jonathan Rascher + - {parameter_brace_remove_pattern,parameter_brace_transform, + parameter_brace_substring,parameter_brace_casemod, + parameter_brace_patsub}: make sure the IND argument is of type + arrayind_t to handle the full range of subscripts. Reported by + felix@f-hauri.ch + +builtins/printf.def + - printf_builtin: take new format specifier: %Q. This acts like %q + but applies any supplied precision to the original unquoted + argument, then quotes that result and outputs the entire quoted + string, preserving the original field width. Originally suggested + back in 4/2020 by Sam Liddicott subst.c - - unlink_all_fifos: new function, just unconditionally closes and - unlinks (if using FIFOs) each pipe used for process substitution. - There is an open to unblock any child processes sleeping on the - FIFO first. Inspired by a suggestion from "CHIGOT, CLEMENT" - + - char_is_quoted: check whether or not we are on the second or later + line of a command with an unclosed quoted string from a previous + line. If we are, see if it's closed before the character we're + checking, so we don't interpret a closing quote as starting a new + quoted string. Reported several times, most recently by + Phi Debian in 6/2021. -shell.c - - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list() - -sig.c - - termsig_handler: call unlink_all_fifos() instead of - unlink_fifo_list() - - 8/5 + 8/9 --- -arrayfunc.c - - quote_compound_array_list: turn empty strings into '' instead of - leaving them unmodified. Fixes bug in changes from 4/29 reported - by andy_bash +parse.y,subst.c + - locale_expand: if the variable SINGLEQUOTE_TRANSLATIONS is non-zero, + single-quote the translated result of $"..." (if it's different from + the untranslated string) + +builtins/shopt.def + - noexpand_translation: new option to expose the value of + SINGLEQUOTE_TRANSLATIONS 8/10 ---- -bashline.c - - edit_and_execute_command,bash_execute_unix_command: restore the bash - signal handlers before running parse_and_execute() so bash will catch - and handle signals, instead of letting readline catch them without - any opportunity to run _rl_handle_signal(). Fixes bug reported by - Stan Marsh +doc/{bash.1,bashref.texi} + - noexpand_translation: add description of new option - 8/11 + 8/16 ---- -builtins/fc.def - - fc_gethnum: return HIST_INVALID for -0 if not in listing mode - - fc_builtin: throw an out-of-range error if histbeg or histend gets - set to HIST_INVALID - - fc_builtin: don't throw errors for other out-of-range history - specifications, clamp them at the beginning or end of the history - list, as appropriate, per POSIX. Report and fix from Martijn Dekker - +builtins/printf.def + - printf_builtin: initialize retval after parsing arguments, since we + use it for the `v' option. Bug report from Keith Thompson + - 8/12 - ---- -builtins/fc.def - - fc_gethnum: return HIST_NOTFOUND (new error) if the string is not a - number and doesn't correspond to any command in the history list - - fc_builtin: print a "no command found" error message if fc_gethnum - returns HIST_NOTFOUND - - 8/14 - ---- -flags.c - - no_invisible_vars: removed undocumented `-I' flag - -{flags,variables}.c,flags.h,builtins/{declare,setattr.def} - - no_invisible_vars: remove all references - -command.h - - PF_ALLINDS: new flag, means to expand an array variable name without - a subscript as if it were subscripted by `@' instead of `0' - -subst.c - - parameter_brace_expand_word: if PFLAGS contains PF_ALLINDS, expand - an array variable name as if it were subscripted by "@" instead of - 0/"0": a string with the element values separated by " ". Little - nuance; we're just interested in whether or not there are any - values at all - - parameter_brace_expand: if we are expanding something like ${foo@a}, - pass PF_ALLINDS to parameter_brace_expand_word and - parameter_brace_expand_indir so we don't get tripped up on `nounset' - if foo has an assigned subscript other than 0/"0". Inspired by a - report from Andrew Neff +lib/sh/unicode.c + - u32tocesc: fix typo that returned \uXXXXXXXX instead of \UXXXXXXXX. + From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992257 by + 8/17 ---- -bashhist.c - - bash_add_history,maybe_add_history: don't need to call shell_comment - if we are in the middle of adding a here-document, since it may - call the parser recursively on data that is not guaranteed to be - valid input. From a report by Hyunho Cho +siglist.c + - include command.h before general.h for PARAMS and prototypes. Report + from Osipov, Michael (LDA IT PLM) - 8/24 + 8/18 ---- -lib/readline/complete.c - - compare_match: compare TEXT from the line buffer and MATCH, a - possible completion for TEXT, after dequoting TEXT if necessary - - rl_complete_internal,rl_menu_complete : if show-all-if-unmodified is - set, use compare_match instead of a straight strcmp to determine if - the match has changed the text to complete, so we can use it for - filenames that require quoting. Report and pointer to fix from - Abon B +lib/readline/colors.c + - S_ISBLK: make sure it's defined before we use it, like in complete.c - 8/25 - ---- -eval.c - - execute_prompt_command: PROMPT_COMMAND can now be an array, subsuming - PROMPT_COMMANDS, which bash no longer looks for. Prompted by a - suggestion from Martijn Dekker +lib/readline/complete.c,{bashline,variables}.c + - minor changes to prep for making rl_completer_word_break_characters + `const' - 8/26 +subst.[ch],pcomplete.c + - split_at_delims: the DELIMS argument is now `const'; change callers + +lib/readline/rlmbutil.h + - _rl_wcwidth: add function prototype for inline function declaration + +lib/readline/bind.c + - _rl_get_keyname: print keys greater than 160 (which are valid UTF-8) + as octal escape sequences + +lib/readline/text.c + - do_lowercase_version: return 99999 to prevent the linker from + combining it with _rl_null_function and optimizing away the separate + copy. That messes with function pointer comparisons. Part of this + batch of fixes from sparrowhawk996@gmail.com + + 8/19 ---- -builtins/fc.def - - fc_gethnum: now takes a flags word as the third argument, with two - current flag values: HN_LISTING, which means we are listing history - entries, and HN_FIRST, which means we are parsing the first in a - first,last range of history entries - - fc_gethnum: if we have a number >= 0, and it's out of range, return - different values (0 or last history) depending on whether we are - parsing the first or last in a range argument. Based on a report from - Martijn Dekker +complete.c,readline.c,readline.h + - rl_completer_word_break_characters: now const char * like + rl_basic_word_break_characters; element of readline state struct + used to save it also const. THIS IS AN API CHANGE + +bashline.c + - orig_rl_completer_word_break_characters: now const char * like + rl_completer_word_break_characters + + 8/20 + ---- +bashline.c + - bash_directory_completion_hook: if direxpand and dirspell are both + set while trying to complete an absolute pathname as a command, don't + take a spell-corrected directory name that is shorter than the + original hint. https://bugzilla.redhat.com/show_bug.cgi?id=1782809 + +builtins/common.[ch] + - sh_noassign: convenience function to print an error message when a + user attempts an assignment to a "noassign" variable. Not used yet + +assoc.[ch] + - assoc_to_kvpair_list: new function, returns a WORD_LIST containing + key-value pairs as separate words + +array.[ch] + - array_to_kvpair_list: new function, returns a WORD_LIST containing + index-value pairs as separate words + +subst.c + - string_transform: handle '@k' transform like '@K' + - valid_parameter_transform: 'k' is a valid transform operator + - array_transform: handle '@k' transformation by calling one of + array_to_kvpair_list or assoc_to_kvpair_list and treating the + result as if expanding the array depending on whether the index is + `@' or `*' with the usual meanings + +doc/{bash.1,bashref.texi} + - document new '@k' parameter transformation operator + + 8/27 + ---- +lib/readline/kill.c + - rl_unix_filename_rubout: handle pathnames that consist only of one + or more slashes. The old code went too far and deleted the previous + word as well. From dabe@dabe.com 8/31 ---- parse.y - - grammar: call handle_eof_input_unit from the eof-after-error - production only from interactive top-level shells, so a syntax error - in `eval' doesn't exit an interactive shell. Report and fix from - Koichi Murase + - STRING_SAVER: now save and restore shell_input_line_len; not sure + why it wasn't done before; fix push_string and pop_string accordingly + - prompt_again: now takes a parameter FORCE; not used yet (every + caller passes 0), needs more thought -bashline.c - - bash_execute_unix_command: if we call parse_and_execute with allocated - memory, make sure not to include SEVAL_NOFREE in the flags so it will - free that command string before returning. Report and fix from - Koichi Murase +builtins/evalstring.h + - open_redir_file: broke code that expands the redirection and opens + the resultant filename into a new function, called from cat_file -array.[ch] - - array_to_argv: now takes a second argument: COUNTP; returns the number - of elements stored in the strvec - - array_to_argv: don't store array elements with null values; it makes - it hard for callers to walk the whole array reliably +redir.h + - open_redir_file: extern declaration here for now -pcomplete.c - - gen_shell_function_matches: change call to array_to_argv +builtins/evalstring.c + - parse_string: takes a new argument: COMMAND **cmdp; if non-null, saves + the parsed command to *cmdp and lets the caller manage it itself. + global_command is still not modified. Changed callers in parse.y -array.h - - execute_array_command: now takes the entire ARRAY * as the first - parameter - -eval.c - - execute_array_command: now takes the entire array, puts the elements - into a strvec, and executes each element of the strvevc as a command. - This protects against a command from PROMPT_COMMAND[n] unsetting the - corresponding element of PROMPT_COMMAND. - From a report from Koichi Murase - - 9/7 + 9/1 --- -[bash-5.1-beta frozen] +parse.y + - parse_string_to_command: stripped-down version of xparse_dolparen + that takes a string, runs it through the parser, and returns the + resultant COMMAND *; uses parse_string with the new argument + +externs.h + - parse_string_to_command: extern declaration + +builtins/evalstring.c + - can_optimize_cat_file: new function, takes a COMMAND * argument and + returns true if the command can be optimized like $(&", see if we can optimize the command and call + optimize_cat_file to do it if we can. + + 9/2 + --- +configure.ac,config.h.in,lib/sh/setlinebuf.c + - SETVBUF_REVERSED: remove all references + +configure.ac,aclocal.m4 + - AC_OUTPUT: move created files and commands to AC_CONFIG_FILES and + AC_CONFIG_COMMANDS; call AC_OUTPUT without any arguments + - require autoconf version 2.63 + - AC_HELP_STRING -> AS_HELP_STRING + - replace references to $ac_cv_prog_gcc with $GCC + - AC_C_LONG_DOUBLE -> AC_TYPE_LONG_DOUBLE + - enable-alt-array-implementation: new configure option, placeholder + for later + +unwind_prot.c + - stddef.h: include if HAVE_STDDEF_H is defined, not STDC_HEADERS + +bashansi.h + - memory.h: don't include any more; assume has all the + necessary defines + +aclocal.m4 + - AC_HEADER_STDC: remove AC_REQUIRE calls to this; change tests to use + appropriate checks instead of STDC_HEADERS + + 9/3 + --- +configure.ac,config.h.in + - AC_TYPE_SIGNAL,BASH_TYPE_SIGHANDLER: remove calls, remove mention of + RETSIGTYPE and VOID_SIGHANDLER + - AC_USE_SYSTEM_EXTENSIONS: use this instead of AC_ISC_POSIX (which is + well and truly obsolete) and AC_MINIX (which just calls it anyway). + All the right defines are already present + - AC_HEADER_TIME: removed + - AC_HEADER_STDC: removed + - AC_DECL_SYS_SIGLIST: replaced with BASH_DECL_SYS_SIGLIST + - BASH_FUNC_CTYPE_NONASCII: removed + +sig.h,lib/readline/signals.c + - RETSIGTYPE -> void, SIGHANDLER_RETURN -> return + +include/posixtime.h + - don't bother with TIME_WITH_SYS_TIME, just include if + we have it and include unconditionally + +include/chartypes.h,lib/readline/chardefs.h + - IN_CTYPE_DOMAIN: no longer uses STDC_HEADERS define, checks against + CHAR_MAX for non-C89 systems, still a no-op on C89 systems + +lib/readline/chardefs.h + - memory.h: don't include, no need for STDC_HEADERS; assume the mem* + functions are defined in as in C89 + - now that we assume IN_CTYPE_DOMAIN bounds its argument to unsigned + chars, we don't need NON_NEGATIVE checks at all + +lib/readline/chardefs.h,util.c + - ALPHABETIC -> _rl_alphabetic_p 9/8 --- -lib/readline/display.c - - _rl_update_final: don't bother doing anything if the line structures - have not been initialized. Report and fix from gary@catalyst.net.nz -variables.c - - get_histcmd: perform the same adjustment as in prompt_history_number; - make sure to subtract one if we're doing this while executing a - command that has already been saved to the history list. Inspired - by a report from L A Walsh +lib/sh/strftime.c + - include after reworking above; include + unconditionally in case it defines time_t. From a report by + Ori Sky Farrell - 9/14 + 9/9 + --- +lib/readline/search.c + - rl_history_search_internal: set rl_undo_list to NULL after calling + rl_maybe_save_line, since it will be restored one way or another + after the search completes, and we don't want it to be freed twice + - rl_history_search_internal: leave the current history offset at the + position of the last matching history entry. This means that things + like ^P will start back from that history entry, ^N will move + forward from there, and operate-and-get-next will work like it does + with incremental searches. Reported by Vandrus Zoltán + + + 9/10 ---- aclocal.m4 - - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported - by Andreas K. Hüttel + - BASH_C_LONG_LONG: removed + - BASH_TYPE_LONG_DOUBLE: removed + - BASH_TYPE_LONG_LONG,BASH_TYPE_UNSIGNED_LONG_LONG: removed + - BASH_FUNC_CTYPE_NONASCII: removed + - BASH_SYS_SIGNAL_VINTAGE,BASH_SYS_REINSTALL_SIGHANDLERS: don't + require AC_TYPE_SIGNAL, use void instead of RETSIGTYPE + - BASH_TYPE_SIGHANDLER: removed -syntax.h - - slashify_in_here_document: restore previous value that doesn't - include double quote, since it's only special in certain cases +configure.ac,aclocal.m4,config.h.in + - BASH_TYPE_LONG_LONG: removed, call AC_TYPE_LONG_LONG_INT directly, + change #define to HAVE_LONG_LONG_INT + - BASH_TYPE_UNSIGNED_LONG_LONG: removed, call AC_TYPE_UNSIGNED_LONG_LONG_INT + directly, change #define to HAVE_UNSIGNED_LONG_LONG_INT -subst.c - - expand_word_internal: when processing backslash-double quote inside - a ${...} construct inside a here documemt, treat it the same as if - it were double-quoted, as posix says. Fixes report from - Andreas Schwab +externs.h,include/typemax.h,lib/sh/{fmtullong,snprintf,strtoimax,strtoll, +strtoull,strtoumax}.c + - HAVE_LONG_LONG -> HAVE_LONG_LONG_INT + - HAVE_UNSIGNED_LONG_LONG -> HAVE_UNSIGNED_LONG_LONG_INT - 9/15 +configure.ac + - AC_TRY_COMPILE -> AC_COMPILE_IFELSE + - BASH_CHECK_TYPE (intmax_t) -> AC_TYPE_INTMAX_T + - BASH_CHECK_TYPE (uintmax_t) -> AC_TYPE_UINTMAX_T + - BASH_CHECK_TYPE (sig_atomic_t): removed + +aclocal.m4 + - BASH_FUNC_STRSIGNAL: changed to use AC_LINK_IFELSE + - BASH_FUNC_LSTAT: changed to use AC_LINK_IFELSE + - BASH_FUNC_SBRK: changed to use AC_LINK_IFELSE and AC_RUN_IFELSE, + fixed typo + - BASH_CHECK_SPEED_T: changed to use AC_COMPILE_IFELSE + - BASH_TYPE_SIG_ATOMIC_T: use BASH_CHECK_TYPE instead of AC_CHECK_TYPE + - BASH_STRUCT_DIRENT: new macro, like _AC_STRUCT_DIRENT but public and + sets a different bash-specific shell variable + - BASH_STRUCT_DIRENT_D_{INO,FILENO,NAMLEN}: call BASH_STRUCT_DIRENT + with a different first argument instead of using inline code and + AC_TRY_COMPILE + + 9/11 ---- -support/signames.c - - added a number of more esoteric signal names from AIX and Solaris +[prayers for the victims of 9/11/2001] -parse.y - - report_syntax_error: make sure that the exit status is only set to - one of the special builtin exit statuses if we are really executing - a builtin here, not just if parse_and_execute_level > 0. Reported by - Rob Landley +aclocal.m4 + - BASH_CHECK_DECL: just call AC_CHECK_DECLS and use the default + includes, which includes the files we used to specify + - BASH_FUNC_INET_ATON: changed to use AC_LINK_IFELSE + - BASH_STRUCT_WEXITSTATUS_OFFSET: changed to use AC_RUN_IFELSE + - BASH_FUNC_OPENDIR_CHECK: changed to use AC_RUN_IFELSE + - BASH_FUNC_ULIMIT_MAXFDS: changed to use AC_RUN_IFELSE + - BASH_UNDER_SYS_SIGLIST: changed to use AC_RUN_IFELSE + - BASH_SYS_SIGLIST: changed to use AC_RUN_IFELSE + - BASH_FUNC_DUP2_CLOEXEC_CHECK: changed to use AC_RUN_IFELSE + - BASH_FUNC_GETENV: changed to use AC_RUN_IFELSE + - BASH_FUNC_GETCWD: changed to use AC_RUN_IFELSE + - BASH_FUNC_FNMATCH_EXTMATCH: changed to use AC_RUN_IFELSE + - BASH_FUNC_POSIX_SETJMP: changed to use AC_RUN_IFELSE + - BASH_FUNC_STRCOLL: changed to use AC_RUN_IFELSE + - BASH_FUNC_PRINTF_A_FORMAT: changed to use AC_RUN_IFELSE + - BASH_SYS_PGRP_SYNC: changed to use AC_RUN_IFELSE + - BASH_SYS_SIGNAL_VINTAGE: changed to use AC_RUN_IFELSE + - BASH_SYS_NAMED_PIPES: changed to use AC_RUN_IFELSE + - BASH_CHECK_RTSIGS: changed to use AC_RUN_IFELSE + - BASH_CHECK_MULTIBYTE: changed to use AC_RUN_IFELSE + - RL_LIB_READLINE_VERSION: changed to use AC_RUN_IFELSE + - BASH_CHECK_WCONTINUED: changed to use AC_RUN_IFELSE + - BASH_FUNC_SNPRINTF: changed to use AC_RUN_IFELSE + - BASH_FUNC_VSNPRINTF: changed to use AC_RUN_IFELSE + - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: changed to use AC_RUN_IFELSE + - BASH_DECL_PRINTF: changed to use AC_RUN_IFELSE + - BASH_TYPE_RLIMIT: rewrote to avoid quad_t, now uses AC_COMPILE_IFELSE + to determine whether rlim_t is available, otherwise determines the + value of RLIMTYPE based on sizeof(rlim.rlim_cur): int, long, or + long long + - BASH_SIZEOF_RLIMIT,BASH_SIZEOF_QUAD_T: helper macros for + BASH_TYPE_RLIMIT in the case that rlim_t is not present +configure.ac + - BASH_CHECK_DECL -> AC_CHECK_DECLS + - quad_t: use AC_CHECK_TYPE (new style) instead of BASH_CHECK_TYPE + + + 9/14 + ---- execute_cmd.c - - EX_BADSYNTAX: make sure that gets translated into EX_BADUSAGE (2) - - execute_simple_command: if a function returns a value greater than - EX_SHERRBASE, use builtin_status to translate it, as if a builtin - were being executed - - builtin_status: make sure a status > EX_SHERRBASE gets translated to - EXECUTION_FAILURE + - time_command: if we longjmp back to the top_level we saved, make sure + we're in the same subshell environment before printing the timing + stats. We could have longjmped back from a child process of the + command or pipeline we want to time. From a report by + Sergej Alikov + - time_command: restore command->flags even if we longjmp back + +general.c + - check_binary_file: if the first line of the ENOEXEC file starts with + a `#!', check the rest of the buffer for NULs to determine whether + this is a binary file. Since we only check the first line, a #! line + followed by binary data could be confused for a shell script + + 9/16 + ---- +bashjmp.h + - EXITBLTIN: new longjmp `code' value: used by the exit builtin + +{execute_cmd,shell,subst,trap}.c,builtins/evalstring.c + - treat EXITBLTIN exactly the same as EXITPROG (for now) + +builtins/exit.def + - exit_builtin: jump_to_top_level with value EXITBLTIN + +builtins/evalstring.c + - parse_and_execute: EXITBLTIN has its own case, with the same contents + as EXITPROG + + 9/17 + ---- +builtins/evalstring.c + - parse_and_execute: change EXITBLTIN case to avoid running the + unwind-protect stack to the `pe_dispose' tag (which has the effect + of running all the unwind-protects installed by the commands in + the string) if we're executing in a function and EXIT is trapped. + This has the effect of running the EXIT trap in the function context, + which is what we do when we're not in parse_and_execute (eval, + bash -c, command substitution, etc.) + + 9/18 + ---- +arrayfunc.c + - expand_and_quote_kvpair_word,quote_compound_array_word, + expand_and_quote_assoc_word,quote_compound_array_list: make sure + the value has CTLESC characters doubled even when being single- + quoted, since that's what the parser does with standalone assignment + statements. From https://savannah.gnu.org/support/?110538 + + 9/19 + ---- +aclocal.m4 + - AC_TRY_COMPILE -> AC_COMPILE_IFELSE (AC_TRY_LINK calls left to + modify to avoid obsolete warnings) + - BASH_STRUCT_WINSIZE: broke out checks for separate headers into new + macros, call them and work with the results; needed to avoid two + calls to AC_TRY_COMPILE + - BASH_CHECK_KERNEL_RLIMIT: avoid multiple calls to AC_TRY_COMPILE by + breaking basic test for RLIMIT_ defines into a separate test and + calling the HPUX-specific _KERNEL test only if that fails + +m4/gettext.m4,configure.ac + - AM_GNU_GETTEXT -> BASH_GNU_GETTEXT: remove deprecation warning, since + [no-libtool] is how we use this; rename to avoid someone's local + copy from overriding ours + + 9/20 + ---- +aclocal.m4 + - BASH_CHECK_MULTIBYTE: take out code that checks for nl_langinfo(CODESET) + since that's already provided by AM_LANGINFO_CODESET, which is + called by BASH_GNU_GETTEXT. We AC_REQUIRE it here, though, to avoid + problems from future changes + - BASH_SYS_SIGNAL_VINTAGE: broke the code that checks for the different + signal vintages into different AC_DEFUNed macros, changed + BASH_SYS_SIGNAL_VINTAGE to stitch them together with shell code + testing the cached variables + - AC_TRY_LINK -> AC_LINK_IFELSE: there are no more autoconf warnings 9/21 ---- -subst.c - - process_substitute: set up input from /dev/null (standard for an - asynchronous process) only if the shell is interactive and reading - input from the terminal. This allows scripts to use process - substitution to filter stdin. From a report from - Andreas Schwab +array.[ch] + - array_from_argv: new convenience function - 9/23 +array.h + - num_elements: now an arrayind_t, since that's the type of indices, it + makes sense to allow that many elements + + 9/22 ---- -doc/{bash.1,bashref.texi} - - ENV: a couple of changes clarifying that it's only used when an - interactive shell is started in posix mode. Report from - Reuben Thomas +lib/readline/terminal.c + - rl_term_kP: fix typo. Fix from Koichi Murase -examples/loadables/asort.c - - asort: loadable builtin to sort an array. Contributed by - Geir Hauge + 9/25 + ---- +lib/readline/display.c + - rl_clear_visible_line: call _rl_clear_to_eol with _rl_screenwidth as + the argument so we clear out the entire line even if the terminal + doesn't have a clear-to-eol sequence; make sure to add a call to + rl_cr after that so we know we're always in column 0 + - _rl_redisplay_after_sigwinch: just call rl_clear_visible_line instead + of erasing the last line of the display + - _rl_redisplay_after_sigwinch: if the prompt is longer than the screen + width, make sure to call _rl_reset_prompt to recalculate the + local_prompt_newlines array. Should fix issue from + https://savannah.gnu.org/support/index.php?110543 + +redir.c + - do_redirection_internal: if given [N]<&WORD- or [N]>&WORD- and WORD + expands to null, make it identical to <&- or >&- and close file + descriptor N (default 0). From a discussion back in 5/2021 + + 9/27 + ---- +arrayfunc.c + - expand_compound_array_assignment: since we run the string through + the parser to turn it into a list (so we can make sure all shell + metacharacters are properly quoted), we need to remove the CTLESC + the parser uses to quote CTLESC and CTLNUL in *unquoted* words. + The rest of the code assumes this has been done, and assumes that + any CTLESC characters passed to expansion are part of the original + word and should themselves be quoted, doubling the number of CTLESCs + + 9/28 + ---- +arrayfunc.c + - expand_and_quote_kvpair_word,quote_compound_array_word, + expand_and_quote_assoc_word,quote_compound_array_list: if we are + single-quoting associative array subscripts and associative and + indexed array values, we need to quote CTLESC characters, because + that's how they come out of the parser and how the assignment + statement code expects to see them. + Fixes https://savannah.gnu.org/support/index.php?110538 + + 9/29 + ---- +subst.c + - parameter_brace_transform: invalid transformation operators are now + fatal errors in non-interactive shells, as with the other word + expansions. Reported by Martin Schulte in + https://lists.gnu.org/archive/html/bug-bash/2020-10/msg00026.html + +execute_cmd.c + - execute_disk_command: if we're optimizing out the fork (nofork) and + not directly in a pipeline (pipe_in == pipe_out == NO_PIPE), only + modify shell_level if subshell_environment says we're not already in + a pipeline. Reported by Paul Smith 10/11/2020 + against GNU make + +evalstring.c + - should_suppress_fork: remove #if 1 for code that tries to suppress + the fork in a process substitution subshell + + 9/30 + ---- +builtins/mapfile.def + - do_chop: make sure we're comparing unsigned chars when checking + whether the delim is the last character on the line. Reported by + Greg Wooledge 10/1 ---- +lib/readline/rltty.c + - rl_deprep_terminal: if we're not echoing to the terminal + (_rl_echoing_p == 0), and we just output the bracketed paste end + sequence, output a newline to compensate for the \r at the end of + BRACK_PASTE_FINI, since redisplay didn't do it for us. Reported by + Siteshwar Vashisht -[bash-5.1-rc1 frozen] +shell.h + - MATCH_EXPREP: new matching flag, understood only by pattern + substitution; means to expand unquoted `&' in the replacement + STRING to the match of PATTERN - 10/7 +subst.c + - shouldexp_replacement: uncommented + - pat_subst: we expand & in the replacement string if MATCH_EXPREP + appears in MFLAGS + - parameter_brace_patsub: push call to shouldexp_replacement out here, + after the replacement string is expanded; set MATCH_EXPREP if there + is an unquoted `&' (by backslash) in the expanded replacement + string + +doc/{bash.1,bashref.texi} + - pattern substitution: overhauled the description, moved each of the + possible forms to be tags in the tagged paragraph. The description + now specifies the expansions that the replacement string undergoes + - pattern substitution: documented new behavior of unquoted & in the + replacement string + + 10/4 + ---- +shell.c + - include if we're debugging malloc (MALLOC_DEBUG) + so we can get an extern declaration of trace_malloc_stats + + 10/5 ---- subst.c - - process_substitute: try it without setting the stdin for a process - substitution started from an interactive shell to /dev/null. We will - have to see if this causes problems like those reported back in - 9/2019 by Grisha Levit. From a report by Hyunho Cho + - expand_subscript_string: allocate new memory for td.word, copying + STRING, in case it gets freed on error by expand_word_internal. + Report and fix from Koichi Murase -lib/readline/terminal.c - - _rl_init_terminal_io: if the terminal is unknown, disable bracketed - paste on the assumption it can't handle the enable/disable escape - sequences +lib/malloc/malloc.c + - malloc_usable_size: return the allocated size instead of the chunk + size, since writing over the bounds checking will cause fatal errors. + Reported by Julien Moutinho , fix from + Dominique Martinet + +arrayfunc.c + - unbind_array_elememnt: pass (flags&VA_NOEXPAND) to skipsubscript(), + instead of unconditionally passing 1 if we're operating on an + associative array. This is consistent with how valid_array_reference + determines the length of the subscript. + Report and fix from Koichi Murase + + 10/6 + ---- + +subst.c + - skip_to_delim: add a new value for FLAGS. If FLAGS&2, we assume that + START is one character after the opening OPEN. If not, we assume that + START is at OPEN, and needs to be incremented past it. Part of fix + from Koichi Murase + +arrayfunc.c + - unbind_array_element: make sure to pass FLAGS to skipsubscript with + bit 2 set, since we are passed a SUB index that's one past the + opening bracket. Rest of fix from + Koichi Murase + - array_variable_name: make sure we pass (FLAGS&1) to skipsubscript, so + we don't inadvertently pass a value with bit 2 set, which would + cause an off-by-one error in subscript parsing 10/8 ---- -lib/readline/terminal.c - - _rl_init_terminal_io: if the terminal name is "dumb", disable - bracketed paste mode. Suggested by - Andreas Schwab +trap.c + - restore_traps: inverse of reset_signal_handlers. This understands + how reset_signal_handlers changes the signal disposition while + leaving the trap string in place, and knows how to restore flags + and state based on that preserved trap string and whether or not + the signal is "special" to the shell. - 10/13 +builtins/exec.def + - exec_builtin: instead of using restore_original_signals to completely + cancel the traps, call reset_signal_handlers so the trap strings are + preserved. Then if the exec fails (and we're not exiting) we can + look at the trap strings and see how to restore the trap state. + This calls restore_traps after reinitializing the shell signal + handlers, using the trap strings saved by reset_signal_handlers. + Fixes issue with not exiting after a failed exec clearing the EXIT + trap reported by Mark March , using the + approach suggested by Robert Elz + +subst.c + - expand_declaration_argument: when parsing options that modify + attributes that affect how the value is handled (i, c, u, etc.), + make sure to create an option string and call make_internal_declare + with options that start with a `+' so the attribute is off when + the assignment is performed and changes how the value is expanded. + From a report by Léa Gris + +lib/readline/complete.c + - rl_display_match_list: even if _rl_completion_prefix_display_length + is set to a non-zero value, pass the common prefix length to + fnprint if we've turned on colored completion prefixes; passes + through to fnprint via print_filename + - fnprint: add the ellipsis if prefix_bytes exceeds the + _rl_completion_prefix_display_length, add explicit check for + prefix_bytes being longer since print_filename passes it through + if colored-completion-prefix is set. This means that while + completion-prefix-display-length still has precedence over + colored-completion-prefix, it doesn't override it if both are set + and the common prefix length is shorter than + completion-prefix-display-length. From a report by + Christoph Anton Mitterer + + 10/10 ----- -trap.[ch] - - set_trap_state: new function to allow other signal handlers to set - the internal state that trap_handler would set to note that the - shell received a trapped signal. Used by sigint_sighandler(). +parse.y + - parse_dparen: if the last token is FOR, increment word_top and assign + word_lineno like for other for loops. Fixes bug with LINENO after + arithmetic for commands reported by + Tom Coleman -sig.c - - sigint_sighandler: call set_trap_state to set the pending trap state - for SIGINT if trap_handler is not called. Needed because - throw_to_top_level now checks whether a signal is pending before - running the trap (change from 4/2020) + 10/11 + ----- +execute_cmd.c + - shell_execve: if execve fails with ENOENT, but executable_file() + succeeds, display a slightly more descriptive error message. Prompted + by a report from Andrea Monaco -builtins/trap.def - - trap_builtin: if the shell is interactive (interactive_shell != 0) - but running something like PROMPT_COMMAND that sets - parse_and_execute_level > 0 but interactive == 0, make sure to set - the signal handler to the default interactive shell SIGINT handler - (sigint_sighandler) instead of the default non-interactive one. - Fixes bug reported by Daniel Farina with a hint - from felix +stringlib.c + - strcreplace: allow backslash to escape a backslash, since we allow it + to escape a `&' + + 10/14 + ----- +pcomplib.c + - COMPLETE_HASH_BUCKETS: double to 512 + +stringlib.c + - strcreplace: the last argument is now a flags argument. 1 has its + previous meaning (glob); 2 means to allow backslash to escape a + backslash (as added on 10/11) + +subst.c + - pat_subst: call strcreplace with 2 as the flags value + + 10/15 + ----- +doc/bashref.texi + - updates to Installation section + +doc/{mkposix,mkinst,mkrbash},doc/Makefile.in + - changes to allow scripts to be run outside the source directory + + 10/18 + ----- +subst.c + - patsub_replacement: controls whether pattern substitution expands `&' + in the replacement string. Initialized to 1 by default + + 10/19 + ----- +doc/{bash.1,bashref.texi} + - document bash's WCE SIGINT behavior when job control is not enabled + and the shell receives a SIGINT while waiting for the foreground + command to complete. Added at Red Hat's request. A complete + discussion is at https://www.cons.org/cracauer/sigint.html + + 10/25 + ----- +builtins/shopt.def + - patsub_replacement: new shell option, exposes patsub_replacement + variable controlling whether pattern substitution expands `&' in + the replacement string. Still enabled by default. + +doc/{bash.1,bashref.texi} + - patsub_replacement: document new shopt option 10/26 ----- +lib/readline/display.c + - expand_prompt: group runs of invisible characters at the right edge + of the screen with the previous physical characters when setting + local_prompt_newlines, since that's how update_line() expects to + get it. Fix from sparrowhawk996@gmail.com. -lib/readline/{readline.c,rlprivate.h} - - _rl_enable_active_region: new variable, mirrors value of - _rl_enable_bracketed_paste - - BRACKETED_PASTE_DEFAULT: new define, default initial value of - _rl_enable_bracketed_paste and _rl_enable_active_region - -lib/readline/bind.c - - hack_special_boolean_var: make sure that _rl_enable_active_region - is set appropriately when "enable-bracketed-paste" is modified +lib/readline/macro.c + - rl_end_kbd_macro: make sure current_macro_index is > 0 after + subtracting the key sequence length, clamp it to 0 before writing + the ending NULL. From a fuzzing report by + Tillmann Osswald lib/readline/isearch.c - - _rl_isearch_dispatch: make sure that we activate the mark on finding - the search string only if _rl_enable_active_region is non-zero, even - if bracketed paste is enabled + - _rl_isearch_dispatch: in the bracketed paste case, don't assume the + pasted text is null-terminated, so use memcpy instead of strcpy for + the length of the pasted text, then make sure the search string is + null-terminated. From a fuzzing report by + Tillmann Osswald -lib/readline/search.c - - noninc_dosearch: make sure that we activate the mark on finding - the search string only if _rl_enable_active_region is non-zero, even - if bracketed paste is enabled +lib/readline/text.c + - rl_transpose_words: make sure to preserve the value of rl_end from + the beginning to the end of the function. From a fuzzing report by + Tillmann Osswald -lib/readline/kill.c - - rl_bracketed_paste_begin: make sure we activate the mark only if - _rl_enable_active_region is enabled - -lib/readline/isearch.c - - _rl_isearch_dispatch: the requirement for number of available unread - characters (bytes) to trigger the bracketed paste test is now - BRACK_PASTE_SLEN-1, like for non-incremental searches +lib/readline/vi_mode.c + - rl_vi_delete_to,rl_vi_change_to,rl_vi_yank_to: if we are redoing a + command (_rl_vi_redoing == 1), save the old _rl_vimvcxt, allocate a + new one, and restore the old one before returning. Prevents some + pointer aliasing problems. From a fuzzing report by + Tillmann Osswald 10/29 ----- +arrayfunc.c + - tokenize_array_reference: take valid_array_reference and add a third + argument (char **SUBP), which, if non-NULL, gets the null-terminated + subscript parsed from the NAME argument. If it's NULL, the caller + gets the old valid_array_reference behavior. Fix from + Koichi Murase + - valid_array_reference: just call tokenize_array_reference with a + NULL third argument + - unbind_array_element: assume the caller (unset_builtin) passes a + null-terminated SUB that's already been validated by a call to + tokenize_array_reference so we don't need to call skipsubscript() or + check VA_ONEWORD. Fix from Koichi Murase -doc/bash.1,lib/readline/rluser.texi - - enable-bracketed-paste: change to note the the current default is `On' +arrayfunc.h + - tokenize_array_reference: extern declaration - 10/30 - ----- -lib/glob/glob.c - - wdequote_pathname: if wcsrtombs fails, make sure to check whether it - leaves wpathname set to a non-NULL value before checking whether or - not *wpathname is a null character (indicating an incomplete - conversion). Fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972286 - with an assist from Bernhard Übelacker +builtins/set.def + - unset_builtin: use tokenize_array_reference to figure out T and pass + that to unbind_array_element. Fix from + Koichi Murase + - unset_builtin: pass non-null argument to array_variable_part to get + the length of the subscript (T), then cut off any final `]' before + passing it to unbind_array_element, since that's what it now + expects + +subst.c + - expand_string_for_rhs,expand_string_for_pat: assign td.word from + newly-allocated memory in case it gets freed on error during the + call to call_expand_word_internal(); free it manually when that + call returns 11/1 ---- -lib/readline/isearch.c - - _rl_isearch_dispatch: when checking whether the current character is - one of the isearch `opcodes', only check the multibyte character - member of CXT if we're currently running in a multibyte locale. Don't - assume that other parts of the code will set mb[0] = c and mb[1] = 0. - Report from Detlef Vollmann +findcmd.c + - search_for_command: if FLAGS includes CMDSRCH_STDPATH, don't look in + the hash table for the command name. Prompted by a report from + Roger Morris -[bash-5.1-rc2 frozen] +aclocal.m4 + - BASH_FUNC_POSIX_SETJMP: add a check by fetching the signal mask + after the siglongjmp and making sure that SIGINT is not blocked, + indicating we restored the original signal mask - 11/10 + 11/2 + ---- +subst.c + - expand_string_assignment: make sure to add W_TILDEEXP to the flags so + expand_word_internal performs the right tilde expansion on tildes + following an unquoted colon. Report from Anders Kaseorg + + + + 11/3 + ---- +aclocal.m4 + - BASH_FUNC_POSIX_SETJMP: if cross-compiling, default to `present' if + we've determined we have posix signal functions + + 11/4 + ---- +execute_cmd.c + - SET_LINE_NUMBER: set line_number, but don't set line_number_for_err_trap + if we're already running the ERR trap + - GET_LINE_NUMBER: evaluates to line_number_for_err_trap if we're + running the ERR trap and executing_line_number() otherwise + - execute_function: use GET_LINE_NUMBER to push the value for the line + number into the BASH_LINENO array + - execute_command_internal,execute_arith_command,execute_cond_command: + use SET_LINE_NUMBER to avoid overwriting line_number_for_err trap + while executing the ERR trap. Tentative fix for `caller' problem + reported by Quinn Grier + +configure.ac,patchlevel.h + - set bash version to 5.2-devel, meaning shell_compatibility_level = 52, + which required updating tests (array.tests, array21.sub, + quotearray3.sub, new-exp10.sub, history2.sub). The first three are + because bash-5.2 flushes an indexed array but does not unset the + variable when given `unset a[@]' or `unset[*]' (that is, it acts + like `a=()' instead of `unset a'); the other two are because the + version number changed + + 11/8 + ---- +doc/Makefile.in + - bash.info: use `makeinfo -o' instead of calling infopost.sh to edit + the filename, since the tags table includes absolute byte offsets to + nodes. From https://savannah.gnu.org/support/?110557 + + 11/15 ----- -lib/readline/isearch.c - - _rl_isearch_dispatch: if we are aborting the search, make sure to - call _rl_fix_point and to make sure the point and mark are less - than the new rl_end, in case they got out of sync. Report and fix - from Tillmann Osswald +examples/loadables/realpath.c + - add -a NAME argument to put canonicalized pathnames into an indexed + array instead of displaying them on stdout. Suggested by + felix@f-hauri.ch + +lib/readline/colors.c + - _rl_custom_readline_prefix: new function, looks in $LS_COLORS for a + custom extension (*.readline-colored-completion-prefix) and uses that, + if found, as the default color for the common prefix displayed when + `colored-completion-prefix' is set. Suggested by + Christoph Anton Mitterer + - _rl_print_prefix_color: try the return value from _rl_custom_readline_prefix + before defaulting to the C_PREFIX (C_SOCK) color. Suggested by + Christoph Anton Mitterer + +lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 + - readline-colored-completion-prefix: document new custom suffix for + readline's colored-completion-prefix color + + 11/16 + ----- +doc/{bash.1,bashref.texi},builtins/set.def + - set: modify usage synopsis slightly, based on + https://bugzilla.redhat.com/show_bug.cgi?id=2022324 + +builtins/set.def + - unset_builtin: add shell compatibility level check <= bash-5.1 to + force `unset a[@]' to unset array variable `a', like in previous + versions, instead of unsetting associative array element `@' or + removing all elements of an indexed array without unsetting the + variable itself + +builtins/common.c + - set_expand_once: now a no-op if the shell compatibility level is + <= bash-5.1, preserving the previous versions' behavior for [[ -v + (dependent on assoc_expand_once instead of forcing it) + +subst.c + - parameter_brace_expand_rhs: make sure that the final value assigned + is always returned from ${a:=b}, even when `a' has a variable + attribute that modifies the value on assignment. Reported back on + 1/20/2021 by oguzismailuysal@gmail.com; bash-5.2 tag removed + + 11/22 + ----- +doc/{bashref.texi,bash.1} + - unset: change the description of `unset name[@]' (unset name[*]) + to reflect the new behavior (unset associative array subscripts or + remove all elements from an indexed array) and the difference from + previous versions + - set: document -r for restricted shell mode + - restricted shell: change occurrences of `set +o restricted' to + `shopt -u restricted_shell'. From a report from + Jin Xiang + - read: note that read -t0 may return 0 if a subsequent read will + return EOF. From a suggestion by Dale R. Worley + + +execute_cmd.c + - execute_arith_command,eval_arith_for_expr: don't pass EXP_EXPANDED + to evalexp if shell_compatibility_level > 5.1, assuming that the + expression has been quoted by Q_ARITH handling test.c - - unary_test: assume the argument has already been expanded (the code - paths for [[ and [ expand it) and add AV_NOEXPAND to the flags passed - to array_value if assoc_expand_once is enabled. Prompted by a report - from Greg Wooledge + - test_arithcomp: if we're being called by the conditional command + code and treating the arguments to the arithmetic operators as + expressions, don't pass EXP_EXPANDED to evalexp if the shell + compatibility level is > 5.1, assuming that the expression has been + quoted by Q_ARITH handling -[bash-5.1-rc3 frozen] - - 11/18 + 11/29 ----- -doc/{bash.1,bashref.texi} - - small tweaks to the ulimit description to make it more consistent with - the Posix standard's terminology +examples/loadables/getconf.[ch] + - getconf: new implementation of loadable builtin, based on glibc + getconf - 12/4 +examples/loadables/sleep.c + - parse_gnutimefmt: parse GNU interval format (2m30s), returning + seconds and microseconds like uconvert + - sleep: use parse_gnutimefmt if uconvert can't parse the format right + away and "dhms" appears in the format string. Don't return + EX_DISKFALLBACK under any circumstances + + 11/30 + ----- + +builtins/wait.def + - wait_builtin: refer to unset_waitlist only if JOB_CONTROL is enabled. + Report from Joel Ebel + +parse.y,builtins/set.def + - changes for minimal config restrictions + +configure.ac,config.h.in + - --enable-translatable-strings: new configuration option to allow + $"..." support to be compiled in or out; not included in the minimal + shell configuration + +shell.c + - main: don't include any of the dump-strings options if + TRANSLATABLE_STRINGS is not defined + +lib/sh/shquote.c + - sh_backslash_quote_for_double_quotes: needed for translatable strings + +parse.y + - support for translating $"..." strings now conditional on + TRANSLATABLE_STRINGS + +locale.c + - locale_expand: now conditional on TRANSLATABLE_STRINGS + +subst.c + - expand_string_dollar_quote: support for $"..." now conditional on + TRANSLATABLE_STRINGS + +doc/bashref.texi + - --enable-translatable-strings: document new configuration option + + 12/2 ---- +subst.c + - verify_substring_values: now that the default compatibility level is + 52, and the Q_ARITH code is enabled, make the EXP_EXPANDED flag for + evalexp() dependent on the compatibility level + - param_expand: arithmetic substitution: make EXP_EXPANDED flag + for evalexp() dependent on the compatibility level + - expand_word_internal: don't call expand_array_subscript if the + shell compatibility level is 51 or below (Q_ARITH) -[bash-5.1-release frozen] +test.c + - test_unop: if the shell compatibility level is > 51, using [@] with + an existing associative array will report on a key of `@' + +arrayfunc.c + - array_expand_index: if the compatibility level is > 51, Q_ARITH is + used and we don't pass EXP_EXPANDED to evalexp() + +COMPAT,doc/bashref.texi + - shell compatibility mode: document effects of setting the + compatibility mode to 51 + + 12/3 + ---- +lib/malloc/malloc.c + - mremap: only use if MREMAP_MAYMOVE is defined, since we use the Linux + version of the function signature + + 12/6 + ---- +bashhist.c + - bash_add_history: if we're parsing a here-document (PST_HEREDOC), only + suppress adding the newline between lines if we're not at the first + line of the here-document (here_doc_first_line != 0). From a report + by S0AndS0 + + 12/8 + ---- +lib/readline/colors.c + - _rl_custom_readline_prefix: use STREQN to check for the extension + string in $LS_COLORS, since it's not necessarily null-terminated. + From https://savannah.gnu.org/patch/?10158 + + 12/10 + ----- +variables.c + - set_int_value,set_string_value: broke common code for setting int + and string dynamic variable values out into separate functions; + changed all callers to use them where appropriate. set_int_value + takes a flags argument saying whether or not to force the integer + attribute on + - assign_random: store the value assigned as the variable value so + things like RANDOM=42; RANDOM+=7 generate consistent sequences + like in ksh93 + - assign_seconds: store the value assigned as the variable value so + things like SECONDS=42 ; SECONDS+=7 generate what's expected + +doc/Makefile.in + - changes to allow man pages that include others (.so FN) to be built + outside the source tree + + 12/13 + ----- +arrayfunc.c + - assign_array_element_internal: take an additional argument: char **NVALP. + If non-null, it gets the value eventually assigned to the array + element + - assign_array_element: take an additional NVALP argument; pass it to + assign_array_element_internal + +arrayfunc.h + - assign_array_element: new extern function declaration + +{subst,variables}.c,builtins/{common.c,declare.def} + - assign_array_element: change callers + +subst.c + - parameter_brace_expand_rhs: for the ${param:=value}, use the value + returned by assign_array_element in NVALP as the return value, since + it's the value ultimately assigned to the variable after possible + modification (e.g., arithmetic evaluation). Reported by + oguzismailuysal@gmail.com after flawed fix applied 11/16 + + 12/14 + ----- +arrayfunc.h + - array_eltstate_t: an object that encapsulates an array element's + state (type, index, key, value) whether it's an indexed or + associative array + +arrayfunc.c + - {init,flush}_eltstate: new functions to initialize and flush any + allocated memory from array_eltstate_t objects. No allocation/ + deallocation functions yet; the only use is with a static instance + - assign_array_element_internal: take an array_eltstate_t * instead of + a char ** as the final argument, so we can return keys/indices and + values depending on the type of array; populates it with the + appropriate values + - assign_array_element: take array_eltstate_t * as final argument + instead of a char **; pass it to assign_array_element_internal + +{subst,variables}.c,builtins/{common.c,declare.def} + - assign_array_element: change callers to modify final argument + + 12/15 + ----- +arrayfunc.c + - array_value_internal: now takes an array_eltstate_t * as the final + argument; there is no more `rtype' argument in favor of the + `subtype' member; returns the appropriate values in its members + - array_value: changed to pass array_eltstate_t to array_value_internal, + saves and fetches its `ind' member into *indp; saves `subtype' + member into *rtype + - get_arrary_value: changed to take array_eltstate_t as third argument, + passes it to array_value_internal + +{redir,expr}.c + - get_array_value: changed callers; initializing the array_eltstate_t + argument as necessary + +test.c + - test_builtin: changed to use get_array_value, adding AV_ALLOWALL to + the flags, since it didn't use any QUOTED argument. Pass + array_eltstate_t * as final argument and get subtype from it (the + only thing we're interested in, to deallocate memory) + + 12/16 + ----- +arrayfunc.c + - array_value: now takes a final argument of array_eltstate_t *, which + it passes to array_value_internal; no more rtype and indp args. + Callers are responsible for marshalling values into estatep + +arrayfunc.h + - array_value: changed function signature + +subst.c + - get_var_and_type,parameter_brace_expand_word: changed calls to + array_value to use array_eltstate_t argument and initialize it + appropriately. Copy values back from it to the parameters we need + to modify + +variables.c + - assign_lineno: call set_int_value to store the value, like with + RANDOM and SECONDS (from 12/10) + + 12/17 + ----- +{eval,execute_cmd}.c + - when bypassing a parsed command because read_but_dont_execute is + set, don't modify last_command_exit_value. From a report by + Robert Elz + +parse.y + - parse_comsub: make sure the first call to shell_getc to check whether + or not it's an arithmetic expansion skips a quoted newline. From a + report by Robert Elz + + 12/21 + ----- +subst.c + - parameter_brace_remove_pattern,parameter_brace_patsub,parameter_brace_casemod, + parameter_brace_transform,parameter_brace_substring: now take an + array_eltstate_t * argument in place of the arrayind_t argument, pass + it to get_var_and_type; this generalizes the indexed array behavior + of expanding array subscripts once to associative arrays via an + eventual call to array_value_internal with a non-null KEY member + - get_var_and_type: now takes an array_eltstate_t * argument in place + of the arrayind_t argument; use it in calls to array_value so we + can only expand array subscripts once whether they are indexed or + associative arrays + - parameter_brace_expand_word: take an array_eltstate_t * argument in + place of the arrayind_t * argument; pass it to array_value; use a + static version (which we init and flush) if the argument passed is + NULL so we can get the right state passed back and forth + - parameter_brace_expand: pass a pointer to a static array_eltstate_t + to parameter_brace_expand_word, and use that in the various calls to + parameter_brace_XXX functions that perform specific expansions in + place of the old arrayind_t argument; make sure to flush it before + returning, even on errors + + 12/22 + ----- +{trap,variables}.c + - internal_warning: calls changed to use translatable strings + consistently + +error.[ch] + - internal_debug: new function, prints a message like internal_warning, + no-op if DEBUG is not defined + - INTERNAL_DEBUG: macro that expands to internal_debug when DEBUG is + defined, and nothing otherwise + +{jobs,trap}.c + - changed some internal_warning and internal_inform calls to use + internal_debug, since they were active only when DEBUG is defined + +parse.y + - parse_comsub: add internal_debug call when a command substitution + ends with unterminated here-documents + +builtins/common.c + - number_of_args: unconditionally return posparam_count + +{jobs,execute_cmd,subst}.c,parse.y,builtins/{command.def,evalstring.c} + - INTERNAL_DEBUG: use instead of calls to itrace protected by #ifdef + DEBUG + + 12/26 + ----- +lib/glob/glob.c + - glob_always_skip_dot_and_dotdot: initialize to 1 (enabled) + +builtins/shopt.def + - globskipdots: new shell option, exposes glob_always_skip_dot_and_dotdot + +doc/{bash.1,bashref.texi} + - globskipdots: document new shell option + +execute_cmd.c + - fix_arrayref_words: call valid_array_reference with 0 for third arg + because the words have not undergone any word expansions yet and + the quotes are still present. This makes things like + A=[\[]=set + unset A[\[] + work + +subst.c + - word_list_split: if a word undergoes word splitting but is not + changed, preserve any W_ARRAYREF flag into the new word. This makes + things like + rkey=']' + unset A[$rkey] + work because the unset builtin sees the W_ARRAYREF flag on its + argument + + 12/29 + ----- +builtins/common.h + - SET_VFLAGS: take a set of word flags, and set flags for use with + valid_array_reference (vflags) and assign_array_element/bind_int_variable + (bindflags) based on those flags and the setting of assoc_expand_once + (moved from read.def and generalized) + +arrayfunc.c + - array_variable_name: now exclusively takes AV_xxx flags; understands + how to translate AV_NOEXPAND to the right flag for skipsubscript; + understands AV_ONEWORD and AV_NOEXPAND + - array_variable_part: just passes the FLAGS arg to array_variable_name + - assign_array_element: translates ASS_ flags to AV_ flags for + array_variable_name + - array_value_internal: now just passes flags straight through to + array_variable_part (which sends them to array_variable_name) + +builtins/common.[ch] + - builtin_bind_var_to_int: now takes a new FLAGS third argument; passes + it to bind_var_to_int + +builtins/printf.def + - printf_builtin: use SET_VFLAGS to set flags for builtin_bind_variable + (bindflags); makes things like + declare -A A; key=']' ; printf -v A[$key] "foo" + work without a subscript error as long as assoc_expand_once is defined + +builtins/read.def + - read_builtin: use new common version of SET_VFLAGS instead of + private version; changed to use new calling sequence; makes things like + declare -A A; key=']' ; read A[$key] <<<"foo" + work without a subscript error as long as assoc_expand_once is defined + +builtins/wait.def + - wait_builtin: use SET_VFLAGS for variable name with -p option + - wait_builtin: call builtin_bind_var_to_int with new bindflags third + argument + +expr.c + - expr_streval: just pass TFLAG (AV_xxx flags) straight through to + array_variable_part + +variables.c + - bind_int_variable: translate the assignment flags (ASS_xxx) to + VA_xxx flags for valid_array_reference calls (ASS_ONEWORD); translate + assignment flags to AV_xxx flags for array_variable_part + + 12/30 + ----- +subst.c + - parameter_brace_expand: when expanding an indirect variable, extend + the special case for array[@] and array[*] (set -u/no positional + parameters, obeying the baroque quoting rules) to the value of the + indirection. Report amd fix from konsolebox + + 12/31 + ----- +parse.y + - compound_list: when parsing a compound_list production, collect any + pending here-documents after reading a newline, not after reading + any command terminator. Fixes interactive-only prompting bug + reported back in 8/2021 by Hyunho Cho + + 1/1/2022 + -------- +bashline.c + - set_filename_quote_chars: break code that modifies + rl_filename_quote_characters based on whether DIRNAME needs to be + expanded from bash_directory_completion_hook into its own function + - bash_check_expchar: break code that checks whether DIRNAME will be + word expanded from bash_directory_completion_hook into its own + function + - bashline_reset,attempt_shell_completion: make sure complete_fullquote + is set to 1 (as it is by default) in case a completion modifies it + - bash_quote_filename: if we are completing (but not expanding -- + direxpand is unset) and backslash-quoting a filename with expansion + characters as determined by bash_check_expchar, make sure + filename_bstab is set not to include the expansion char (and any + following char and closer) and set complete_fullquote to 0 so + sh_backslash_quote uses filename_bstab. Fixes the longstanding issue + of quoting a `$', for instance, if the rest of the filename contains + any characters that need quoting in filenames. This assumes that the + filename is unquoted (*QCP == 0) so the word will be expanded and is + not part of the filename (if needed, we can use file_exists to check + whether the expansion characters are actually part of the filename) + + 1/7 + --- +examples/loadables/accept.c + - new -b bindaddr option to bind to a specific IP address + - move setsockopt calls before bind() to avoid TIME_WAIT issues. Fixes + from Dzogovic Vehbo + + 1/10 + ---- +configure.ac + - bumped version to 5.2-alpha. diff --git a/CWRU/misc/bison b/CWRU/misc/bison old mode 100755 new mode 100644 diff --git a/INSTALL b/INSTALL index 91f1dd9a..75b4aceb 100644 --- a/INSTALL +++ b/INSTALL @@ -20,20 +20,28 @@ The simplest way to compile Bash is: 3. Optionally, type 'make tests' to run the Bash test suite. 4. Type 'make install' to install 'bash' and 'bashbug'. This will - also install the manual pages and Info file. + also install the manual pages and Info file, message translation + files, some supplemental documentation, a number of example + loadable builtin commands, and a set of header files for developing + loadable builtins. You may need additional privileges to install + 'bash' to your desired destination, so 'sudo make install' might be + required. More information about controlling the locations where + 'bash' and other files are installed is below (*note Installation + Names::). The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', and 'support' directories, -each directory under 'lib', and several others). It also creates a -'config.h' file containing system-dependent definitions. Finally, it -creates a shell script named 'config.status' that you can run in the -future to recreate the current configuration, a file 'config.cache' that -saves the results of its tests to speed up reconfiguring, and a file -'config.log' containing compiler output (useful mainly for debugging -'configure'). If at some point 'config.cache' contains results you -don't want to keep, you may remove or edit it. +(the top directory, the 'builtins', 'doc', 'po', and 'support' +directories, each directory under 'lib', and several others). It also +creates a 'config.h' file containing system-dependent definitions. +Finally, it creates a shell script named 'config.status' that you can +run in the future to recreate the current configuration, a file +'config.cache' that saves the results of its tests to speed up +reconfiguring, and a file 'config.log' containing compiler output +(useful mainly for debugging 'configure'). If at some point +'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 'configure' script understands, type @@ -64,7 +72,7 @@ considered for the next release. The file 'configure.ac' is used to create 'configure' by a program called Autoconf. You only need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of Autoconf. If you do -this, make sure you are using Autoconf version 2.50 or newer. +this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that @@ -122,10 +130,13 @@ Installation Names ================== By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc. You can specify an installation prefix other -than '/usr/local' by giving 'configure' the option '--prefix=PATH', or -by specifying a value for the 'DESTDIR' 'make' variable when running -'make install'. +'/usr/local/man', etc.; that is, the "installation prefix" defaults to +'/usr/local'. You can specify an installation prefix other than +'/usr/local' by giving 'configure' the option '--prefix=PATH', or by +specifying a value for the 'prefix' 'make' variable when running 'make +install' (e.g., 'make install prefix=PATH'). The 'prefix' variable +provides a default for 'exec_prefix' and other variables used when +installing bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give 'configure' the @@ -133,6 +144,30 @@ option '--exec-prefix=PATH', 'make install' will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. +If you would like to change the installation locations for a single run, +you can specify these variables as arguments to 'make': 'make install +exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' instead of +the default '/usr/local/bin'. + +If you want to see the files bash will install and where it will install +them without changing anything on your system, specify the variable +'DESTDIR' as an argument to 'make'. Its value should be the absolute +directory path you'd like to use as the root of your sample installation +tree. For example, + + mkdir /fs1/bash-install + make install DESTDIR=/fs1/bash-install + +will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +documentation into directories within +'/fs1/bash-install/usr/local/share', the example loadable builtins into +'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the +usual 'exec_prefix' and 'prefix' variables to alter the directory paths +beneath the value of 'DESTDIR'. + +The GNU Makefile standards provide a more complete description of these +variables and their effects. + Specifying the System Type ========================== @@ -235,16 +270,20 @@ the Bash 'configure' recognizes. subdirectories of that directory (include files in PREFIX/'include' and the library in PREFIX/'lib'). -'--with-purify' - Define this to use the Purify memory allocation checker from - Rational Software. +'--with-libintl-prefix[=PREFIX]' + Define this to make Bash link with a locally-installed version of + the libintl library instead ofthe version in 'lib/intl'. + +'--with-libiconv-prefix[=PREFIX]' + Define this to make Bash look for libiconv in PREFIX instead of the + standard system locations. There is no version included with Bash. '--enable-minimal-config' This produces a shell with minimal features, close to the historical Bourne shell. -There are several '--enable-' options that alter how Bash is compiled -and linked, rather than changing run-time features. +There are several '--enable-' options that alter how Bash is compiled, +linked, and installed, rather than changing run-time features. '--enable-largefile' Enable support for large files @@ -257,6 +296,10 @@ and linked, rather than changing run-time features. This builds a Bash binary that produces profiling information to be processed by 'gprof' each time it is executed. +'--enable-separate-helpfiles' + Use external files for the documentation displayed by the 'help' + builtin instead of storing the text internally. + '--enable-static-link' This causes Bash to be linked statically, if 'gcc' is being used. This could be used to build a version to use as root's shell. @@ -265,14 +308,21 @@ The '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 'enable-FEATURE'. -All of the following options except for 'disabled-builtins', -'direxpand-default', and 'xpg-echo-default' are enabled by default, -unless the operating system does not provide the necessary support. +All of the following options except for 'alt-array-implementation', +'disabled-builtins', 'direxpand-default', 'strict-posix-default', and +'xpg-echo-default' are enabled by default, unless the operating system +does not provide the necessary support. '--enable-alias' Allow alias expansion and include the 'alias' and 'unalias' builtins (*note Aliases::). +'--enable-alt-array-implementation' + This builds bash using an alternate implementation of arrays (*note + Arrays::) that provides faster access at the expense of using more + memory (sometimes many times more, depending on how sparse an array + is). + '--enable-arith-for-command' Include support for the alternate form of the 'for' command that behaves like the C language 'for' statement (*note Looping @@ -292,7 +342,7 @@ unless the operating system does not provide the necessary support. '--enable-casemod-attributes' Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the UPPERCASE + builtin and assignment statements. Variables with the 'uppercase' attribute, for example, will have their values converted to uppercase upon assignment. @@ -351,7 +401,7 @@ unless the operating system does not provide the necessary support. described above under *note Pattern Matching::. '--enable-extended-glob-default' - Set the default value of the EXTGLOB shell option described above + Set the default value of the 'extglob' shell option described above under *note The Shopt Builtin:: to be enabled. '--enable-function-import' @@ -360,10 +410,10 @@ unless the operating system does not provide the necessary support. enabled by default. '--enable-glob-asciirange-default' - Set the default value of the GLOBASCIIRANGES shell option described - above under *note The Shopt Builtin:: to be enabled. This controls - the behavior of character ranges when used in pattern matching - bracket expressions. + Set the default value of the 'globasciiranges' shell option + described above under *note The Shopt Builtin:: to be enabled. + This controls the behavior of character ranges when used in pattern + matching bracket expressions. '--enable-help-builtin' Include the 'help' builtin, which displays help on shell builtins @@ -414,10 +464,6 @@ unless the operating system does not provide the necessary support. Include the 'select' compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' - builtin instead of storing the text internally. - '--enable-single-help-strings' Store the text displayed by the 'help' builtin as a single string for each help topic. This aids in translating the text to @@ -427,6 +473,10 @@ unless the operating system does not provide the necessary support. '--enable-strict-posix-default' Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). +'--enable-translatable-strings' + Enable support for '$"STRING"' translatable strings (*note Locale + Translation::). + '--enable-usg-echo-default' A synonym for '--enable-xpg-echo-default'. diff --git a/MANIFEST b/MANIFEST index 54f327cf..b0c86ccd 100644 --- a/MANIFEST +++ b/MANIFEST @@ -22,6 +22,7 @@ examples/startup-files d examples/misc d examples/loadables d examples/loadables/perl d +examples/shellmath d include d lib d lib/glob d @@ -61,6 +62,7 @@ config-bot.h f config.h.in f aclocal.m4 f array.c f +array2.c f arrayfunc.c f assoc.c f eval.c f @@ -230,6 +232,7 @@ include/shtty.h f include/stat-time.h f include/stdc.h f include/systimes.h f +include/timer.h f include/typemax.h f include/unionwait.h f lib/glob/Makefile.in f @@ -366,6 +369,7 @@ lib/readline/posixdir.h f lib/readline/posixjmp.h f lib/readline/posixselect.h f lib/readline/posixstat.h f +lib/readline/posixtime.h f lib/readline/ansi_stdlib.h f lib/readline/rlstdc.h f lib/readline/rlprivate.h f @@ -449,6 +453,7 @@ lib/sh/strtoul.c f lib/sh/strtoull.c f lib/sh/strtoumax.c f lib/sh/strtrans.c f +lib/sh/timers.c f lib/sh/times.c f lib/sh/timeval.c f lib/sh/tmpfile.c f @@ -631,7 +636,6 @@ doc/bashref.info f doc/bash.info f doc/article.ms f doc/htmlpost.sh f 755 -doc/infopost.sh f 755 doc/fdl.texi f doc/fdl.txt f # @@ -721,8 +725,8 @@ examples/loadables/setpgid.c f examples/loadables/sleep.c f examples/loadables/strftime.c f examples/loadables/truefalse.c f -#examples/loadables/getconf.h f -#examples/loadables/getconf.c f +examples/loadables/getconf.h f +examples/loadables/getconf.c f examples/loadables/fdflags.c f examples/loadables/finfo.c f examples/loadables/cat.c f @@ -862,6 +866,16 @@ examples/startup-files/bashrc f examples/misc/aliasconv.sh f examples/misc/aliasconv.bash f examples/misc/cshtobash f +examples/shellmath/LICENSE f +examples/shellmath/README.md f +examples/shellmath/assert.sh f +examples/shellmath/faster_e_demo.sh f +examples/shellmath/image.png f +examples/shellmath/runTests.sh f +examples/shellmath/shellmath.sh f +examples/shellmath/slower_e_demo.sh f +examples/shellmath/testCases.in f +examples/shellmath/timingData.txt f tests/README f tests/COPYRIGHT f tests/test-glue-functions f @@ -918,6 +932,8 @@ tests/array25.sub f tests/array26.sub f tests/array27.sub f tests/array28.sub f +tests/array29.sub f +tests/array30.sub f tests/array-at-star f tests/array2.right f tests/assoc.tests f @@ -933,6 +949,13 @@ tests/assoc8.sub f tests/assoc9.sub f tests/assoc10.sub f tests/assoc11.sub f +tests/assoc12.sub f +tests/assoc13.sub f +tests/assoc14.sub f +tests/assoc15.sub f +tests/assoc16.sub f +tests/assoc17.sub f +tests/assoc18.sub f tests/attr.tests f tests/attr.right f tests/attr1.sub f @@ -971,6 +994,7 @@ tests/comsub1.sub f tests/comsub2.sub f tests/comsub3.sub f tests/comsub4.sub f +tests/comsub5.sub f tests/comsub-eof.tests f tests/comsub-eof0.sub f tests/comsub-eof1.sub f @@ -985,6 +1009,7 @@ tests/comsub-posix.right f tests/comsub-posix1.sub f tests/comsub-posix2.sub f tests/comsub-posix3.sub f +tests/comsub-posix5.sub f tests/cond.tests f tests/cond.right f tests/cond-regexp1.sub f @@ -1074,6 +1099,7 @@ tests/exp9.sub f tests/exp10.sub f tests/exp11.sub f tests/exp12.sub f +tests/exp13.sub f tests/exportfunc.tests f tests/exportfunc.right f tests/exportfunc1.sub f @@ -1091,6 +1117,8 @@ tests/extglob3.tests f tests/extglob3.right f tests/extglob4.sub f tests/extglob5.sub f +tests/extglob6.sub f +tests/extglob7.sub f tests/func.tests f tests/func.right f tests/func1.sub f @@ -1119,6 +1147,7 @@ tests/glob6.sub f tests/glob7.sub f tests/glob8.sub f tests/glob9.sub f +tests/glob10.sub f tests/glob.right f tests/globstar.tests f tests/globstar.right f @@ -1132,6 +1161,8 @@ tests/heredoc2.sub f tests/heredoc3.sub f tests/heredoc4.sub f tests/heredoc5.sub f +tests/heredoc6.sub f +tests/heredoc7.sub f tests/herestr.tests f tests/herestr.right f tests/herestr1.sub f @@ -1152,6 +1183,7 @@ tests/history2.sub f tests/history3.sub f tests/history4.sub f tests/history5.sub f +tests/history6.sub f tests/ifs.tests f tests/ifs.right f tests/ifs1.sub f @@ -1183,6 +1215,7 @@ tests/lastpipe.right f tests/lastpipe.tests f tests/lastpipe1.sub f tests/lastpipe2.sub f +tests/lastpipe3.sub f tests/mapfile.data f tests/mapfile.right f tests/mapfile.tests f @@ -1212,6 +1245,8 @@ tests/nameref18.sub f tests/nameref19.sub f tests/nameref20.sub f tests/nameref21.sub f +tests/nameref22.sub f +tests/nameref23.sub f tests/nameref.right f tests/new-exp.tests f tests/new-exp1.sub f @@ -1229,12 +1264,14 @@ tests/new-exp12.sub f tests/new-exp13.sub f tests/new-exp14.sub f tests/new-exp15.sub f +tests/new-exp16.sub f tests/new-exp.right f tests/nquote.tests f tests/nquote.right f tests/nquote1.sub f tests/nquote2.sub f tests/nquote3.sub f +tests/nquote4.sub f tests/nquote1.tests f tests/nquote1.right f tests/nquote2.tests f @@ -1285,6 +1322,13 @@ tests/quote1.sub f tests/quote2.sub f tests/quote3.sub f tests/quote4.sub f +tests/quotearray.right f +tests/quotearray.tests f +tests/quotearray1.sub f +tests/quotearray2.sub f +tests/quotearray3.sub f +tests/quotearray4.sub f +tests/quotearray5.sub f tests/read.tests f tests/read.right f tests/read1.sub f @@ -1293,6 +1337,8 @@ tests/read3.sub f tests/read4.sub f tests/read5.sub f tests/read6.sub f +tests/read7.sub f +tests/read8.sub f tests/redir.tests f tests/redir.right f tests/redir1.sub f @@ -1385,6 +1431,7 @@ tests/run-precedence f tests/run-printf f tests/run-procsub f tests/run-quote f +tests/run-quotearray f tests/run-read f tests/run-redir f tests/run-rhs-exp f @@ -1421,6 +1468,7 @@ tests/tilde.tests f tests/tilde.right f tests/tilde2.tests f tests/tilde2.right f +tests/tilde3.sub f tests/trap.tests f tests/trap.right f tests/trap1.sub f 755 @@ -1463,6 +1511,7 @@ tests/varenv18.sub f tests/varenv19.sub f tests/varenv20.sub f tests/varenv21.sub f +tests/varenv22.sub f tests/version f tests/version.mini f tests/vredir.tests f @@ -1474,6 +1523,7 @@ tests/vredir4.sub f tests/vredir5.sub f tests/vredir6.sub f tests/vredir7.sub f +tests/vredir8.sub f tests/misc/dev-tcp.tests f tests/misc/perf-script f tests/misc/perftest f diff --git a/Makefile.in b/Makefile.in index 3e3a5d48..818a51b7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,6 +1,6 @@ -# Makefile for bash-5.0, version 4.30 +# Makefile for bash-5.2, version 5.1 # -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 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 @@ -87,6 +87,11 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALLMODE= -m 0755 INSTALLMODE2 = -m 0555 +CTAGS = ctags +CTAGSFLAGS = -x +ETAGS = etags +ETAGSFLAGS = + TESTSCRIPT = @TESTSCRIPT@ DEBUGGER_START_FILE = @DEBUGGER_START_FILE@ @@ -132,6 +137,7 @@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG} ${MALLOC_DEBUG} +STYLE_CFLAGS = @STYLE_CFLAGS@ DEFS = @DEFS@ LOCAL_DEFS = @LOCAL_DEFS@ @@ -147,7 +153,7 @@ LOCAL_LDFLAGS = @LOCAL_LDFLAGS@ SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"' $(LOCALE_DEFS) BASE_CCFLAGS = $(SYSTEM_FLAGS) $(LOCAL_DEFS) \ - $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES) + $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES) $(STYLE_CFLAGS) CCFLAGS = $(ADDON_CFLAGS) $(BASE_CCFLAGS) ${PROFILE_FLAGS} $(CPPFLAGS) $(CFLAGS) @@ -232,7 +238,8 @@ SHLIB_SOURCE = ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \ ${SH_LIBSRC}/fnxform.c ${SH_LIBSRC}/unicode.c \ ${SH_LIBSRC}/wcswidth.c ${SH_LIBSRC}/wcsnwidth.c \ ${SH_LIBSRC}/shmbchar.c ${SH_LIBSRC}/utf8.c \ - ${SH_LIBSRC}/random.c ${SH_LIBSRC}/gettimeofday.c + ${SH_LIBSRC}/random.c ${SH_LIBSRC}/gettimeofday.c \ + ${SH_LIBSRC}/timers.c SHLIB_LIB = -lsh SHLIB_LIBNAME = libsh.a @@ -420,11 +427,12 @@ BASHINCFILES = $(BASHINCDIR)/posixstat.h $(BASHINCDIR)/ansi_stdlib.h \ $(BASHINCDIR)/shtty.h $(BASHINCDIR)/typemax.h \ $(BASHINCDIR)/ocache.h -LIBRARIES = $(GLOB_LIB) $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) $(TERMCAP_LIB) \ - $(TILDE_LIB) $(MALLOC_LIB) $(INTL_LIB) $(LIBICONV) $(LOCAL_LIBS) +LIBRARIES = $(GLOB_LIB) $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) \ + $(TERMCAP_LIB) $(TILDE_LIB) $(MALLOC_LIB) $(INTL_LIB) $(LIBICONV) \ + $(LOCAL_LIBS) -LIBDEP = $(GLOB_DEP) $(SHLIB_DEP) $(INTL_DEP) $(READLINE_DEP) $(HISTORY_DEP) $(TERMCAP_DEP) \ - $(TILDE_DEP) $(MALLOC_DEP) +LIBDEP = $(GLOB_DEP) $(SHLIB_DEP) $(INTL_DEP) $(READLINE_DEP) $(HISTORY_DEP) \ + $(TERMCAP_DEP) $(TILDE_DEP) $(MALLOC_DEP) LIBRARY_LDFLAGS = $(READLINE_LDFLAGS) $(HISTORY_LDFLAGS) $(GLOB_LDFLAGS) \ $(TILDE_LDFLAGS) $(MALLOC_LDFLAGS) $(SHLIB_LDFLAGS) @@ -475,12 +483,14 @@ JOBS_O = @JOBS_O@ SIGLIST_O = @SIGLIST_O@ SIGNAMES_O = @SIGNAMES_O@ +ARRAY_O = @ARRAY_O@ + # Matching object files. OBJECTS = shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \ dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o \ expr.o flags.o $(JOBS_O) subst.o hashcmd.o hashlib.o mailcheck.o \ trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \ - alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o \ + alias.o $(ARRAY_O) arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o \ bashline.o $(SIGLIST_O) list.o stringlib.o locale.o findcmd.o redir.o \ pcomplete.o pcomplib.o syntax.o xmalloc.o $(SIGNAMES_O) @@ -578,13 +588,13 @@ LOADABLES_DIR = ${top_builddir}/examples/loadables .made: $(Program) bashbug $(SDIR)/man2html$(EXEEXT) @echo "$(Program) last made for a $(Machine) running $(OS)" >.made -$(Program): .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP) +$(Program): $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP) .build $(RM) $@ $(PURIFY) $(CC) $(BUILTINS_LDFLAGS) $(LIBRARY_LDFLAGS) $(LDFLAGS) -o $(Program) $(OBJECTS) $(LIBS) ls -l $(Program) -$(SIZE) $(Program) -.build: $(SOURCES) config.h Makefile version.h $(VERSPROG) +.build: $(SOURCES) config.h Makefile $(DEFDIR)/builtext.h version.h $(VERSPROG) @echo @echo " ***********************************************************" @echo " * *" @@ -609,6 +619,9 @@ lint: asan: ${MAKE} ${MFLAGS} ADDON_CFLAGS='${ASAN_XCFLAGS}' ADDON_LDFLAGS='${ASAN_XLDFLAGS}' .made +valgrind: + ${MAKE} ${MFLAGS} ADDON_CFLAGS='-DDISABLE_MALLOC_WRAPPERS' ADDON_LDFLAGS= .made + # cheating gcov: ${MAKE} ${MFLAGS} CFLAGS=-g ADDON_CFLAGS='${GCOV_XCFLAGS}' ADDON_LDFLAGS='${GCOV_XLDFLAGS}' .made @@ -649,6 +662,7 @@ ${GRAM_H}: y.tab.h y.tab.c: parse.y # -if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi $(YACC) -d $(srcdir)/parse.y + $(RM) parser-built touch parser-built # -if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; else cp -p y.tab.h ${GRAM_H}; fi @@ -733,7 +747,7 @@ syntax.c: mksyntax${EXEEXT} $(srcdir)/syntax.h $(RM) $@ ./mksyntax$(EXEEXT) -o $@ -$(BUILTINS_LIBRARY): $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h $(DEFDIR)/builtext.h version.h +$(BUILTINS_LIBRARY): $(DEFDIR)/builtext.h $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h version.h @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} targets ) || exit 1 # these require special rules to circumvent make builtin rules @@ -746,7 +760,7 @@ ${DEFDIR}/bashgetopt.o: $(BUILTIN_SRCDIR)/bashgetopt.c ${DEFDIR}/builtext.h: $(BUILTIN_DEFS) @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) builtext.h ) || exit 1 -${DEFDIR}/pipesize.h: +${DEFDIR}/pipesize.h: ${BUILTINS_LIBRARY} @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) pipesize.h ) || exit 1 $(SDIR)/man2html$(EXEEXT): ${SUPPORT_SRC}/man2html.c @@ -807,10 +821,10 @@ force: # unused TAGS: $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) - etags $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) + ( cd $(topdir) && $(ETAGS) $(ETAGSFLAGS) $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) ) tags: $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) - ctags -x $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) > $@ + ( cd $(topdir) && $(CTAGS) $(CTAGSFLAGS) $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) > $@ ) # Targets that actually do things not part of the build @@ -986,6 +1000,7 @@ hashtest: hashlib.c # Files that depend on the definitions in config-top.h, which are not meant # to be changed array.o: $(srcdir)/config-top.h +array2.o: $(srcdir)/config-top.h bashhist.o: $(srcdir)/config-top.h shell.o: $(srcdir)/config-top.h input.o: $(srcdir)/config-top.h @@ -1204,7 +1219,7 @@ trap.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h arra trap.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h parser.h trap.o: make_cmd.h subst.h sig.h pathnames.h externs.h execute_cmd.h trap.o: signames.h $(DEFSRC)/common.h -trap.o: ${DEFDIR}/builtext.h jobs.h +trap.o: ${DEFDIR}/builtext.h builtins.h jobs.h unwind_prot.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h unwind_prot.o: general.h xmalloc.h unwind_prot.h quit.h sig.h unwind_prot.o: ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h error.h @@ -1249,6 +1264,13 @@ array.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h array.o: make_cmd.h subst.h sig.h pathnames.h externs.h array.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h array.o: $(DEFSRC)/common.h +array2.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h +array2.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h +array2.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h +array2.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h +array2.o: make_cmd.h subst.h sig.h pathnames.h externs.h +array2.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h +array2.o: $(DEFSRC)/common.h arrayfunc.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h arrayfunc.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h arrayfunc.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h @@ -1281,18 +1303,24 @@ alias.o: ${BASHINCDIR}/chartypes.h pcomplib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h pcomplib.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h -pcomplib.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h +pcomplib.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h +pcomplib.o: arrayfunc.h conftypes.h quit.h pcomplib.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h pcomplib.o: externs.h ${BASHINCDIR}/maxpath.h assoc.h array.h pcomplib.o: ${BASHINCDIR}/posixjmp.h ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h pcomplete.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h pcomplete.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h -pcomplete.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h +pcomplete.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h +pcomplete.o: execute_cmd.h pathexp.h arrayfunc.h conftypes.h quit.h trap.h +pcomplete.o: jobs.h siglist.h bashline.h alias.h +pcomplete.o: ${BASHINCDIR}/posixwait.h ${BASHINCDIR}/unionwait.h +pcomplete.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/posixstat.h pcomplete.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h pcomplete.o: externs.h ${BASHINCDIR}/maxpath.h execute_cmd.h pcomplete.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h -pcomplete.o: ${DEFDIR}/builtext.h +pcomplete.o: builtins.h ${DEFDIR}/builtext.h ${DEFSRC}/common.h +pcomplete.o: ${GLOB_LIBSRC}/glob.h ${GLOB_LIBSRC}/strmatch.h # library support files @@ -1350,6 +1378,10 @@ variables.o: $(RL_LIBSRC)/rltypedefs.h jobs.o: $(RL_LIBSRC)/keymaps.h $(RL_LIBSRC)/chardefs.h jobs.o: $(RL_LIBSRC)/readline.h $(RL_LIBSRC)/rlstdc.h jobs.o: $(RL_LIBSRC)/rltypedefs.h +pcomplete.o: $(RL_LIBSRC)/rlconf.h +pcomplete.o: $(RL_LIBSRC)/keymaps.h $(RL_LIBSRC)/rlstdc.h +pcomplete.o: $(RL_LIBSRC)/chardefs.h $(RL_LIBSRC)/readline.h +pcomplete.o: $(RL_LIBSRC)/rltypedefs.h ${RL_LIBSRC}/rlmbutil.h shell.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h variables.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h @@ -1357,12 +1389,14 @@ subst.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h bashline.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h bashhist.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h y.tab.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h +pcomplete.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h bashline.o: $(TILDE_LIBSRC)/tilde.h bracecomp.o: $(TILDE_LIBSRC)/tilde.h execute_cmd.o: $(TILDE_LIBSRC)/tilde.h general.o: $(TILDE_LIBSRC)/tilde.h mailcheck.o: $(TILDE_LIBSRC)/tilde.h +pcomplete.o: $(TILDE_LIBSRC)/tilde.h shell.o: $(TILDE_LIBSRC)/tilde.h subst.o: $(TILDE_LIBSRC)/tilde.h variables.o: $(TILDE_LIBSRC)/tilde.h @@ -1435,7 +1469,7 @@ builtins/evalstring.o: ${BASHINCDIR}/memalloc.h variables.h arrayfunc.h conftype builtins/evalstring.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h builtins/evalstring.o: dispose_cmd.h make_cmd.h subst.h externs.h builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h -builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h +builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h redir.h builtins/evalstring.o: ${DEFDIR}/builtext.h builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h xmalloc.h error.h @@ -1486,6 +1520,7 @@ builtins/declare.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general. builtins/declare.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/declare.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/declare.o: $(DEFSRC)/bashgetopt.h pathnames.h flags.h +builtins/declare.o: ${DEFDIR}/builtext.h builtins/echo.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/echo.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/echo.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h @@ -1510,6 +1545,7 @@ builtins/exit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h x builtins/exit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h builtins/exit.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/exit.o: pathnames.h execute_cmd.h +builtins/exit.o: ${DEFDIR}/builtext.h builtins/fc.o: bashtypes.h ${BASHINCDIR}/posixstat.h builtins/fc.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins.h command.h ${BASHINCDIR}/stdc.h builtins/fc.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h @@ -1568,6 +1604,7 @@ builtins/pushd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h builtins/pushd.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/pushd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h builtins/pushd.o: $(DEFSRC)/common.h pathnames.h +builtins/pushd.o: ${DEFDIR}/builtext.h builtins/read.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h builtins/read.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h builtins/read.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h diff --git a/NEWS b/NEWS index a6170be8..ae96d858 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,142 @@ +This is a terse description of the new features added to bash-5.2 since +the release of bash-5.1. As always, the manual page (doc/bash.1) is +the place to look for complete descriptions. + +1. New Features in Bash + +a. The bash malloc returns memory that is aligned on 16-byte boundaries. + +b. There is a new internal timer framework used for read builtin timeouts. + +c. Rewrote the command substitution parsing code to call the parser recursively + and rebuild the command string from the parsed command. This allows better + syntax checking and catches errors much earlier. + +d. The `ulimit' builtin now treats an operand remaining after all of the options + and arguments are parsed as an argument to the last command specified by + an option. This is for POSIX compatibility. + +e. Here-document parsing now handles $'...' and $"..." quoting when reading the + here-document body. + +f. The `shell-expand-line' and `history-and-alias-expand-line' bindable readline + commands now understand $'...' and $"..." quoting. + +g. There is a new `spell-correct-word' bindable readline command to perform + spelling correction on the current word. + +h. The `unset' builtin now attempts to treat arguments as array subscripts + without parsing or expanding the subscript, even when `assoc_expand_once' + is not set. + +i. There is a default value for $BASH_LOADABLES_PATH in config-top.h. + +j. Associative array assignment and certain instances of referencing (e.g., + `test -v' now allow `@' and `*' to be used as keys. + +k. Bash attempts to expand indexed array subscripts only once when executing + shell constructs and word expansions. + +l. The `unset' builtin allows a subscript of `@' or `*' to unset a key with + that value for associative arrays instead of unsetting the entire array + (which you can still do with `unset arrayname'). For indexed arrays, it + removes all elements of the array without unsetting it (like `A=()'). + +m. Additional builtins (printf/test/read/wait) do a better job of not + parsing array subscripts if array_expand_once is set. + +n. New READLINE_ARGUMENT variable set to numeric argument for readline commands + defined using `bind -x'. + +o. The new `varredir_close' shell option causes bash to automatically close + file descriptors opened with {var}&WORD- redirection has WORD expand to the empty + string, treat the redirection as [N]<&- or [N]>&- and close file descriptor + N (default 0). + +w. Invalid parameter transformation operators are now invalid word expansions, + and so cause fatal errors in non-interactive shells. + +x. New shell option: patsub_replacement. When enabled, a `&' in the replacement + string of the pattern substitution expansion is replaced by the portion of + the string that matched the pattern. Backslash will escape the `&' and + insert a literal `&'. + +y. `command -p' no longer looks in the hash table for the specified command. + +z. The new `--enable-translatable-strings' option to `configure' allows $"..." + support to be compiled in or out. + +aa. The new `globskipdots' shell option forces pathname expansion never to + return `.' or `..' unless explicitly matched. + +bb. Array references using `@' and `*' that are the value of nameref variables + (declare -n ref='v[@]' ; echo $ref) no longer cause the shell to exit if + set -u is enabled and the array (v) is unset. + +2. New Features in Readline + +a. There is now an HS_HISTORY_VERSION containing the version number of the + history library for applications to use. + +b. History expansion better understands multiple history expansions that may + contain strings that would ordinarily inhibit history expansion (e.g., + `abc!$!$'). + +c. There is a new framework for readline timeouts, including new public + functions to set timeouts and query how much time is remaining before a + timeout hits, and a hook function that can trigger when readline times + out. There is a new state value to indicate a timeout. + +d. Automatically bind termcap key sequences for page-up and page-down to + history-search-backward and history-search-forward, respectively. + +e. There is a new `fetch-history' bindable command that retrieves the history + entry corresponding to its numeric argument. Negative arguments count back + from the end of the history. + +f. `vi-undo' is now a bindable command. + +g. There is a new option: `enable-active-region'. This separates control of + the active region and bracketed-paste. It has the same default value as + bracketed-paste, and enabling bracketed paste enables the active region. + Users can now turn off the active region while leaving bracketed paste + enabled. + +h. rl_completer_word_break_characters is now `const char *' like + rl_basic_word_break_characters. + +i. The non-incremental history searches now leave the current history offset + at the position of the last matching history entry, like incremental search. + +j. Readline looks in $LS_COLORS for a custom filename extension + (*.readline-colored-completion-prefix) and uses that as the default color + for the common prefix displayed when `colored-completion-prefix' is set. + +------------------------------------------------------------------------------- This is a terse description of the new features added to bash-5.1 since the release of bash-5.0. As always, the manual page (doc/bash.1) is the place to look for complete descriptions. diff --git a/POSIX b/POSIX index 24114af1..fb513e53 100644 --- a/POSIX +++ b/POSIX @@ -101,7 +101,11 @@ The following list is what's changed when 'POSIX mode' is in effect: 25. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a - special builtin, but not with any other simple command. + special builtin, but not with any other simple command. For any + other simple command, the shell aborts execution of that command, + and execution continues at the top level ("the shell shall not + perform any further processing of the command in which the error + occurred"). 26. A non-interactive shell exits with an error status if the iteration variable in a 'for' statement or the selection variable @@ -185,14 +189,14 @@ The following list is what's changed when 'POSIX mode' is in effect: variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + supplied as an argument exceeds 'PATH_MAX' when all symbolic links are expanded, 'cd' will fail instead of attempting to use only the supplied directory name. diff --git a/RBASH b/RBASH index 9732c769..7d0a5e8d 100644 --- a/RBASH +++ b/RBASH @@ -29,7 +29,8 @@ with the exception that the following are disallowed or not performed: * Using the 'enable' builtin command to enable disabled shell builtins. * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'set +o restricted'. + * Turning off restricted mode with 'set +r' or 'shopt -u + restricted_shell'. These restrictions are enforced after any startup files are read. @@ -40,10 +41,10 @@ spawned to execute the script. The restricted shell mode is only one component of a useful restricted environment. It should be accompanied by setting 'PATH' to a value that allows execution of only a few verified commands (commands that allow -shell escapes are particularly vulnerable), leaving the user in a -non-writable directory other than his home directory after login, not -allowing the restricted shell to execute shell scripts, and cleaning the -environment of variables that cause some commands to modify their +shell escapes are particularly vulnerable), changing the current +directory to a non-writable directory other than '$HOME' after login, +not allowing the restricted shell to execute shell scripts, and cleaning +the environment of variables that cause some commands to modify their behavior (e.g., 'VISUAL' or 'PAGER'). Modern systems provide more secure ways to implement a restricted diff --git a/README b/README index 70b7a851..84549fd4 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ Introduction ============ -This is GNU Bash, version 5.1. Bash is the GNU Project's Bourne +This is GNU Bash, version 5.2. Bash is the GNU Project's Bourne Again SHell, a complete implementation of the POSIX shell spec, but also with interactive command line editing, job control on architectures that support it, csh-like features such as history @@ -15,8 +15,8 @@ See the file POSIX for a discussion of how the Bash defaults differ from the POSIX spec and a description of the Bash `posix mode'. There are some user-visible incompatibilities between this version -of Bash and previous widely-distributed versions, bash-4.4 and -bash-5.0. For details, see the file COMPAT. The NEWS file tersely +of Bash and previous widely-distributed versions, bash-4.4, bash-5.0, +and bash-5.1. For details, see the file COMPAT. The NEWS file tersely lists features that are new in this release. Bash is free software, distributed under the terms of the [GNU] General diff --git a/aclocal.m4 b/aclocal.m4 index 6899e820..15d91433 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -3,55 +3,8 @@ dnl Bash specific tests dnl dnl Some derived from PDKSH 5.1.3 autoconf tests dnl - -AC_DEFUN(BASH_C_LONG_LONG, -[AC_CACHE_CHECK(for long long, ac_cv_c_long_long, -[if test "$GCC" = yes; then - ac_cv_c_long_long=yes -else -AC_TRY_RUN([ -#include -int -main() -{ -long long foo = 0; -exit(sizeof(long long) < sizeof(long)); -} -], ac_cv_c_long_long=yes, ac_cv_c_long_long=no) -fi]) -if test $ac_cv_c_long_long = yes; then - AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.]) -fi -]) - +dnl Copyright (C) 1987-2021 Free Software Foundation, Inc. dnl -dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX -dnl (< changed to <=) added. -dnl -AC_DEFUN(BASH_C_LONG_DOUBLE, -[AC_CACHE_CHECK(for long double, ac_cv_c_long_double, -[if test "$GCC" = yes; then - ac_cv_c_long_double=yes -else -AC_TRY_RUN([ -#include -int -main() -{ - /* The Stardent Vistra knows sizeof(long double), but does not - support it. */ - long double foo = 0.0; - /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ - /* On IRIX 5.3, the compiler converts long double to double with a warning, - but compiles this successfully. */ - exit(sizeof(long double) <= sizeof(double)); -} -], ac_cv_c_long_double=yes, ac_cv_c_long_double=no) -fi]) -if test $ac_cv_c_long_double = yes; then - AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.]) -fi -]) dnl dnl Check for . This is separated out so that it can be @@ -72,13 +25,14 @@ dnl dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND]) AC_DEFUN(BASH_CHECK_TYPE, [ -AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([BASH_HEADER_INTTYPES]) AC_MSG_CHECKING(for $1) AC_CACHE_VAL(bash_cv_type_$1, [AC_EGREP_CPP($1, [#include -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -106,32 +60,14 @@ dnl AC_CHECK_DECL dnl AC_DEFUN(BASH_CHECK_DECL, [ -AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([BASH_HEADER_INTTYPES]) -AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1, -[AC_TRY_LINK( -[ -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif -], -[return !$1;], -bash_cv_decl_$1=yes, bash_cv_decl_$1=no)]) -bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_$1 = yes; then - AC_DEFINE_UNQUOTED($bash_tr_func, 1) -else - AC_DEFINE_UNQUOTED($bash_tr_func, 0) -fi +AC_CHECK_DECLS([$1]) ]) AC_DEFUN(BASH_DECL_PRINTF, [AC_MSG_CHECKING(for declaration of printf in ) AC_CACHE_VAL(bash_cv_printf_declared, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #ifdef __STDC__ typedef int (*_bashfunc)(const char *, ...); @@ -146,7 +82,7 @@ _bashfunc pf; pf = (_bashfunc) printf; exit(pf == 0); } -], bash_cv_printf_declared=yes, bash_cv_printf_declared=no, +]])], [bash_cv_printf_declared=yes], [bash_cv_printf_declared=no], [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes) bash_cv_printf_declared=yes] )]) @@ -173,13 +109,13 @@ dnl AC_DEFUN(BASH_DECL_UNDER_SYS_SIGLIST, [AC_MSG_CHECKING([for _sys_siglist in signal.h or unistd.h]) AC_CACHE_VAL(bash_cv_decl_under_sys_siglist, -[AC_TRY_COMPILE([ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include #ifdef HAVE_UNISTD_H #include -#endif], [ char *msg = _sys_siglist[2]; ], - bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no, +#endif]], [[ char *msg = _sys_siglist[2]; ]])], + [bash_cv_decl_under_sys_siglist=yes], [bash_cv_decl_under_sys_siglist=no], [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl AC_MSG_RESULT($bash_cv_decl_under_sys_siglist) if test $bash_cv_decl_under_sys_siglist = yes; then @@ -191,7 +127,7 @@ AC_DEFUN(BASH_UNDER_SYS_SIGLIST, [AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST]) AC_MSG_CHECKING([for _sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_under_sys_siglist, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #ifdef HAVE_UNISTD_H @@ -206,21 +142,34 @@ main() { char *msg = (char *)_sys_siglist[2]; exit(msg == 0); -}], - bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no, +} +]])], + [bash_cv_under_sys_siglist=yes], [bash_cv_under_sys_siglist=no], [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no) - bash_cv_under_sys_siglist=no])]) + bash_cv_under_sys_siglist=no] +)]) AC_MSG_RESULT($bash_cv_under_sys_siglist) if test $bash_cv_under_sys_siglist = yes; then AC_DEFINE(HAVE_UNDER_SYS_SIGLIST) fi ]) +dnl this defines HAVE_DECL_SYS_SIGLIST +AC_DEFUN([BASH_DECL_SYS_SIGLIST], +[AC_CHECK_DECLS([sys_siglist],,, +[#include +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +# include +#endif +]) +]) + AC_DEFUN(BASH_SYS_SIGLIST, -[AC_REQUIRE([AC_DECL_SYS_SIGLIST]) +[AC_REQUIRE([BASH_DECL_SYS_SIGLIST]) AC_MSG_CHECKING([for sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_sys_siglist, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #ifdef HAVE_UNISTD_H @@ -235,10 +184,11 @@ main() { char *msg = sys_siglist[2]; exit(msg == 0); -}], - bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no, +} +]])], [bash_cv_sys_siglist=yes], [bash_cv_sys_siglist=no], [AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no) - bash_cv_sys_siglist=no])]) + bash_cv_sys_siglist=no] +)]) AC_MSG_RESULT($bash_cv_sys_siglist) if test $bash_cv_sys_siglist = yes; then AC_DEFINE(HAVE_SYS_SIGLIST) @@ -263,11 +213,15 @@ dnl Check for sys_errlist[] and sys_nerr, check for declaration AC_DEFUN(BASH_SYS_ERRLIST, [AC_MSG_CHECKING([for sys_errlist and sys_nerr]) AC_CACHE_VAL(bash_cv_sys_errlist, -[AC_TRY_LINK([#include ], -[extern char *sys_errlist[]; - extern int sys_nerr; - char *msg = sys_errlist[sys_nerr - 1];], - bash_cv_sys_errlist=yes, bash_cv_sys_errlist=no)])dnl +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]],[[ +extern char *sys_errlist[]; +extern int sys_nerr; +char *msg = sys_errlist[sys_nerr - 1]; +]] )], +[bash_cv_sys_errlist=yes], [bash_cv_sys_errlist=no] +)]) AC_MSG_RESULT($bash_cv_sys_errlist) if test $bash_cv_sys_errlist = yes; then AC_DEFINE(HAVE_SYS_ERRLIST) @@ -280,7 +234,7 @@ dnl AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK, [AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag) AC_CACHE_VAL(bash_cv_dup2_broken, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -298,10 +252,10 @@ main() /* fl will be 1 if dup2 did not reset the close-on-exec flag. */ exit(fl != 1); } -], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no, +]])], [bash_cv_dup2_broken=yes], [bash_cv_dup2_broken=no], [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no) - bash_cv_dup2_broken=no]) -]) + bash_cv_dup2_broken=no] +)]) AC_MSG_RESULT($bash_cv_dup2_broken) if test $bash_cv_dup2_broken = yes; then AC_DEFINE(DUP2_BROKEN) @@ -311,11 +265,12 @@ fi AC_DEFUN(BASH_FUNC_STRSIGNAL, [AC_MSG_CHECKING([for the existence of strsignal]) AC_CACHE_VAL(bash_cv_have_strsignal, -[AC_TRY_LINK([#include +[AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include #include -#include ], -[char *s = (char *)strsignal(2);], - bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)]) +#include ]], +[[char *s = (char *)strsignal(2);]])], + [bash_cv_have_strsignal=yes], [bash_cv_have_strsignal=no])]) AC_MSG_RESULT($bash_cv_have_strsignal) if test $bash_cv_have_strsignal = yes; then AC_DEFINE(HAVE_STRSIGNAL) @@ -327,7 +282,7 @@ AC_DEFUN(BASH_FUNC_OPENDIR_CHECK, [AC_REQUIRE([AC_HEADER_DIRENT])dnl AC_MSG_CHECKING(if opendir() opens non-directories) AC_CACHE_VAL(bash_cv_opendir_not_robust, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -370,7 +325,8 @@ dir = opendir("bash-aclocal/not_a_directory"); unlink("bash-aclocal/not_a_directory"); rmdir("bash-aclocal"); exit (dir == 0); -}], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, +} +]])], [bash_cv_opendir_not_robust=yes], [bash_cv_opendir_not_robust=no], [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no) bash_cv_opendir_not_robust=no] )]) @@ -380,26 +336,6 @@ AC_DEFINE(OPENDIR_NOT_ROBUST) fi ]) -dnl -AC_DEFUN(BASH_TYPE_SIGHANDLER, -[AC_MSG_CHECKING([whether signal handlers are of type void]) -AC_CACHE_VAL(bash_cv_void_sighandler, -[AC_TRY_COMPILE([#include -#include -#ifdef signal -#undef signal -#endif -#ifdef __cplusplus -extern "C" -#endif -void (*signal ()) ();], -[int i;], bash_cv_void_sighandler=yes, bash_cv_void_sighandler=no)])dnl -AC_MSG_RESULT($bash_cv_void_sighandler) -if test $bash_cv_void_sighandler = yes; then -AC_DEFINE(VOID_SIGHANDLER) -fi -]) - dnl dnl A signed 16-bit integer quantity dnl @@ -487,82 +423,98 @@ else fi ]) -AC_DEFUN(BASH_TYPE_LONG_LONG, -[ -AC_CACHE_CHECK([for long long], bash_cv_type_long_long, -[AC_TRY_LINK([ -long long ll = 1; int i = 63;], -[ -long long llm = (long long) -1; -return ll << i | ll >> i | llm / ll | llm % ll; -], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')]) -if test "$bash_cv_type_long_long" = 'long long'; then - AC_DEFINE(HAVE_LONG_LONG, 1) -fi -]) - -AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG, -[ -AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long, -[AC_TRY_LINK([ -unsigned long long ull = 1; int i = 63;], -[ -unsigned long long ullmax = (unsigned long long) -1; -return ull << i | ull >> i | ullmax / ull | ullmax % ull; -], bash_cv_type_unsigned_long_long='unsigned long long', - bash_cv_type_unsigned_long_long='unsigned long')]) -if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then - AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1) -fi -]) - -dnl -dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0) -dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use -dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify -dnl matters, this just checks for rlim_t, quad_t, or long. -dnl -AC_DEFUN(BASH_TYPE_RLIMIT, -[AC_MSG_CHECKING(for size and type of struct rlimit fields) -AC_CACHE_VAL(bash_cv_type_rlimit, -[AC_TRY_COMPILE([#include -#include ], -[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[ -AC_TRY_RUN([ -#include +AC_DEFUN(BASH_SIZEOF_RLIMIT, +[AC_MSG_CHECKING(for size of struct rlimit fields) +AC_CACHE_VAL(bash_cv_sizeof_rlim_cur, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#ifdef HAVE_SYS_TIME_H #include -#include +#endif #include -int +#include main() { -#ifdef HAVE_QUAD_T - struct rlimit rl; - if (sizeof(rl.rlim_cur) == sizeof(quad_t)) - exit(0); -#endif - exit(1); -}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long, - [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long) - bash_cv_type_rlimit=long])]) +struct rlimit r; +exit(sizeof (r.rlim_cur)); +} +]])], [bash_cv_sizeof_rlim_cur=$?], [bash_cv_sizeof_rlim_cur=$?], + [AC_MSG_WARN(cannot check size of rlimit fields if cross compiling -- defaulting to long) + bash_cv_sizeof_rlim_cur=$ac_cv_sizeof_long] +)]) +AC_MSG_RESULT($bash_cv_sizeof_rlim_cur) ]) -AC_MSG_RESULT($bash_cv_type_rlimit) -if test $bash_cv_type_rlimit = quad_t; then -AC_DEFINE(RLIMTYPE, quad_t) -elif test $bash_cv_type_rlimit = rlim_t; then -AC_DEFINE(RLIMTYPE, rlim_t) + +AC_DEFUN(BASH_SIZEOF_QUAD_T, +[AC_MSG_CHECKING(for size of quad_t) +AC_CACHE_VAL(bash_cv_sizeof_quad_t, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include +#include +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#endif + +main() +{ +#if HAVE_QUAD_T +quad_t x; +exit(sizeof (x)); +#else +exit (0); +#endif +} +]])], [bash_cv_sizeof_quad_t=$?], [bash_cv_sizeof_quad_t=$?], + [AC_MSG_WARN(cannot check size of quad_t if cross compiling -- defaulting to 0) + bash_cv_sizeof_quad_t=0] +)]) +AC_MSG_RESULT($bash_cv_sizeof_quad_t) +]) + +dnl +dnl Type of struct rlimit fields: updated to check POSIX rlim_t and +dnl if it doesn't exist determine the best guess based on sizeof(r.rlim_cur) +dnl +AC_DEFUN(BASH_TYPE_RLIMIT, +[AC_MSG_CHECKING(for type of struct rlimit fields) +AC_CACHE_VAL(bash_cv_type_rlimit, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], +[[rlim_t xxx;]] +)], + [bash_cv_type_rlimit=rlim_t], [ +BASH_SIZEOF_RLIMIT +BASH_SIZEOF_QUAD_T +if test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long; then + bash_cv_type_rlimit='unsigned long' +elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long_long; then + bash_cv_type_rlimit='unsigned long long' +elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_int; then + bash_cv_type_rlimit='unsigned int' +elif test $bash_cv_sizeof_rlim_cur = $bash_cv_sizeof_quad_t; then + bash_cv_type_rlimit='quad_t' +else + bash_cv_type_rlimit='unsigned long' fi +] +)]) +AC_MSG_RESULT($bash_cv_type_rlimit) +AC_DEFINE_UNQUOTED([RLIMTYPE], [$bash_cv_type_rlimit]) ]) AC_DEFUN(BASH_TYPE_SIG_ATOMIC_T, [AC_CACHE_CHECK([for sig_atomic_t in signal.h], ac_cv_have_sig_atomic_t, -[AC_TRY_LINK([ -#include -],[ sig_atomic_t x; ], -ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)]) +[AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ #include ]], + [[ sig_atomic_t x; ]])], + [ac_cv_have_sig_atomic_t=yes],[ac_cv_have_sig_atomic_t=no])]) if test "$ac_cv_have_sig_atomic_t" = "no" then - AC_CHECK_TYPE(sig_atomic_t,int) + BASH_CHECK_TYPE(sig_atomic_t, [#include ], int) fi ]) @@ -570,11 +522,13 @@ AC_DEFUN(BASH_FUNC_LSTAT, [dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an dnl inline function in . AC_CACHE_CHECK([for lstat], bash_cv_func_lstat, -[AC_TRY_LINK([ -#include -#include -],[ lstat(".",(struct stat *)0); ], -bash_cv_func_lstat=yes, bash_cv_func_lstat=no)]) +[AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[ + #include + #include + ]], + [[ lstat(".",(struct stat *)0); ]])], + [bash_cv_func_lstat=yes],[bash_cv_func_lstat=no])]) if test $bash_cv_func_lstat = yes; then AC_DEFINE(HAVE_LSTAT) fi @@ -583,12 +537,12 @@ fi AC_DEFUN(BASH_FUNC_INET_ATON, [ AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton, -[AC_TRY_LINK([ +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include #include #include -struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ], -bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)]) +struct in_addr ap;]], [[ inet_aton("127.0.0.1", &ap); ]])], +[bash_cv_func_inet_aton=yes], [bash_cv_func_inet_aton=no])]) if test $bash_cv_func_inet_aton = yes; then AC_DEFINE(HAVE_INET_ATON) else @@ -599,7 +553,7 @@ fi AC_DEFUN(BASH_FUNC_GETENV, [AC_MSG_CHECKING(to see if getenv can be redefined) AC_CACHE_VAL(bash_cv_getenv_redef, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #ifdef HAVE_UNISTD_H # include #endif @@ -632,7 +586,7 @@ exit(1); s = getenv("ABCDE"); exit(s == 0); /* force optimizer to leave getenv in */ } -], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no, +]])], [bash_cv_getenv_redef=yes], [bash_cv_getenv_redef=no], [AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes) bash_cv_getenv_redef=yes] )]) @@ -645,12 +599,13 @@ fi # We should check for putenv before calling this AC_DEFUN(BASH_FUNC_STD_PUTENV, [ -AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv, -[AC_TRY_LINK([ -#if STDC_HEADERS +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -663,9 +618,8 @@ extern int putenv (char *); #else extern int putenv (); #endif -], -[return (putenv == 0);], -bash_cv_std_putenv=yes, bash_cv_std_putenv=no +]], [[return (putenv == 0);]] )], +[bash_cv_std_putenv=yes], [bash_cv_std_putenv=no] )]) if test $bash_cv_std_putenv = yes; then AC_DEFINE(HAVE_STD_PUTENV) @@ -675,12 +629,13 @@ fi # We should check for unsetenv before calling this AC_DEFUN(BASH_FUNC_STD_UNSETENV, [ -AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv, -[AC_TRY_LINK([ -#if STDC_HEADERS +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -693,9 +648,8 @@ extern int unsetenv (const char *); #else extern int unsetenv (); #endif -], -[return (unsetenv == 0);], -bash_cv_std_unsetenv=yes, bash_cv_std_unsetenv=no +]], [[return (unsetenv == 0);]] )], +[bash_cv_std_unsetenv=yes], [bash_cv_std_unsetenv=no] )]) if test $bash_cv_std_unsetenv = yes; then AC_DEFINE(HAVE_STD_UNSETENV) @@ -705,7 +659,7 @@ fi AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS, [AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize) AC_CACHE_VAL(bash_cv_ulimit_maxfds, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #ifdef HAVE_ULIMIT_H #include @@ -716,7 +670,7 @@ main() long maxfds = ulimit(4, 0L); exit (maxfds == -1L); } -], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no, +]])], [bash_cv_ulimit_maxfds=yes], [bash_cv_ulimit_maxfds=no], [AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no) bash_cv_ulimit_maxfds=no] )]) @@ -729,7 +683,7 @@ fi AC_DEFUN(BASH_FUNC_GETCWD, [AC_MSG_CHECKING([if getcwd() will dynamically allocate memory with 0 size]) AC_CACHE_VAL(bash_cv_getcwd_malloc, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #ifdef HAVE_UNISTD_H #include @@ -743,7 +697,7 @@ main() xpwd = getcwd(0, 0); exit (xpwd == 0); } -], bash_cv_getcwd_malloc=yes, bash_cv_getcwd_malloc=no, +]])], [bash_cv_getcwd_malloc=yes], [bash_cv_getcwd_malloc=no], [AC_MSG_WARN(cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no) bash_cv_getcwd_malloc=no] )]) @@ -756,7 +710,7 @@ fi dnl dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every -dnl system, we can't use AC_PREREQ +dnl system, we can't use AC_PREREQ. Only called if we need the socket library dnl AC_DEFUN(BASH_FUNC_GETHOSTBYNAME, [if test "X$bash_cv_have_gethostbyname" = "X"; then @@ -766,11 +720,14 @@ AC_MSG_CHECKING(for gethostbyname in socket library) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_have_gethostbyname, -[AC_TRY_LINK([#include ], -[ struct hostent *hp; - hp = gethostbyname("localhost"); -], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)] -) +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ +struct hostent *hp; +hp = gethostbyname("localhost"); +]] )], +[bash_cv_have_gethostbyname=yes], [bash_cv_have_gethostbyname=no] +)]) if test "X$_bash_needmsg" = Xyes; then AC_MSG_CHECKING(for gethostbyname in socket library) fi @@ -783,7 +740,7 @@ fi AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH, [AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH) AC_CACHE_VAL(bash_cv_fnm_extmatch, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include int @@ -795,10 +752,10 @@ main() return (1); #endif } -], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no, +]])], [bash_cv_fnm_extmatch=yes], [bash_cv_fnm_extmatch=no], [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no) - bash_cv_fnm_extmatch=no]) -]) + bash_cv_fnm_extmatch=no] +)]) AC_MSG_RESULT($bash_cv_fnm_extmatch) if test $bash_cv_fnm_extmatch = yes; then AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH) @@ -809,7 +766,7 @@ AC_DEFUN(BASH_FUNC_POSIX_SETJMP, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp) AC_CACHE_VAL(bash_cv_func_sigsetjmp, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #ifdef HAVE_UNISTD_H #include #endif @@ -826,21 +783,30 @@ exit (1); #else int code; -sigset_t set, oset; +sigset_t set, oset, nset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); -sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); + sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); +/* paranoia -- make sure SIGINT is not blocked */ +sigdelset (&oset, SIGINT); +sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL); /* save it */ code = sigsetjmp(xx, 1); if (code) - exit(0); /* could get sigmask and compare to oset here. */ +{ + sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &nset); + /* could compare nset to oset here, but we just look for SIGINT */ + if (sigismember (&nset, SIGINT)) + exit(1); + exit(0); +} -/* change it */ +/* change it so that SIGINT is blocked */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); @@ -848,9 +814,14 @@ sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); siglongjmp(xx, 10); exit(1); #endif -}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing, - [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing) - bash_cv_func_sigsetjmp=missing] +} +]])], [bash_cv_func_sigsetjmp=present], [bash_cv_func_sigsetjmp=missing], + [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals) + if test "$bash_cv_posix_signals" = "yes" ; then + bash_cv_func_sigsetjmp=present + else + bash_cv_func_sigsetjmp=missing + fi] )]) AC_MSG_RESULT($bash_cv_func_sigsetjmp) if test $bash_cv_func_sigsetjmp = present; then @@ -859,10 +830,9 @@ fi ]) AC_DEFUN(BASH_FUNC_STRCOLL, -[ -AC_MSG_CHECKING(whether or not strcoll and strcmp differ) +[AC_MSG_CHECKING(whether or not strcoll and strcmp differ) AC_CACHE_VAL(bash_cv_func_strcoll_broken, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #if defined (HAVE_LOCALE_H) #include @@ -900,7 +870,7 @@ char *v[]; in the default locale. */ exit (r1 > 0 && r2 > 0); } -], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no, +]])], [bash_cv_func_strcoll_broken=yes], [bash_cv_func_strcoll_broken=no], [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no) bash_cv_func_strcoll_broken=no] )]) @@ -913,7 +883,7 @@ fi AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT, [AC_MSG_CHECKING([for printf floating point output in hex notation]) AC_CACHE_VAL(bash_cv_printf_a_format, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -927,7 +897,7 @@ main() sprintf(abuf, "%A", y); exit(strchr(abuf, 'P') == (char *)0); } -], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no, +]])], [bash_cv_printf_a_format=yes], [bash_cv_printf_a_format=no], [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no) bash_cv_printf_a_format=no] )]) @@ -964,12 +934,10 @@ AC_DEFUN(BASH_STRUCT_ST_BLOCKS, [ AC_MSG_CHECKING([for struct stat.st_blocks]) AC_CACHE_VAL(bash_cv_struct_stat_st_blocks, -[AC_TRY_COMPILE( -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include -], -[ +]], [[ int main() { @@ -977,7 +945,7 @@ static struct stat a; if (a.st_blocks) return 0; return 0; } -], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no) +]])], [bash_cv_struct_stat_st_blocks=yes], [bash_cv_struct_stat_st_blocks=no]) ]) AC_MSG_RESULT($bash_cv_struct_stat_st_blocks) if test "$bash_cv_struct_stat_st_blocks" = "yes"; then @@ -1077,11 +1045,12 @@ if test $bash_cv_have_socklib = yes; then fi ]) -AC_DEFUN(BASH_STRUCT_DIRENT_D_INO, -[AC_REQUIRE([AC_HEADER_DIRENT]) -AC_MSG_CHECKING(for struct dirent.d_ino) -AC_CACHE_VAL(bash_cv_dirent_has_dino, -[AC_TRY_COMPILE([ +dnl like _AC_STRUCT_DIRENT(MEMBER) but public +AC_DEFUN(BASH_STRUCT_DIRENT, +[ +AC_REQUIRE([AC_HEADER_DIRENT]) +AC_CHECK_MEMBERS(struct dirent.$1, bash_cv_dirent_has_$1=yes, bash_cv_dirent_has_$1=no, +[[ #include #include #ifdef HAVE_UNISTD_H @@ -1101,11 +1070,15 @@ AC_CACHE_VAL(bash_cv_dirent_has_dino, # include # endif #endif /* HAVE_DIRENT_H */ -],[ -struct dirent d; int z; z = d.d_ino; -], bash_cv_dirent_has_dino=yes, bash_cv_dirent_has_dino=no)]) -AC_MSG_RESULT($bash_cv_dirent_has_dino) -if test $bash_cv_dirent_has_dino = yes; then +]]) +]) + +AC_DEFUN(BASH_STRUCT_DIRENT_D_INO, +[AC_REQUIRE([AC_HEADER_DIRENT]) +AC_MSG_CHECKING(for struct dirent.d_ino) +AC_CACHE_VAL(bash_cv_dirent_has_d_ino, [BASH_STRUCT_DIRENT([d_ino])]) +AC_MSG_RESULT($bash_cv_dirent_has_d_ino) +if test $bash_cv_dirent_has_d_ino = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_INO) fi ]) @@ -1113,30 +1086,7 @@ fi AC_DEFUN(BASH_STRUCT_DIRENT_D_FILENO, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_fileno) -AC_CACHE_VAL(bash_cv_dirent_has_d_fileno, -[AC_TRY_COMPILE([ -#include -#include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_DIRENT_H) -# include -#else -# define dirent direct -# ifdef HAVE_SYS_NDIR_H -# include -# endif /* SYSNDIR */ -# ifdef HAVE_SYS_DIR_H -# include -# endif /* SYSDIR */ -# ifdef HAVE_NDIR_H -# include -# endif -#endif /* HAVE_DIRENT_H */ -],[ -struct dirent d; int z; z = d.d_fileno; -], bash_cv_dirent_has_d_fileno=yes, bash_cv_dirent_has_d_fileno=no)]) +AC_CACHE_VAL(bash_cv_dirent_has_d_fileno, [BASH_STRUCT_DIRENT([d_fileno])]) AC_MSG_RESULT($bash_cv_dirent_has_d_fileno) if test $bash_cv_dirent_has_d_fileno = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_FILENO) @@ -1146,30 +1096,7 @@ fi AC_DEFUN(BASH_STRUCT_DIRENT_D_NAMLEN, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_namlen) -AC_CACHE_VAL(bash_cv_dirent_has_d_namlen, -[AC_TRY_COMPILE([ -#include -#include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_DIRENT_H) -# include -#else -# define dirent direct -# ifdef HAVE_SYS_NDIR_H -# include -# endif /* SYSNDIR */ -# ifdef HAVE_SYS_DIR_H -# include -# endif /* SYSDIR */ -# ifdef HAVE_NDIR_H -# include -# endif -#endif /* HAVE_DIRENT_H */ -],[ -struct dirent d; int z; z = d.d_namlen; -], bash_cv_dirent_has_d_namlen=yes, bash_cv_dirent_has_d_namlen=no)]) +AC_CACHE_VAL(bash_cv_dirent_has_d_namlen, [BASH_STRUCT_DIRENT([d_namlen])]) AC_MSG_RESULT($bash_cv_dirent_has_d_namlen) if test $bash_cv_dirent_has_d_namlen = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_NAMLEN) @@ -1213,16 +1140,47 @@ if test $bash_cv_struct_timezone = yes; then fi ]) +AC_DEFUN(BASH_CHECK_WINSIZE_IOCTL, +[AC_CACHE_VAL(bash_cv_struct_winsize_ioctl, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +]], +[[ +struct winsize x; +if (sizeof (x) > 0) return (0); +]] )], [bash_cv_struct_winsize_ioctl=yes], [bash_cv_struct_winsize_ioctl=no]) +]) +]) + +AC_DEFUN(BASH_CHECK_WINSIZE_TERMIOS, +[AC_CACHE_VAL(bash_cv_struct_winsize_termios, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +]], +[[ +struct winsize x; +if (sizeof (x) > 0) return (0); +]] )], [bash_cv_struct_winsize_termios=yes], [bash_cv_struct_winsize_termios=no]) +]) +]) + AC_DEFUN(BASH_STRUCT_WINSIZE, [AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h) AC_CACHE_VAL(bash_cv_struct_winsize_header, -[AC_TRY_COMPILE([#include -#include ], [struct winsize x;], - bash_cv_struct_winsize_header=ioctl_h, - [AC_TRY_COMPILE([#include -#include ], [struct winsize x;], - bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other) -])]) +[ +BASH_CHECK_WINSIZE_IOCTL +BASH_CHECK_WINSIZE_TERMIOS + +if test $bash_cv_struct_winsize_ioctl = yes; then + bash_cv_struct_winsize_header=ioctl_h +elif test $bash_cv_struct_winsize_termios = yes; then + bash_cv_struct_winsize_header=termios_h +else + bash_cv_struct_winsize_header=other +fi +]) if test $bash_cv_struct_winsize_header = ioctl_h; then AC_MSG_RESULT(sys/ioctl.h) AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL) @@ -1234,35 +1192,68 @@ else fi ]) -dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) -AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE, -[AC_REQUIRE([AC_TYPE_SIGNAL]) -AC_MSG_CHECKING(for type of signal functions) -AC_CACHE_VAL(bash_cv_signal_vintage, -[ - AC_TRY_LINK([#include ],[ +AC_DEFUN(BASH_HAVE_POSIX_SIGNALS, +[AC_CACHE_VAL(bash_cv_posix_signals, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ sigset_t ss; struct sigaction sa; sigemptyset(&ss); sigsuspend(&ss); sigaction(SIGINT, &sa, (struct sigaction *) 0); sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); - ], bash_cv_signal_vintage=posix, - [ - AC_TRY_LINK([#include ], [ - int mask = sigmask(SIGINT); - sigsetmask(mask); sigblock(mask); sigpause(mask); - ], bash_cv_signal_vintage=4.2bsd, - [ - AC_TRY_LINK([ - #include - RETSIGTYPE foo() { }], [ - int mask = sigmask(SIGINT); - sigset(SIGINT, foo); sigrelse(SIGINT); - sighold(SIGINT); sigpause(SIGINT); - ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7 - )] - )] -) +]] )], +[bash_cv_posix_signals=yes], [bash_cv_posix_signals=no] +)]) +]) + +AC_DEFUN(BASH_HAVE_BSD_SIGNALS, +[AC_CACHE_VAL(bash_cv_bsd_signals, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ +int mask = sigmask(SIGINT); +sigsetmask(mask); sigblock(mask); sigpause(mask); +]] )], +[bash_cv_bsd_signals=yes], [bash_cv_bsd_signals=no] +)]) +]) + +AC_DEFUN(BASH_HAVE_SYSV_SIGNALS, +[AC_CACHE_VAL(bash_cv_sysv_signals, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +void foo() { } +]], [[ +int mask = sigmask(SIGINT); +sigset(SIGINT, foo); sigrelse(SIGINT); +sighold(SIGINT); sigpause(SIGINT); +]] )], +[bash_cv_sysv_signals=yes], [bash_cv_sysv_signals=no] +)]) +]) + +dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) +AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE, +[AC_MSG_CHECKING(for type of signal functions) +AC_CACHE_VAL(bash_cv_signal_vintage, +[ +BASH_HAVE_POSIX_SIGNALS +if test $bash_cv_posix_signals = yes; then + bash_cv_signal_vintage=posix +else + BASH_HAVE_BSD_SIGNALS + if test $bash_cv_bsd_signals = yes; then + bash_cv_signal_vintage=4.2bsd + else + BASH_HAVE_SYSV_SIGNALS + if test $bash_cv_sysv_signals = yes; then + bash_cv_signal_vintage=svr3 + else + bash_cv_signal_vintage=v7 + fi + fi +fi ]) AC_MSG_RESULT($bash_cv_signal_vintage) if test "$bash_cv_signal_vintage" = posix; then @@ -1279,7 +1270,7 @@ AC_DEFUN(BASH_SYS_PGRP_SYNC, [AC_REQUIRE([AC_FUNC_GETPGRP]) AC_MSG_CHECKING(whether pgrps need synchronization) AC_CACHE_VAL(bash_cv_pgrp_pipe, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #ifdef HAVE_UNISTD_H # include #endif @@ -1332,10 +1323,10 @@ main() wait(&status); exit(ok ? 0 : 5); } -], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, +]])], [bash_cv_pgrp_pipe=no], [bash_cv_pgrp_pipe=yes], [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) - bash_cv_pgrp_pipe=no]) -]) + bash_cv_pgrp_pipe=no] +)]) AC_MSG_RESULT($bash_cv_pgrp_pipe) if test $bash_cv_pgrp_pipe = yes; then AC_DEFINE(PGRP_PIPE) @@ -1343,18 +1334,17 @@ fi ]) AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS, -[AC_REQUIRE([AC_TYPE_SIGNAL]) -AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) +[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked]) AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #ifdef HAVE_UNISTD_H #include #endif #include -typedef RETSIGTYPE sigfunc(); +typedef void sigfunc(); volatile int nsigint; @@ -1376,7 +1366,7 @@ set_signal_handler(sig, handler) #define set_signal_handler(s, h) signal(s, h) #endif -RETSIGTYPE +void sigint(s) int s; { @@ -1392,7 +1382,7 @@ main() kill((int)getpid(), SIGINT); exit(nsigint != 2); } -], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes, +]])], [bash_cv_must_reinstall_sighandlers=no], [bash_cv_must_reinstall_sighandlers=yes], [AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no) bash_cv_must_reinstall_sighandlers=no] )]) @@ -1407,7 +1397,7 @@ AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of necessary job control definitions) AC_CACHE_VAL(bash_cv_job_control_missing, -[AC_TRY_COMPILE([ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #ifdef HAVE_SYS_WAIT_H #include @@ -1448,7 +1438,8 @@ AC_CACHE_VAL(bash_cv_job_control_missing, #error #endif -], , bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing +]], [[ int x; ]] )], +[bash_cv_job_control_missing=present], [bash_cv_job_control_missing=missing] )]) AC_MSG_RESULT($bash_cv_job_control_missing) if test $bash_cv_job_control_missing = missing; then @@ -1461,7 +1452,7 @@ dnl this requires a previous check for mkfifo, but that is awkward to specify AC_DEFUN(BASH_SYS_NAMED_PIPES, [AC_MSG_CHECKING(for presence of named pipes) AC_CACHE_VAL(bash_cv_sys_named_pipes, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #ifdef HAVE_UNISTD_H @@ -1501,7 +1492,8 @@ close(fd); unlink ("bash-aclocal/sh-np-autoconf"); rmdir ("bash-aclocal"); exit(0); -}], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, +} +]])], [bash_cv_sys_named_pipes=present], [bash_cv_sys_named_pipes=missing], [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing) bash_cv_sys_named_pipes=missing] )]) @@ -1533,9 +1525,11 @@ AC_DEFINE_UNQUOTED(DEFAULT_MAIL_DIRECTORY, "$bash_cv_mail_dir") AC_DEFUN(BASH_HAVE_TIOCGWINSZ, [AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocgwinsz_in_ioctl, -[AC_TRY_COMPILE([#include -#include ], [int x = TIOCGWINSZ;], - bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[int x = TIOCGWINSZ;]] )], + [bash_cv_tiocgwinsz_in_ioctl=yes], [bash_cv_tiocgwinsz_in_ioctl=no] +)]) AC_MSG_RESULT($bash_cv_tiocgwinsz_in_ioctl) if test $bash_cv_tiocgwinsz_in_ioctl = yes; then AC_DEFINE(GWINSZ_IN_SYS_IOCTL) @@ -1545,9 +1539,11 @@ fi AC_DEFUN(BASH_HAVE_TIOCSTAT, [AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl, -[AC_TRY_COMPILE([#include -#include ], [int x = TIOCSTAT;], - bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[int x = TIOCSTAT;]] )], + [bash_cv_tiocstat_in_ioctl=yes], [bash_cv_tiocstat_in_ioctl=no] +)]) AC_MSG_RESULT($bash_cv_tiocstat_in_ioctl) if test $bash_cv_tiocstat_in_ioctl = yes; then AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL) @@ -1557,9 +1553,11 @@ fi AC_DEFUN(BASH_HAVE_FIONREAD, [AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h) AC_CACHE_VAL(bash_cv_fionread_in_ioctl, -[AC_TRY_COMPILE([#include -#include ], [int x = FIONREAD;], - bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[int x = FIONREAD;]] )], + [bash_cv_fionread_in_ioctl=yes], [bash_cv_fionread_in_ioctl=no] +)]) AC_MSG_RESULT($bash_cv_fionread_in_ioctl) if test $bash_cv_fionread_in_ioctl = yes; then AC_DEFINE(FIONREAD_IN_SYS_IOCTL) @@ -1575,8 +1573,11 @@ dnl AC_DEFUN(BASH_CHECK_SPEED_T, [AC_MSG_CHECKING(for speed_t in sys/types.h) AC_CACHE_VAL(bash_cv_speed_t_in_sys_types, -[AC_TRY_COMPILE([#include ], [speed_t x;], - bash_cv_speed_t_in_sys_types=yes,bash_cv_speed_t_in_sys_types=no)]) +[AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[speed_t x;]])], + [bash_cv_speed_t_in_sys_types=yes],[bash_cv_speed_t_in_sys_types=no])]) AC_MSG_RESULT($bash_cv_speed_t_in_sys_types) if test $bash_cv_speed_t_in_sys_types = yes; then AC_DEFINE(SPEED_T_IN_SYS_TYPES) @@ -1646,31 +1647,41 @@ if test $bash_cv_dev_stdin = "present"; then fi ]) + +AC_DEFUN(BASH_CHECK_RLIMIT, +[AC_CACHE_VAL(bash_cv_rlimit, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +]], +[[ + int f; + f = RLIMIT_DATA; +]] )], +[bash_cv_rlimit=yes], [bash_cv_rlimit=no] +)]) +]) + dnl dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions dnl AC_DEFUN(BASH_CHECK_KERNEL_RLIMIT, [AC_MSG_CHECKING([whether $host_os needs _KERNEL for RLIMIT defines]) AC_CACHE_VAL(bash_cv_kernel_rlimit, -[AC_TRY_COMPILE([ -#include -#include -], -[ - int f; - f = RLIMIT_DATA; -], bash_cv_kernel_rlimit=no, -[AC_TRY_COMPILE([ +[BASH_CHECK_RLIMIT +if test $bash_cv_rlimit = no; then +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #define _KERNEL #include #undef _KERNEL -], -[ - int f; - f = RLIMIT_DATA; -], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)] -)]) +]], +[[ + int f; + f = RLIMIT_DATA; +]] )], [bash_cv_kernel_rlimit=yes], [bash_cv_kernel_rlimit=no] ) +fi +]) AC_MSG_RESULT($bash_cv_kernel_rlimit) if test $bash_cv_kernel_rlimit = yes; then AC_DEFINE(RLIMIT_NEEDS_KERNEL) @@ -1685,14 +1696,15 @@ dnl sizeof(off_t) is > 4. dnl AC_DEFUN(BASH_CHECK_OFF_T_64, [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64, -AC_TRY_COMPILE([ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_UNISTD_H #include #endif #include -],[ +]],[[ switch (0) case 0: case (sizeof (off_t) <= 4):; -], bash_cv_off_t_64=no, bash_cv_off_t_64=yes)) +]] )], [bash_cv_off_t_64=no], [bash_cv_off_t_64=yes] +)) if test $bash_cv_off_t_64 = yes; then AC_DEFINE(HAVE_OFF_T_64) fi]) @@ -1700,7 +1712,7 @@ fi]) AC_DEFUN(BASH_CHECK_RTSIGS, [AC_MSG_CHECKING(for unusable real-time signals due to large values) AC_CACHE_VAL(bash_cv_unusable_rtsigs, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -1720,7 +1732,8 @@ main () #endif exit(rtmin < n_sigs); -}], bash_cv_unusable_rtsigs=yes, bash_cv_unusable_rtsigs=no, +} +]])], [bash_cv_unusable_rtsigs=yes], [bash_cv_unusable_rtsigs=no], [AC_MSG_WARN(cannot check real-time signals if cross compiling -- defaulting to yes) bash_cv_unusable_rtsigs=yes] )]) @@ -1767,48 +1780,43 @@ fi AC_CHECK_FUNCS(iswlower iswupper towlower towupper iswctype) -AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset, -[AC_TRY_LINK( -[#include ], -[char* cs = nl_langinfo(CODESET);], -bash_cv_langinfo_codeset=yes, bash_cv_langinfo_codeset=no)]) -if test $bash_cv_langinfo_codeset = yes; then - AC_DEFINE(HAVE_LANGINFO_CODESET) -fi +AC_REQUIRE([AM_LANGINFO_CODESET]) dnl check for wchar_t in AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t, -[AC_TRY_COMPILE( -[#include -], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ wchar_t foo; foo = 0; -], bash_cv_type_wchar_t=yes, bash_cv_type_wchar_t=no)]) +]] )], [bash_cv_type_wchar_t=yes], [bash_cv_type_wchar_t=no] +)]) if test $bash_cv_type_wchar_t = yes; then AC_DEFINE(HAVE_WCHAR_T, 1, [systems should define this type here]) fi dnl check for wctype_t in AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t, -[AC_TRY_COMPILE( -[#include ], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ wctype_t foo; foo = 0; -], bash_cv_type_wctype_t=yes, bash_cv_type_wctype_t=no)]) +]] )], [bash_cv_type_wctype_t=yes], [bash_cv_type_wctype_t=no] +)]) if test $bash_cv_type_wctype_t = yes; then AC_DEFINE(HAVE_WCTYPE_T, 1, [systems should define this type here]) fi dnl check for wint_t in AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t, -[AC_TRY_COMPILE( -[#include ], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ wint_t foo; foo = 0; -], bash_cv_type_wint_t=yes, bash_cv_type_wint_t=no)]) +]] )], [bash_cv_type_wint_t=yes], [bash_cv_type_wint_t=no] +)]) if test $bash_cv_type_wint_t = yes; then AC_DEFINE(HAVE_WINT_T, 1, [systems should define this type here]) fi @@ -1816,7 +1824,7 @@ fi dnl check for broken wcwidth AC_CACHE_CHECK([for wcwidth broken with unicode combining characters], bash_cv_wcwidth_broken, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -1835,8 +1843,9 @@ char **v; w = wcwidth (0x0301); exit (w == 0); /* exit 0 if wcwidth broken */ } -], -bash_cv_wcwidth_broken=yes, bash_cv_wcwidth_broken=no, bash_cv_wcwidth_broken=no)]) +]])], [bash_cv_wcwidth_broken=yes], [bash_cv_wcwidth_broken=no], + [bash_cv_wcwidth_broken=no] +)]) if test "$bash_cv_wcwidth_broken" = yes; then AC_DEFINE(WCWIDTH_BROKEN, 1, [wcwidth is usually not broken]) fi @@ -1886,7 +1895,7 @@ CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" AC_CACHE_VAL(ac_cv_rl_version, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -1907,10 +1916,11 @@ main() fclose(fp); exit(0); } -], -ac_cv_rl_version=`cat conftest.rlv`, -ac_cv_rl_version='0.0', -ac_cv_rl_version='8.0')]) +]])], +[ac_cv_rl_version=`cat conftest.rlv`], +[ac_cv_rl_version='0.0'], +[ac_cv_rl_version='8.0'] +)]) CFLAGS="$_save_CFLAGS" LDFLAGS="$_save_LDFLAGS" @@ -1973,57 +1983,11 @@ AC_MSG_RESULT($ac_cv_rl_version) fi ]) -AC_DEFUN(BASH_FUNC_CTYPE_NONASCII, -[ -AC_MSG_CHECKING(whether the ctype macros accept non-ascii characters) -AC_CACHE_VAL(bash_cv_func_ctype_nonascii, -[AC_TRY_RUN([ -#ifdef HAVE_LOCALE_H -#include -#endif -#include -#include -#include - -int -main(c, v) -int c; -char *v[]; -{ - char *deflocale; - unsigned char x; - int r1, r2; - -#ifdef HAVE_SETLOCALE - /* We take a shot here. If that locale is not known, try the - system default. We try this one because '\342' (226) is - known to be a printable character in that locale. */ - deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); - if (deflocale == 0) - deflocale = setlocale(LC_ALL, ""); -#endif - - x = '\342'; - r1 = isprint(x); - x -= 128; - r2 = isprint(x); - exit (r1 == 0 || r2 == 0); -} -], bash_cv_func_ctype_nonascii=yes, bash_cv_func_ctype_nonascii=no, - [AC_MSG_WARN(cannot check ctype macros if cross compiling -- defaulting to no) - bash_cv_func_ctype_nonascii=no] -)]) -AC_MSG_RESULT($bash_cv_func_ctype_nonascii) -if test $bash_cv_func_ctype_nonascii = yes; then -AC_DEFINE(CTYPE_NON_ASCII) -fi -]) - AC_DEFUN(BASH_CHECK_WCONTINUED, [ AC_MSG_CHECKING(whether WCONTINUED flag to waitpid is unavailable or available but broken) AC_CACHE_VAL(bash_cv_wcontinued_broken, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -2044,7 +2008,7 @@ main() else exit (0); } -], bash_cv_wcontinued_broken=no,bash_cv_wcontinued_broken=yes, +]])], [bash_cv_wcontinued_broken=no], [bash_cv_wcontinued_broken=yes], [AC_MSG_WARN(cannot check WCONTINUED if cross compiling -- defaulting to no) bash_cv_wcontinued_broken=no] )]) @@ -2060,7 +2024,7 @@ dnl AC_DEFUN([AM_PATH_LISPDIR], - [AC_ARG_WITH(lispdir, AC_HELP_STRING([--with-lispdir], [override the default lisp directory]), + [AC_ARG_WITH(lispdir, AS_HELP_STRING([--with-lispdir], [override the default lisp directory]), [ lispdir="$withval" AC_MSG_CHECKING([where .elc files should go]) AC_MSG_RESULT([$lispdir])], @@ -2097,7 +2061,7 @@ AC_DEFUN([BASH_FUNC_SNPRINTF], AC_CHECK_FUNCS_ONCE([snprintf]) if test X$ac_cv_func_snprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf], - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2108,7 +2072,7 @@ main() n = snprintf (0, 0, "%s", "0123456"); exit(n != 7); } -], bash_cv_func_snprintf=yes, bash_cv_func_snprintf=no, +]])], [bash_cv_func_snprintf=yes], [bash_cv_func_snprintf=no], [AC_MSG_WARN([cannot check standard snprintf if cross-compiling]) bash_cv_func_snprintf=yes] )]) @@ -2127,7 +2091,7 @@ AC_DEFUN([BASH_FUNC_VSNPRINTF], AC_CHECK_FUNCS_ONCE([vsnprintf]) if test X$ac_cv_func_vsnprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf], - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #if HAVE_STDARG_H #include #else @@ -2165,7 +2129,7 @@ main() n = foo("%s", "0123456"); exit(n != 7); } -], bash_cv_func_vsnprintf=yes, bash_cv_func_vsnprintf=no, +]])], [bash_cv_func_vsnprintf=yes], [bash_cv_func_vsnprintf=no], [AC_MSG_WARN([cannot check standard vsnprintf if cross-compiling]) bash_cv_func_vsnprintf=yes] )]) @@ -2182,7 +2146,7 @@ main() AC_DEFUN(BASH_STRUCT_WEXITSTATUS_OFFSET, [AC_MSG_CHECKING(for offset of exit status in return status from wait) AC_CACHE_VAL(bash_cv_wexitstatus_offset, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2216,7 +2180,7 @@ main(c, v) exit (254); } -], bash_cv_wexitstatus_offset=0, bash_cv_wexitstatus_offset=$?, +]])], [bash_cv_wexitstatus_offset=0], [bash_cv_wexitstatus_offset=$?], [AC_MSG_WARN(cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0) bash_cv_wexitstatus_offset=0] )]) @@ -2232,13 +2196,15 @@ AC_DEFUN([BASH_FUNC_SBRK], [ AC_MSG_CHECKING([for sbrk]) AC_CACHE_VAL(ac_cv_func_sbrk, - [AC_TRY_LINK([#include ], - [ void *x = sbrk (4096); ], - ac_cv_func_sbrk=yes, ac_cv_func_sbrk=no)]) + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[ void *x = sbrk (4096); ]])], + [ac_cv_func_sbrk=yes],[ac_cv_func_sbrk=no])]) AC_MSG_RESULT($ac_cv_func_sbrk) if test X$ac_cv_func_sbrk = Xyes; then AC_CACHE_CHECK([for working sbrk], [bash_cv_func_sbrk], - [AC_TRY_RUN([ + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include @@ -2250,10 +2216,9 @@ main(int c, char **v) x = sbrk (4096); exit ((x == (void *)-1) ? 1 : 0); } -], bash_cv_func_sbrk=yes, bash_cv_func_snprintf=sbrk, - [AC_MSG_WARN([cannot check working sbrk if cross-compiling]) - bash_cv_func_sbrk=yes] -)]) +]])],[bash_cv_func_sbrk=yes],[bash_cv_func_sbrk=no],[AC_MSG_WARN([cannot check working sbrk if cross-compiling]) + bash_cv_func_sbrk=yes +])]) if test $bash_cv_func_sbrk = no; then ac_cv_func_sbrk=no fi @@ -2267,7 +2232,7 @@ main(int c, char **v) AC_DEFUN(BASH_FUNC_FNMATCH_EQUIV_FALLBACK, [AC_MSG_CHECKING(whether fnmatch can be used to check bracket equivalence classes) AC_CACHE_VAL(bash_cv_fnmatch_equiv_fallback, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include @@ -2287,8 +2252,7 @@ main (int c, char **v) exit (0); exit (1); } - -], bash_cv_fnmatch_equiv_fallback=yes, bash_cv_fnmatch_equiv_fallback=no, +]])], [bash_cv_fnmatch_equiv_fallback=yes], [bash_cv_fnmatch_equiv_fallback=no], [AC_MSG_WARN(cannot check fnmatch if cross compiling -- defaulting to no) bash_cv_fnmatch_equiv_fallback=no] )]) diff --git a/alias.c b/alias.c index cd5e99b7..23f967fa 100644 --- a/alias.c +++ b/alias.c @@ -1,7 +1,7 @@ /* alias.c -- Not a full alias, but just the kind that we use in the shell. Csh style alias is somewhere else (`over there, in a box'). */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/array.c b/array.c index 6d3554bf..910bbaad 100644 --- a/array.c +++ b/array.c @@ -9,7 +9,7 @@ * chet@ins.cwru.edu */ -/* Copyright (C) 1997-2020 Free Software Foundation, Inc. +/* Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -84,7 +84,6 @@ array_create() ARRAY_ELEMENT *head; r = (ARRAY *)xmalloc(sizeof(ARRAY)); - r->type = array_indexed; r->max_index = -1; r->num_elements = 0; r->lastref = (ARRAY_ELEMENT *)0; @@ -134,7 +133,6 @@ ARRAY *a; if (a == 0) return((ARRAY *) NULL); a1 = array_create(); - a1->type = a->type; a1->max_index = a->max_index; a1->num_elements = a->num_elements; for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae)) { @@ -161,7 +159,6 @@ ARRAY_ELEMENT *s, *e; arrayind_t mi; a = array_create (); - a->type = array->type; for (mi = 0, p = s, i = 0; p != e; p = element_forw(p), i++) { n = array_create_element (element_index(p), element_value(p)); @@ -796,6 +793,27 @@ ARRAY *a; return (REVERSE_LIST(list, WORD_LIST *)); } +WORD_LIST * +array_to_kvpair_list(a) +ARRAY *a; +{ + WORD_LIST *list; + ARRAY_ELEMENT *ae; + char *k, *v; + + if (a == 0 || array_empty(a)) + return((WORD_LIST *)NULL); + list = (WORD_LIST *)NULL; + for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae)) { + k = itos(element_index(ae)); + v = element_value(ae); + list = make_word_list (make_bare_word(k), list); + list = make_word_list (make_bare_word(v), list); + free(k); + } + return (REVERSE_LIST(list, WORD_LIST *)); +} + ARRAY * array_assign_list (array, list) ARRAY *array; @@ -835,6 +853,55 @@ int *countp; *countp = i; return (ret); } + +ARRAY * +array_from_argv(a, vec, count) +ARRAY *a; +char **vec; +int count; +{ + arrayind_t i; + ARRAY_ELEMENT *ae; + char *t; + + if (a == 0 || array_num_elements (a) == 0) + { + for (i = 0; i < count; i++) + array_insert (a, i, t); + return a; + } + + /* Fast case */ + if (array_num_elements (a) == count && count == 1) + { + ae = element_forw (a->head); + t = vec[0] ? savestring (vec[0]) : 0; + ARRAY_ELEMENT_REPLACE (ae, t); + } + else if (array_num_elements (a) <= count) + { + /* modify in array_num_elements members in place, then add */ + ae = a->head; + for (i = 0; i < array_num_elements (a); i++) + { + ae = element_forw (ae); + t = vec[0] ? savestring (vec[0]) : 0; + ARRAY_ELEMENT_REPLACE (ae, t); + } + /* add any more */ + for ( ; i < count; i++) + array_insert (a, i, vec[i]); + } + else + { + /* deleting elements. it's faster to rebuild the array. */ + array_flush (a); + for (i = 0; i < count; i++) + array_insert (a, i, vec[i]); + } + + return a; +} /* * Return a string that is the concatenation of the elements in A from START diff --git a/array.h b/array.h index 189d646f..4214e8b4 100644 --- a/array.h +++ b/array.h @@ -1,7 +1,7 @@ /* array.h -- definitions for the interface exported by array.c that allows the rest of the shell to manipulate array variables. */ -/* Copyright (C) 1997-2020 Free Software Foundation, Inc. +/* Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -27,33 +27,55 @@ typedef intmax_t arrayind_t; -enum atype {array_indexed, array_assoc}; /* only array_indexed used */ - typedef struct array { - enum atype type; arrayind_t max_index; - int num_elements; + arrayind_t num_elements; +#ifdef ALT_ARRAY_IMPLEMENTATION + arrayind_t first_index; + arrayind_t alloc_size; + struct array_element **elements; +#else struct array_element *head; struct array_element *lastref; +#endif } ARRAY; typedef struct array_element { arrayind_t ind; char *value; +#ifndef ALT_ARRAY_IMPLEMENTATION struct array_element *next, *prev; +#endif } ARRAY_ELEMENT; +#define ARRAY_DEFAULT_SIZE 1024 + typedef int sh_ae_map_func_t PARAMS((ARRAY_ELEMENT *, void *)); /* Basic operations on entire arrays */ +#ifdef ALT_ARRAY_IMPLEMENTATION +extern void array_alloc PARAMS((ARRAY *, arrayind_t)); +extern void array_resize PARAMS((ARRAY *, arrayind_t)); +extern void array_expand PARAMS((ARRAY *, arrayind_t)); +extern void array_dispose_elements PARAMS((ARRAY_ELEMENT **)); +#endif extern ARRAY *array_create PARAMS((void)); extern void array_flush PARAMS((ARRAY *)); extern void array_dispose PARAMS((ARRAY *)); extern ARRAY *array_copy PARAMS((ARRAY *)); +#ifndef ALT_ARRAY_IMPLEMENTATION extern ARRAY *array_slice PARAMS((ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *)); +#else +extern ARRAY *array_slice PARAMS((ARRAY *, arrayind_t, arrayind_t)); +#endif + extern void array_walk PARAMS((ARRAY *, sh_ae_map_func_t *, void *)); +#ifndef ALT_ARRAY_IMPLEMENTATION extern ARRAY_ELEMENT *array_shift PARAMS((ARRAY *, int, int)); +#else +extern ARRAY_ELEMENT **array_shift PARAMS((ARRAY *, int, int)); +#endif extern int array_rshift PARAMS((ARRAY *, int, char *)); extern ARRAY_ELEMENT *array_unshift_element PARAMS((ARRAY *)); extern int array_shift_element PARAMS((ARRAY *, char *)); @@ -81,10 +103,12 @@ extern char *array_reference PARAMS((ARRAY *, arrayind_t)); extern WORD_LIST *array_to_word_list PARAMS((ARRAY *)); extern ARRAY *array_from_word_list PARAMS((WORD_LIST *)); extern WORD_LIST *array_keys_to_word_list PARAMS((ARRAY *)); +extern WORD_LIST *array_to_kvpair_list PARAMS((ARRAY *)); extern ARRAY *array_assign_list PARAMS((ARRAY *, WORD_LIST *)); extern char **array_to_argv PARAMS((ARRAY *, int *)); +extern ARRAY *array_from_argv PARAMS((ARRAY *, char **, int)); extern char *array_to_kvpair PARAMS((ARRAY *, int)); extern char *array_to_assign PARAMS((ARRAY *, int)); @@ -96,22 +120,42 @@ extern ARRAY *array_from_string PARAMS((char *, char *)); #define array_num_elements(a) ((a)->num_elements) #define array_max_index(a) ((a)->max_index) +#ifndef ALT_ARRAY_IMPLEMENTATION #define array_first_index(a) ((a)->head->next->ind) #define array_head(a) ((a)->head) +#define array_alloc_size(a) ((a)->alloc_size) +#else +#define array_first_index(a) ((a)->first_index) +#define array_head(a) ((a)->elements) +#endif #define array_empty(a) ((a)->num_elements == 0) #define element_value(ae) ((ae)->value) #define element_index(ae) ((ae)->ind) + +#ifndef ALT_ARRAY_IMPLEMENTATION #define element_forw(ae) ((ae)->next) #define element_back(ae) ((ae)->prev) +#else +extern arrayind_t element_forw PARAMS((ARRAY *, arrayind_t)); +extern arrayind_t element_back PARAMS((ARRAY *, arrayind_t)); +#endif + #define set_element_value(ae, val) ((ae)->value = (val)) +#ifdef ALT_ARRAY_IMPLEMENTATION +#define set_first_index(a, i) ((a)->first_index = (i)) +#endif + +#define set_max_index(a, i) ((a)->max_index = (i)) +#define set_num_elements(a, n) ((a)->num_elements = (n)) + /* Convenience */ #define array_push(a,v) \ do { array_rshift ((a), 1, (v)); } while (0) #define array_pop(a) \ - do { array_dispose_element (array_shift ((a), 1, 0)); } while (0) + do { array_shift ((a), 1, AS_DISPOSE); } while (0) #define GET_ARRAY_FROM_VAR(n, v, a) \ do { \ @@ -119,6 +163,17 @@ extern ARRAY *array_from_string PARAMS((char *, char *)); (a) = ((v) && array_p ((v))) ? array_cell (v) : (ARRAY *)0; \ } while (0) +#define ARRAY_ELEMENT_REPLACE(ae, v) \ + do { \ + free ((ae)->value); \ + (ae)->value = (v); \ + } while (0) + +#ifdef ALT_ARRAY_IMPLEMENTATION +#define ARRAY_VALUE_REPLACE(a, i, v) \ + ARRAY_ELEMENT_REPLACE((a)->elements[(i)], (v)) +#endif + #define ALL_ELEMENT_SUB(c) ((c) == '@' || (c) == '*') /* In eval.c, but uses ARRAY * */ diff --git a/array2.c b/array2.c new file mode 100644 index 00000000..fa8be00d --- /dev/null +++ b/array2.c @@ -0,0 +1,1374 @@ +/* + * array.c - functions to create, destroy, access, and manipulate arrays + * of strings. + * + * Arrays are structs containing an array of elements and bookkeeping information. + * An element's index is stored with it. + * + * Chet Ramey + * chet@ins.cwru.edu + */ + +/* Copyright (C) 1997-2021 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. + + Bash is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Bash is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Bash. If not, see . +*/ + +#include "config.h" + +#if defined (ARRAY_VARS) + +#if defined (HAVE_UNISTD_H) +# ifdef _MINIX +# include +# endif +# include +#endif + +#include +#include "bashansi.h" + +#include "shell.h" +#include "array.h" +#include "builtins/common.h" + +#define ARRAY_MAX_DOUBLE 16777216 + +static ARRAY_ELEMENT **array_copy_elements PARAMS((ARRAY *)); +static char *array_to_string_internal PARAMS((ARRAY *, arrayind_t, arrayind_t, char *, int)); + +static char *spacesep = " "; + +void +array_alloc (a, n) +ARRAY *a; +arrayind_t n; +{ + arrayind_t i; + + if (a == 0) + return; /* for now */ + a->elements = (ARRAY_ELEMENT **)xmalloc (n * sizeof (ARRAY_ELEMENT *)); + for (i = 0; i < n; i++) + a->elements[i] = 0; + a->alloc_size = n; +} + +void +array_resize (a, n) +ARRAY *a; +arrayind_t n; +{ + ARRAY_ELEMENT **e, *ae; + arrayind_t i, nsize; + + if (a == 0) + return; + if (a->alloc_size > 0 && n >= a->max_index && n <= a->alloc_size) + return; + + e = (ARRAY_ELEMENT **)xrealloc (a->elements, n * sizeof (ARRAY_ELEMENT *)); + a->elements = e; + + for (i = a->alloc_size; i < n; i++) + a->elements[i] = (ARRAY_ELEMENT *)NULL; + + a->alloc_size = n; +} + +void +array_expand (a, n) +ARRAY *a; +arrayind_t n; +{ + arrayind_t nsize; + + if (n >= a->alloc_size) { + nsize = a->alloc_size ? a->alloc_size : ARRAY_DEFAULT_SIZE; + while (n >= nsize) + nsize <<= 1; + if (nsize > ARRAY_MAX_DOUBLE) + nsize = n + ARRAY_DEFAULT_SIZE; + array_resize (a, nsize); + } +} + +ARRAY * +array_create() +{ + ARRAY *r; + + r = (ARRAY *)xmalloc(sizeof(ARRAY)); + r->max_index = r->first_index = -1; + r->num_elements = 0; + r->alloc_size = 0; + r->elements = (ARRAY_ELEMENT **)NULL; + return(r); +} + +void +array_flush (a) +ARRAY *a; +{ + int r; + + if (a == 0) + return; + if (array_empty(a)) { + a->max_index = a->first_index = -1; /* paranoia */ + return; + } + for (r = a->first_index; r <= a->max_index; r++) + if (a->elements[r]) { + array_dispose_element(a->elements[r]); + a->elements[r] = 0; + } + a->max_index = a->first_index = -1; + a->num_elements = 0; +} + +void +array_dispose_elements(elist) +ARRAY_ELEMENT **elist; +{ + arrayind_t i; + + if (elist == 0) + return; + for (i = 0; elist[i]; i++) + array_dispose_element(elist[i]); + free(elist); +} + +void +array_dispose(a) +ARRAY *a; +{ + if (a == 0) + return; + array_dispose_elements (a->elements); + a->alloc_size = 0; + free(a); +} + +static ARRAY_ELEMENT ** +array_copy_elements (a) +ARRAY *a; +{ + ARRAY_ELEMENT **ret; + arrayind_t i; + + if (a == 0 || a->num_elements == 0) + return (ARRAY_ELEMENT **)NULL; + ret = (ARRAY_ELEMENT **)xmalloc (a->alloc_size * sizeof (ARRAY_ELEMENT *)); + for (i = 0; i < a->alloc_size; i++) + ret[i] = a->elements[i] ? array_copy_element (a->elements[i]) : 0; + return ret; +} + +ARRAY * +array_copy(a) +ARRAY *a; +{ + ARRAY *a1; + + if (a == 0) + return((ARRAY *) NULL); + a1 = array_create(); + a1->max_index = a->max_index; + a1->first_index = a->first_index; + a1->num_elements = a->num_elements; + + a1->alloc_size = a->alloc_size; + a1->elements = array_copy_elements (a); + + return(a1); +} + +/* + * Make and return a new array composed of the elements in array A from + * S to E, inclusive. The callers do the bounds checking. + */ +ARRAY * +array_slice(array, s, e) +ARRAY *array; +arrayind_t s, e; +{ + ARRAY *a; + ARRAY_ELEMENT *p, *n; + arrayind_t i, ni; + arrayind_t mi, nsize; + + a = array_create (); + + nsize = ARRAY_DEFAULT_SIZE; + while (nsize < array->alloc_size) + nsize <<= 1; + if (nsize > ARRAY_MAX_DOUBLE) + nsize = array->alloc_size + ARRAY_DEFAULT_SIZE; + + array_resize (a, nsize); + + for (i = s; i < e; i++) { + p = array->elements[i]; + n = p ? array_create_element (element_index(p), element_value(p)) : (ARRAY_ELEMENT *)NULL; + a->elements[i] = n; + } + a->num_elements = e - s; + a->max_index = e; + a->first_index = s; + + return a; +} + +/* + * Walk the array, calling FUNC once for each element, with the array + * element as the argument. + */ +void +array_walk(a, func, udata) +ARRAY *a; +sh_ae_map_func_t *func; +void *udata; +{ + arrayind_t i; + register ARRAY_ELEMENT *ae; + + if (a == 0 || array_empty(a)) + return; + for (i = array_first_index (a); i <= array_max_index(a); i++) { + if ((ae = a->elements[i]) == 0) + continue; + if ((*func)(ae, udata) < 0) + return; + } +} + +/* + * Shift the array A N elements to the left. Delete the first N elements + * and subtract N from the indices of the remaining elements. If FLAGS + * does not include AS_DISPOSE, this returns a null-terminated array of + * elements so the caller can dispose of the chain. If FLAGS includes + * AS_DISPOSE, this function disposes of the shifted-out elements and + * returns NULL. + */ +ARRAY_ELEMENT ** +array_shift(a, n, flags) +ARRAY *a; +int n, flags; +{ + ARRAY_ELEMENT **r, *ae; + register arrayind_t ni, ri; + int i, j; + + if (a == 0 || array_empty(a) || n <= 0) + return ((ARRAY_ELEMENT **)NULL); + + r = (ARRAY_ELEMENT **)xmalloc ((n + 1) * sizeof (ARRAY_ELEMENT *)); + + /* Easy case; shifting out all of the elements */ + if (n >= a->num_elements) { + if (flags & AS_DISPOSE) { + array_flush (a); + return ((ARRAY_ELEMENT **)NULL); + } + for (ri = 0, i = a->first_index; i <= a->max_index; i++) + if (a->elements[i]) { + r[ri++] = a->elements[i]; + a->elements[i] = 0; + } + + a->first_index = a->max_index = -1; + a->num_elements = 0; + r[ri] = (ARRAY_ELEMENT *)NULL; + return r; + } + + /* Shift out the first N elements, return them in R. Handle sparse + arrays by skipping over NULL array elements. */ + for (i = a->first_index, ri = 0, j = 0; j < n; i++) { + if ((ae = a->elements[i]) == 0) + continue; + if (i > a->max_index) + break; + ni = i + n; + j++; + if (ae) + r[ri++] = a->elements[i]; + a->elements[i] = a->elements[ni]; + if (a->elements[i]) + element_index(a->elements[i]) = i; + } + r[ri]= (ARRAY_ELEMENT *)NULL; + +#ifdef DEBUG +if (j < n) + itrace("array_shift: short count: j = %d n = %d", j, n); +#endif + + /* Now shift everything else, modifying the index in each element */ + for (; i <= a->max_index; i++) { + ni = i + n; + a->elements[i] = (ni <= a->max_index) ? a->elements[ni] : (ARRAY_ELEMENT *)NULL; + if (a->elements[i]) + element_index(a->elements[i]) = i; + } + + a->num_elements -= n; /* modify bookkeeping information */ + if (a->num_elements == 0) + a->first_index = a->max_index == -1; + else { + a->max_index -= n; + for (i = 0; i <= a->max_index; i++) + if (a->elements[i]) + break; + a->first_index = i; + } + + if (flags & AS_DISPOSE) { + for (i = 0; i < ri; i++) + array_dispose_element(r[i]); + free (r); + return ((ARRAY_ELEMENT **)NULL); + } + + return r; +} + +/* + * Shift array A right N indices. If S is non-null, it becomes the value of + * the new element 0. Returns the number of elements in the array after the + * shift. + */ +int +array_rshift (a, n, s) +ARRAY *a; +int n; +char *s; +{ + register ARRAY_ELEMENT *ae, *new; + arrayind_t ni, nsize; + + if (a == 0 || (array_empty(a) && s == 0)) + return 0; + else if (n <= 0) + return (a->num_elements); + + if (n >= a->alloc_size) + array_expand(a, n); + + /* Shift right, adjusting the element indexes as we go */ + for (ni = a->max_index; ni >= 0; ni--) { + a->elements[ni+n] = a->elements[ni]; + if (a->elements[ni+n]) + element_index(a->elements[ni+n]) = ni + n; + a->elements[ni] = (ARRAY_ELEMENT *)NULL; + } + a->max_index += n; + +#if 0 + /* Null out all the old indexes we just copied from */ + for (ni = a->first_index; ni >= 0 && ni < n; ni++) + a->elements[ni] = (ARRAY_ELEMENT *)NULL; +#endif + a->first_index += n; + + if (s) { + new = array_create_element(0, s); + a->elements[0] = new; + a->num_elements++; + a->first_index = 0; + if (array_num_elements(a) == 1) /* array was empty */ + a->max_index = 0; + } + + return (a->num_elements); +} + +ARRAY_ELEMENT * +array_unshift_element(a) +ARRAY *a; +{ + ARRAY_ELEMENT **r, *ret; + + r = array_shift (a, 1, 0); + ret = r[0]; + free (r); + return ret; +} + +int +array_shift_element(a, v) +ARRAY *a; +char *v; +{ + return (array_rshift (a, 1, v)); +} + +ARRAY * +array_quote(array) +ARRAY *array; +{ + register arrayind_t i; + ARRAY_ELEMENT *a; + char *t; + + if (array == 0 || array_head(array) == 0 || array_empty(array)) + return (ARRAY *)NULL; + for (i = array_first_index(array); i <= array_max_index(array); i++) { + if ((a = array->elements[i]) == 0) + continue; + t = quote_string (a->value); + FREE(a->value); + a->value = t; + } + return array; +} + +ARRAY * +array_quote_escapes(array) +ARRAY *array; +{ + register arrayind_t i; + ARRAY_ELEMENT *a; + char *t; + + if (array == 0 || array_head(array) == 0 || array_empty(array)) + return (ARRAY *)NULL; + for (i = array_first_index(array); i <= array_max_index(array); i++) { + if ((a = array->elements[i]) == 0) + continue; + t = quote_escapes (a->value); + FREE(a->value); + a->value = t; + } + return array; +} + +ARRAY * +array_dequote(array) +ARRAY *array; +{ + register arrayind_t i; + ARRAY_ELEMENT *a; + char *t; + + if (array == 0 || array_head(array) == 0 || array_empty(array)) + return (ARRAY *)NULL; + + for (i = array->first_index; i <= array->max_index; i++) { + if ((a = array->elements[i]) == 0) + continue; + t = dequote_string (a->value); + FREE(a->value); + a->value = t; + } + return array; +} + +ARRAY * +array_dequote_escapes(array) +ARRAY *array; +{ + register arrayind_t i; + ARRAY_ELEMENT *a; + char *t; + + if (array == 0 || array_head(array) == 0 || array_empty(array)) + return (ARRAY *)NULL; + for (i = array->first_index; i <= array->max_index; i++) { + if ((a = array->elements[i]) == 0) + continue; + t = dequote_escapes (a->value); + FREE(a->value); + a->value = t; + } + return array; +} + +ARRAY * +array_remove_quoted_nulls(array) +ARRAY *array; +{ + register arrayind_t i; + ARRAY_ELEMENT *a; + + if (array == 0 || array_head(array) == 0 || array_empty(array)) + return (ARRAY *)NULL; + for (i = array->first_index; i <= array->max_index; i++) { + if ((a = array->elements[i]) == 0) + continue; + a->value = remove_quoted_nulls (a->value); + } + return array; +} + +/* + * Return a string whose elements are the members of array A beginning at + * index START and spanning NELEM members. Null elements are counted. + * Since arrays are sparse, unset array elements are not counted. + */ +char * +array_subrange (a, start, nelem, starsub, quoted, pflags) +ARRAY *a; +arrayind_t start, nelem; +int starsub, quoted, pflags; +{ + ARRAY *a2; + arrayind_t s, e; + int i; + char *t; + WORD_LIST *wl; + + if (array_empty (a) || start > array_max_index(a)) + return ((char *)NULL); + + /* + * Find element with index START. If START corresponds to an unset + * element (arrays can be sparse), use the first element whose index + * is >= START. If START is < 0, we count START indices back from + * the end of A (not elements, even with sparse arrays -- START is an + * index). + */ + for (s = start; a->elements[s] == 0 && s <= a->max_index; s++) + ; + + if (s > a->max_index) + return ((char *)NULL); + + /* Starting at S, take NELEM elements, inclusive. */ + for (i = 0, e = s; e <= a->max_index && i < nelem; e++) { + if (a->elements[e]) /* arrays are sparse */ + i++; + } + + a2 = array_slice(a, s, e); + + wl = array_to_word_list(a2); + array_dispose(a2); + if (wl == 0) + return (char *)NULL; + t = string_list_pos_params(starsub ? '*' : '@', wl, quoted, pflags); /* XXX */ + dispose_words(wl); + + return t; +} + +char * +array_patsub (a, pat, rep, mflags) +ARRAY *a; +char *pat, *rep; +int mflags; +{ + char *t; + int pchar, qflags, pflags; + WORD_LIST *wl, *save; + + if (a == 0 || array_head(a) == 0 || array_empty(a)) + return ((char *)NULL); + + wl = array_to_word_list(a); + if (wl == 0) + return (char *)NULL; + + for (save = wl; wl; wl = wl->next) { + t = pat_subst (wl->word->word, pat, rep, mflags); + FREE (wl->word->word); + wl->word->word = t; + } + + pchar = (mflags & MATCH_STARSUB) == MATCH_STARSUB ? '*' : '@'; + qflags = (mflags & MATCH_QUOTED) == MATCH_QUOTED ? Q_DOUBLE_QUOTES : 0; + pflags = (mflags & MATCH_ASSIGNRHS) ? PF_ASSIGNRHS : 0; + + t = string_list_pos_params (pchar, save, qflags, pflags); + dispose_words(save); + + return t; +} + +char * +array_modcase (a, pat, modop, mflags) +ARRAY *a; +char *pat; +int modop; +int mflags; +{ + char *t; + int pchar, qflags, pflags; + WORD_LIST *wl, *save; + + if (a == 0 || array_head(a) == 0 || array_empty(a)) + return ((char *)NULL); + + wl = array_to_word_list(a); + if (wl == 0) + return ((char *)NULL); + + for (save = wl; wl; wl = wl->next) { + t = sh_modcase(wl->word->word, pat, modop); + FREE(wl->word->word); + wl->word->word = t; + } + + pchar = (mflags & MATCH_STARSUB) == MATCH_STARSUB ? '*' : '@'; + qflags = (mflags & MATCH_QUOTED) == MATCH_QUOTED ? Q_DOUBLE_QUOTES : 0; + pflags = (mflags & MATCH_ASSIGNRHS) ? PF_ASSIGNRHS : 0; + + t = string_list_pos_params (pchar, save, qflags, pflags); + dispose_words(save); + + return t; +} + +/* + * Allocate and return a new array element with index INDEX and value + * VALUE. + */ +ARRAY_ELEMENT * +array_create_element(indx, value) +arrayind_t indx; +char *value; +{ + ARRAY_ELEMENT *r; + + r = (ARRAY_ELEMENT *)xmalloc(sizeof(ARRAY_ELEMENT)); + r->ind = indx; + r->value = value ? savestring(value) : (char *)NULL; + return(r); +} + +ARRAY_ELEMENT * +array_copy_element(ae) +ARRAY_ELEMENT *ae; +{ + return(ae ? array_create_element(element_index(ae), element_value(ae)) + : (ARRAY_ELEMENT *) NULL); +} + +void +array_dispose_element(ae) +ARRAY_ELEMENT *ae; +{ + if (ae) { + FREE(ae->value); + free(ae); + } +} + +/* + * Add a new element with index I and value V to array A (a[i] = v). + */ +int +array_insert(a, i, v) +ARRAY *a; +arrayind_t i; +char *v; +{ + register ARRAY_ELEMENT *new, *old; + arrayind_t nsize; + + if (a == 0) + return(-1); + if (i >= a->alloc_size) + array_expand(a, i); + old = a->elements[i]; + if (i > array_max_index(a)) + a->max_index = i; + if (array_first_index(a) < 0 || i < array_first_index(a)) + a->first_index = i; + + if (old) { /* Replacing an existing element. */ + free(element_value(old)); + old->value = v ? savestring (v) : (char *)NULL; + old->ind = i; + return(0); + } else { + a->elements[i] = array_create_element(i, v); + a->num_elements++; + } + + return (-1); /* problem */ +} + +/* + * Delete the element with index I from array A and return it so the + * caller can dispose of it. + */ +ARRAY_ELEMENT * +array_remove(a, i) +ARRAY *a; +arrayind_t i; +{ + register ARRAY_ELEMENT *ae; + arrayind_t ind; + + if (a == 0 || array_empty(a)) + return((ARRAY_ELEMENT *) NULL); + if (i > array_max_index(a) || i < array_first_index(a)) + return((ARRAY_ELEMENT *)NULL); + ae = a->elements[i]; + a->elements[i] = 0; + if (ae) { + a->num_elements--; + if (a->num_elements == 0) + a->first_index = a->max_index == -1; + if (i == array_max_index(a)) { + for (ind = i; ind >= array_first_index(a); ind--) + if (a->elements[ind]) + break; + a->max_index = ind; + } + if (i == array_first_index(a)) { + for (ind = i; ind <= array_max_index(a); ind++) + if (a->elements[ind]) + break; + a->first_index = ind; + } + } + return (ae); +} + +/* + * Return the value of a[i]. + */ +char * +array_reference(a, i) +ARRAY *a; +arrayind_t i; +{ + register ARRAY_ELEMENT *ae; + + if (a == 0 || array_empty(a)) + return((char *) NULL); + if (i > array_max_index(a) || i < array_first_index(a)) + return((char *)NULL); + ae = a->elements[i]; + + return(ae ? element_value(ae) : (char *)NULL); +} + +/* Convenience routines for the shell to translate to and from the form used + by the rest of the code. */ + +WORD_LIST * +array_to_word_list(a) +ARRAY *a; +{ + register arrayind_t i; + WORD_LIST *list; + ARRAY_ELEMENT *ae; + + if (a == 0 || array_empty(a)) + return((WORD_LIST *)NULL); + list = (WORD_LIST *)NULL; + + for (i = array_first_index(a); i <= array_max_index(a); i++) { + if ((ae = a->elements[i]) == 0) + continue; + list = make_word_list (make_bare_word(element_value(ae)), list); + } + return (REVERSE_LIST(list, WORD_LIST *)); +} + +ARRAY * +array_from_word_list (list) +WORD_LIST *list; +{ + ARRAY *a; + + if (list == 0) + return((ARRAY *)NULL); + a = array_create(); + return (array_assign_list (a, list)); +} + +WORD_LIST * +array_keys_to_word_list(a) +ARRAY *a; +{ + arrayind_t ind; + WORD_LIST *list; + ARRAY_ELEMENT *ae; + char *t; + + if (a == 0 || array_empty(a)) + return((WORD_LIST *)NULL); + list = (WORD_LIST *)NULL; + for (ind = array_first_index(a); ind <= array_max_index(a); ind++) { + if ((ae = a->elements[ind]) == 0) + continue; + t = itos(element_index(ae)); + list = make_word_list (make_bare_word(t), list); + free(t); + } + return (REVERSE_LIST(list, WORD_LIST *)); +} + +WORD_LIST * +array_to_kvpair_list(a) +ARRAY *a; +{ + arrayind_t ind; + WORD_LIST *list; + ARRAY_ELEMENT *ae; + char *k, *v; + + if (a == 0 || array_empty(a)) + return((WORD_LIST *)NULL); + list = (WORD_LIST *)NULL; + for (ind = array_first_index(a); ind <= array_max_index(a); ind++) { + if ((ae = a->elements[ind]) == 0) + continue; + k = itos(element_index(ae)); + v = element_value (ae); + list = make_word_list (make_bare_word(k), list); + list = make_word_list (make_bare_word(v), list); + free(k); + } + return (REVERSE_LIST(list, WORD_LIST *)); +} + +ARRAY * +array_assign_list (array, list) +ARRAY *array; +WORD_LIST *list; +{ + register WORD_LIST *l; + register arrayind_t i; + + for (l = list, i = 0; l; l = l->next, i++) + array_insert(array, i, l->word->word); + return array; +} + +char ** +array_to_argv (a, countp) +ARRAY *a; +int *countp; +{ + char **ret, *t; + int i; + arrayind_t ind; + ARRAY_ELEMENT *ae; + + if (a == 0 || array_empty(a)) { + if (countp) + *countp = 0; + return ((char **)NULL); + } + ret = strvec_create (array_num_elements (a) + 1); + i = 0; + for (ind = array_first_index(a); ind <= array_max_index(a); ind++) { + if (a->elements[ind]) + ret[i++] = savestring (element_value(a->elements[ind])); + } + ret[i] = (char *)NULL; + if (countp) + *countp = i; + return (ret); +} + +ARRAY * +array_from_argv(a, vec, count) +ARRAY *a; +char **vec; +int count; +{ + arrayind_t i; + char *t; + + if (a == 0 || array_num_elements (a) == 0) { + for (i = 0; i < count; i++) + array_insert(a, i, vec[i]); + return a; + } + + /* Fast case */ + if (array_num_elements (a) == count && count == 1) { + t = vec[0] ? savestring (vec[0]) : 0; + ARRAY_VALUE_REPLACE(a, 0, t); + } else if (array_num_elements (a) <= count) { + /* modify in array_num_elements members in place, then add */ + for (i = 0; i < array_num_elements (a); i++) { + t = vec[i] ? savestring (vec[i]) : 0; + ARRAY_VALUE_REPLACE(a, i, t); + } + + /* add any more */ + for ( ; i < count; i++) + array_insert(a, i, vec[i]); + } else { + /* deleting elements. replace the first COUNT, free the rest */ + for (i = 0; i < count; i++) { + t = vec[i] ? savestring (vec[i]) : 0; + ARRAY_VALUE_REPLACE(a, i, t); + } + + for ( ; i <= array_max_index (a); i++) { + array_dispose_element(a->elements[i]); + a->elements[i] = (ARRAY_ELEMENT *)NULL; + } + + /* bookkeeping usually taken care of by array_insert */ + set_max_index(a, count - 1); + set_first_index(a, 0); + set_num_elements(a, count); + } + return a; +} + +/* + * Return the next non-null array element after A[IND] + */ +arrayind_t +element_forw(a, ind) +ARRAY *a; +arrayind_t ind; +{ + register arrayind_t i; + + for (i = ind + 1; i <= array_max_index(a); i++) + if (a->elements[i]) + break; + if (a->elements[i]) + return i; + return (array_max_index(a)); +} + +/* + * Return the previous non-null array element before A[IND] + */ +arrayind_t +element_back (a, ind) +ARRAY *a; +arrayind_t ind; +{ + register arrayind_t i; + + for (i = ind - 1; i >= array_first_index(a); i--) + if (a->elements[i]) + break; + if (a->elements[i] && i >= array_first_index(a)) + return i; + return (array_first_index(a)); +} + +/* + * Return a string that is the concatenation of the elements in A from START + * to END, separated by SEP. + */ +static char * +array_to_string_internal (a, start, end, sep, quoted) +ARRAY *a; +arrayind_t start, end; +char *sep; +int quoted; +{ + arrayind_t i; + char *result, *t; + ARRAY_ELEMENT *ae; + int slen, rsize, rlen, reg; + + slen = strlen(sep); + result = NULL; + for (rsize = rlen = 0, i = start; i <= end; i++) { + if ((ae = a->elements[i]) == 0) + continue; + if (rsize == 0) + result = (char *)xmalloc (rsize = 64); + if (element_value(ae)) { + t = quoted ? quote_string(element_value(ae)) : element_value(ae); + reg = strlen(t); + RESIZE_MALLOCED_BUFFER (result, rlen, (reg + slen + 2), + rsize, rsize); + strcpy(result + rlen, t); + rlen += reg; + if (quoted) + free(t); + /* + * Add a separator only after non-null elements. + */ + if (element_forw(a, i) <= end) { + strcpy(result + rlen, sep); + rlen += slen; + } + } + } + if (result) + result[rlen] = '\0'; /* XXX */ + return(result); +} + +char * +array_to_kvpair (a, quoted) +ARRAY *a; +int quoted; +{ + arrayind_t ind; + char *result, *valstr, *is; + char indstr[INT_STRLEN_BOUND(intmax_t) + 1]; + ARRAY_ELEMENT *ae; + int rsize, rlen, elen; + + if (a == 0 || array_empty (a)) + return((char *)NULL); + + result = (char *)xmalloc (rsize = 128); + result[rlen = 0] = '\0'; + + for (ind = array_first_index(a); ind <= array_max_index(a); ind++) { + if ((ae = a->elements[ind]) == 0) + continue; + is = inttostr (element_index(ae), indstr, sizeof(indstr)); + valstr = element_value (ae) ? + (ansic_shouldquote (element_value (ae)) ? + ansic_quote (element_value(ae), 0, (int *)0) : + sh_double_quote (element_value (ae))) + : (char *)NULL; + elen = STRLEN (is) + 8 + STRLEN (valstr); + RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); + + strcpy (result + rlen, is); + rlen += STRLEN (is); + result[rlen++] = ' '; + if (valstr) { + strcpy (result + rlen, valstr); + rlen += STRLEN (valstr); + } else { + strcpy (result + rlen, "\"\""); + rlen += 2; + } + + if (ind < array_max_index (a)) + result[rlen++] = ' '; + + FREE (valstr); + } + RESIZE_MALLOCED_BUFFER (result, rlen, 1, rsize, 8); + result[rlen] = '\0'; + + if (quoted) { + /* This is not as efficient as it could be... */ + valstr = sh_single_quote (result); + free (result); + result = valstr; + } + return(result); +} + +char * +array_to_assign (a, quoted) +ARRAY *a; +int quoted; +{ + arrayind_t ind; + char *result, *valstr, *is; + char indstr[INT_STRLEN_BOUND(intmax_t) + 1]; + ARRAY_ELEMENT *ae; + int rsize, rlen, elen; + + if (a == 0 || array_empty (a)) + return((char *)NULL); + + result = (char *)xmalloc (rsize = 128); + result[0] = '('; + rlen = 1; + + for (ind = array_first_index(a); ind <= array_max_index(a); ind++) { + if ((ae = a->elements[ind]) == 0) + continue; + is = inttostr (element_index(ae), indstr, sizeof(indstr)); + valstr = element_value (ae) ? + (ansic_shouldquote (element_value (ae)) ? + ansic_quote (element_value(ae), 0, (int *)0) : + sh_double_quote (element_value (ae))) + : (char *)NULL; + elen = STRLEN (is) + 8 + STRLEN (valstr); + RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); + + result[rlen++] = '['; + strcpy (result + rlen, is); + rlen += STRLEN (is); + result[rlen++] = ']'; + result[rlen++] = '='; + if (valstr) { + strcpy (result + rlen, valstr); + rlen += STRLEN (valstr); + } + + if (ind < array_max_index(a)) + result[rlen++] = ' '; + + FREE (valstr); + } + RESIZE_MALLOCED_BUFFER (result, rlen, 1, rsize, 8); + result[rlen++] = ')'; + result[rlen] = '\0'; + if (quoted) { + /* This is not as efficient as it could be... */ + valstr = sh_single_quote (result); + free (result); + result = valstr; + } + return(result); +} + +char * +array_to_string (a, sep, quoted) +ARRAY *a; +char *sep; +int quoted; +{ + if (a == 0) + return((char *)NULL); + if (array_empty(a)) + return(savestring("")); + return (array_to_string_internal (a, array_first_index(a), array_max_index(a), sep, quoted)); +} + +#if defined (INCLUDE_UNUSED) || defined (TEST_ARRAY) +/* + * Return an array consisting of elements in S, separated by SEP + */ +ARRAY * +array_from_string(s, sep) +char *s, *sep; +{ + ARRAY *a; + WORD_LIST *w; + + if (s == 0) + return((ARRAY *)NULL); + w = list_string (s, sep, 0); + if (w == 0) + return((ARRAY *)NULL); + a = array_from_word_list (w); + return (a); +} +#endif + +#if defined (TEST_ARRAY) +/* + * To make a running version, compile -DTEST_ARRAY and link with: + * xmalloc.o syntax.o lib/malloc/libmalloc.a lib/sh/libsh.a + */ +int interrupt_immediately = 0; + +int +signal_is_trapped(s) +int s; +{ + return 0; +} + +void +fatal_error(const char *s, ...) +{ + fprintf(stderr, "array_test: fatal memory error\n"); + abort(); +} + +void +programming_error(const char *s, ...) +{ + fprintf(stderr, "array_test: fatal programming error\n"); + abort(); +} + +WORD_DESC * +make_bare_word (s) +const char *s; +{ + WORD_DESC *w; + + w = (WORD_DESC *)xmalloc(sizeof(WORD_DESC)); + w->word = s ? savestring(s) : savestring (""); + w->flags = 0; + return w; +} + +WORD_LIST * +make_word_list(x, l) +WORD_DESC *x; +WORD_LIST *l; +{ + WORD_LIST *w; + + w = (WORD_LIST *)xmalloc(sizeof(WORD_LIST)); + w->word = x; + w->next = l; + return w; +} + +WORD_LIST * +list_string(s, t, i) +char *s, *t; +int i; +{ + char *r, *a; + WORD_LIST *wl; + + if (s == 0) + return (WORD_LIST *)NULL; + r = savestring(s); + wl = (WORD_LIST *)NULL; + a = strtok(r, t); + while (a) { + wl = make_word_list (make_bare_word(a), wl); + a = strtok((char *)NULL, t); + } + return (REVERSE_LIST (wl, WORD_LIST *)); +} + +GENERIC_LIST * +list_reverse (list) +GENERIC_LIST *list; +{ + register GENERIC_LIST *next, *prev; + + for (prev = 0; list; ) { + next = list->next; + list->next = prev; + prev = list; + list = next; + } + return prev; +} + +char * +pat_subst(s, t, u, i) +char *s, *t, *u; +int i; +{ + return ((char *)NULL); +} + +char * +quote_string(s) +char *s; +{ + return savestring(s); +} + +print_element(ae) +ARRAY_ELEMENT *ae; +{ + char lbuf[INT_STRLEN_BOUND (intmax_t) + 1]; + + printf("array[%s] = %s\n", + inttostr (element_index(ae), lbuf, sizeof (lbuf)), + element_value(ae)); +} + +print_array(a) +ARRAY *a; +{ + printf("\n"); + array_walk(a, print_element, (void *)NULL); +} + +main() +{ + ARRAY *a, *new_a, *copy_of_a; + ARRAY_ELEMENT *ae, *aew; + char *s; + + a = array_create(); + array_insert(a, 1, "one"); + array_insert(a, 7, "seven"); + array_insert(a, 4, "four"); + array_insert(a, 1029, "one thousand twenty-nine"); + array_insert(a, 12, "twelve"); + array_insert(a, 42, "forty-two"); + print_array(a); + s = array_to_string (a, " ", 0); + printf("s = %s\n", s); + copy_of_a = array_from_string(s, " "); + printf("copy_of_a:"); + print_array(copy_of_a); + array_dispose(copy_of_a); + printf("\n"); + free(s); + ae = array_remove(a, 4); + array_dispose_element(ae); + ae = array_remove(a, 1029); + array_dispose_element(ae); + array_insert(a, 16, "sixteen"); + print_array(a); + s = array_to_string (a, " ", 0); + printf("s = %s\n", s); + copy_of_a = array_from_string(s, " "); + printf("copy_of_a:"); + print_array(copy_of_a); + array_dispose(copy_of_a); + printf("\n"); + free(s); + array_insert(a, 2, "two"); + array_insert(a, 1029, "new one thousand twenty-nine"); + array_insert(a, 0, "zero"); + array_insert(a, 134, ""); + print_array(a); + s = array_to_string (a, ":", 0); + printf("s = %s\n", s); + copy_of_a = array_from_string(s, ":"); + printf("copy_of_a:"); + print_array(copy_of_a); + array_dispose(copy_of_a); + printf("\n"); + free(s); + new_a = array_copy(a); + print_array(new_a); + s = array_to_string (new_a, ":", 0); + printf("s = %s\n", s); + copy_of_a = array_from_string(s, ":"); + free(s); + printf("copy_of_a:"); + print_array(copy_of_a); + array_shift(copy_of_a, 2, AS_DISPOSE); + printf("copy_of_a shifted by two:"); + print_array(copy_of_a); + ae = array_shift(copy_of_a, 2, 0); + printf("copy_of_a shifted by two:"); + print_array(copy_of_a); + for ( ; ae; ) { + aew = element_forw(ae); + array_dispose_element(ae); + ae = aew; + } + array_rshift(copy_of_a, 1, (char *)0); + printf("copy_of_a rshift by 1:"); + print_array(copy_of_a); + array_rshift(copy_of_a, 2, "new element zero"); + printf("copy_of_a rshift again by 2 with new element zero:"); + print_array(copy_of_a); + s = array_to_assign(copy_of_a, 0); + printf("copy_of_a=%s\n", s); + free(s); + ae = array_shift(copy_of_a, array_num_elements(copy_of_a), 0); + for ( ; ae; ) { + aew = element_forw(ae); + array_dispose_element(ae); + ae = aew; + } + array_dispose(copy_of_a); + printf("\n"); + array_dispose(a); + array_dispose(new_a); +} + +#endif /* TEST_ARRAY */ +#endif /* ARRAY_VARS */ diff --git a/arrayfunc.c b/arrayfunc.c index 9338dfc7..80d3cea7 100644 --- a/arrayfunc.c +++ b/arrayfunc.c @@ -1,6 +1,6 @@ /* arrayfunc.c -- High-level array functions used by other parts of the shell. */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -53,14 +53,14 @@ int assoc_expand_once = 0; int array_expand_once = 0; static SHELL_VAR *bind_array_var_internal PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int)); -static SHELL_VAR *assign_array_element_internal PARAMS((SHELL_VAR *, char *, char *, char *, int, char *, int)); +static SHELL_VAR *assign_array_element_internal PARAMS((SHELL_VAR *, char *, char *, char *, int, char *, int, array_eltstate_t *)); static void assign_assoc_from_kvlist PARAMS((SHELL_VAR *, WORD_LIST *, HASH_TABLE *, int)); static char *quote_assign PARAMS((const char *)); static void quote_array_assignment_chars PARAMS((WORD_LIST *)); static char *quote_compound_array_word PARAMS((char *, int)); -static char *array_value_internal PARAMS((const char *, int, int, int *, arrayind_t *)); +static char *array_value_internal PARAMS((const char *, int, int, array_eltstate_t *)); /* Standard error message to use when encountering an invalid array subscript */ const char * const bash_badsub_errmsg = N_("bad array subscript"); @@ -318,19 +318,44 @@ bind_assoc_variable (entry, name, key, value, flags) return (bind_assoc_var_internal (entry, assoc_cell (entry), key, value, flags)); } +inline void +init_eltstate (array_eltstate_t *estatep) +{ + if (estatep) + { + estatep->type = ARRAY_INVALID; + estatep->subtype = 0; + estatep->key = estatep->value = 0; + estatep->ind = INTMAX_MIN; + } +} + +inline void +flush_eltstate (array_eltstate_t *estatep) +{ + if (estatep) + FREE (estatep->key); +} + /* Parse NAME, a lhs of an assignment statement of the form v[s], and assign VALUE to that array element by calling bind_array_variable(). Flags are ASS_ assignment flags */ SHELL_VAR * -assign_array_element (name, value, flags) +assign_array_element (name, value, flags, estatep) char *name, *value; int flags; + array_eltstate_t *estatep; { char *sub, *vname; - int sublen, isassoc; + int sublen, isassoc, avflags; SHELL_VAR *entry; - vname = array_variable_name (name, (flags & ASS_NOEXPAND) != 0, &sub, &sublen); + avflags = 0; + if (flags & ASS_NOEXPAND) + avflags |= AV_NOEXPAND; + if (flags & ASS_ONEWORD) + avflags |= AV_ONEWORD; + vname = array_variable_name (name, avflags, &sub, &sublen); if (vname == 0) return ((SHELL_VAR *)NULL); @@ -338,21 +363,28 @@ assign_array_element (name, value, flags) entry = find_variable (vname); isassoc = entry && assoc_p (entry); - if (((isassoc == 0 || (flags & ASS_NOEXPAND) == 0) && (ALL_ELEMENT_SUB (sub[0]) && sub[1] == ']')) || (sublen <= 1)) + /* We don't allow assignment to `*' or `@' associative array keys if the + caller hasn't told us the subscript has already been expanded + (ASS_NOEXPAND). If the caller has explicitly told us it's ok + (ASS_ALLOWALLSUB) we allow it. */ + if (((isassoc == 0 || (flags & (ASS_NOEXPAND|ASS_ALLOWALLSUB)) == 0) && + (ALL_ELEMENT_SUB (sub[0]) && sub[1] == ']')) || + (sublen <= 1) || + (sub[sublen] != '\0')) /* sanity check */ { free (vname); err_badarraysub (name); return ((SHELL_VAR *)NULL); } - entry = assign_array_element_internal (entry, name, vname, sub, sublen, value, flags); + entry = assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, estatep); free (vname); return entry; } static SHELL_VAR * -assign_array_element_internal (entry, name, vname, sub, sublen, value, flags) +assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, estatep) SHELL_VAR *entry; char *name; /* only used for error messages */ char *vname; @@ -360,15 +392,19 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags) int sublen; char *value; int flags; + array_eltstate_t *estatep; { - char *akey; + char *akey, *nkey; arrayind_t ind; + char *newval; + + /* rely on the caller to initialize estatep */ if (entry && assoc_p (entry)) { sub[sublen-1] = '\0'; if ((flags & ASS_NOEXPAND) == 0) - akey = expand_assignment_string_to_string (sub, 0); /* [ */ + akey = expand_subscript_string (sub, 0); /* [ */ else akey = savestring (sub); sub[sublen-1] = ']'; @@ -378,7 +414,15 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags) FREE (akey); return ((SHELL_VAR *)NULL); } + if (estatep) + nkey = savestring (akey); /* assoc_insert/assoc_replace frees akey */ entry = bind_assoc_variable (entry, vname, akey, value, flags); + if (estatep) + { + estatep->type = ARRAY_ASSOC; + estatep->key = nkey; + estatep->value = entry ? assoc_reference (assoc_cell (entry), nkey) : 0; + } } else { @@ -392,6 +436,12 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags) return ((SHELL_VAR *)NULL); } entry = bind_array_variable (vname, ind, value, flags); + if (estatep) + { + estatep->type = ARRAY_INDEXED; + estatep->ind = ind; + estatep->value = entry ? array_reference (array_cell (entry), ind) : 0; + } } return (entry); @@ -523,8 +573,17 @@ expand_compound_array_assignment (var, value, flags) shell expansions including pathname generation and word splitting. */ /* First we split the string on whitespace, using the shell parser (ksh93 seems to do this). */ + /* XXX - this needs a rethink, maybe use split_at_delims */ list = parse_string_to_word_list (val, 1, "array assign"); + /* If the parser has quoted CTLESC and CTNLNUL with CTLESC in unquoted + words, we need to remove those here because the code below assumes + they are there because they exist in the original word. */ + /* XXX - if we rethink parse_string_to_word_list above, change this. */ + for (nlist = list; nlist; nlist = nlist->next) + if ((nlist->word->flags & W_QUOTED) == 0) + remove_quoted_escapes (nlist->word->word); + /* Note that we defer expansion of the assignment statements for associative arrays here, so we don't have to scan the subscript and find the ending bracket twice. See the caller below. */ @@ -573,7 +632,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags) if (list->next) list = list->next; - akey = expand_assignment_string_to_string (k, 0); + akey = expand_subscript_string (k, 0); if (akey == 0 || *akey == 0) { err_badarraysub (k); @@ -581,7 +640,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags) continue; } - aval = expand_assignment_string_to_string (v, 0); + aval = expand_subscript_string (v, 0); if (aval == 0) { aval = (char *)xmalloc (1); @@ -606,10 +665,13 @@ char * expand_and_quote_kvpair_word (w) char *w; { - char *t, *r; + char *r, *s, *t; - t = w ? expand_assignment_string_to_string (w, 0) : 0; - r = sh_single_quote (t ? t : ""); + t = w ? expand_subscript_string (w, 0) : 0; + s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t; + r = sh_single_quote (s ? s : ""); + if (s != t) + free (s); free (t); return r; } @@ -709,13 +771,10 @@ assign_compound_array_list (var, nlist, flags) continue; } - if (ALL_ELEMENT_SUB (w[1]) && len == 2) + if (ALL_ELEMENT_SUB (w[1]) && len == 2 && array_p (var)) { set_exit_status (EXECUTION_FAILURE); - if (assoc_p (var)) - report_error (_("%s: invalid associative array key"), w); - else - report_error (_("%s: cannot assign to non-numeric index"), w); + report_error (_("%s: cannot assign to non-numeric index"), w); continue; } @@ -737,7 +796,7 @@ assign_compound_array_list (var, nlist, flags) { /* This is not performed above, see expand_compound_array_assignment */ w[len] = '\0'; /*[*/ - akey = expand_assignment_string_to_string (w+1, 0); + akey = expand_subscript_string (w+1, 0); w[len] = ']'; /* And we need to expand the value also, see below */ if (akey == 0 || *akey == 0) @@ -773,7 +832,7 @@ assign_compound_array_list (var, nlist, flags) /* See above; we need to expand the value here */ if (assoc_p (var)) { - val = expand_assignment_string_to_string (val, 0); + val = expand_subscript_string (val, 0); if (val == 0) { val = (char *)xmalloc (1); @@ -888,26 +947,33 @@ quote_compound_array_word (w, type) int ind, wlen, i; if (w[0] != LBRACK) - return (sh_single_quote (w)); + return (sh_single_quote (w)); /* XXX - quote CTLESC */ ind = skipsubscript (w, 0, 0); if (w[ind] != RBRACK) - return (sh_single_quote (w)); + return (sh_single_quote (w)); /* XXX - quote CTLESC */ wlen = strlen (w); w[ind] = '\0'; - sub = sh_single_quote (w+1); + t = (strchr (w+1, CTLESC)) ? quote_escapes (w+1) : w+1; + sub = sh_single_quote (t); + if (t != w+1) + free (t); w[ind] = RBRACK; nword = xmalloc (wlen * 4 + 5); /* wlen*4 is max single quoted length */ nword[0] = LBRACK; i = STRLEN (sub); memcpy (nword+1, sub, i); + free (sub); i++; /* accommodate the opening LBRACK */ nword[i++] = w[ind++]; /* RBRACK */ if (w[ind] == '+') nword[i++] = w[ind++]; nword[i++] = w[ind++]; - value = sh_single_quote (w + ind); + t = (strchr (w+ind, CTLESC)) ? quote_escapes (w+ind) : w+ind; + value = sh_single_quote (t); + if (t != w+ind) + free (t); strcpy (nword + i, value); return nword; @@ -925,19 +991,22 @@ expand_and_quote_assoc_word (w, type) char *w; int type; { - char *nword, *key, *value, *t; + char *nword, *key, *value, *s, *t; int ind, wlen, i; if (w[0] != LBRACK) - return (sh_single_quote (w)); + return (sh_single_quote (w)); /* XXX - quote_escapes */ ind = skipsubscript (w, 0, 0); if (w[ind] != RBRACK) - return (sh_single_quote (w)); + return (sh_single_quote (w)); /* XXX - quote_escapes */ w[ind] = '\0'; - t = expand_assignment_string_to_string (w+1, 0); + t = expand_subscript_string (w+1, 0); + s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t; + key = sh_single_quote (s ? s : ""); + if (s != t) + free (s); w[ind] = RBRACK; - key = sh_single_quote (t ? t : ""); free (t); wlen = STRLEN (key); @@ -951,8 +1020,11 @@ expand_and_quote_assoc_word (w, type) nword[i++] = w[ind++]; nword[i++] = w[ind++]; - t = expand_assignment_string_to_string (w+ind, 0); - value = sh_single_quote (t ? t : ""); + t = expand_subscript_string (w+ind, 0); + s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t; + value = sh_single_quote (s ? s : ""); + if (s != t) + free (s); free (t); nword = xrealloc (nword, wlen + 5 + STRLEN (value)); strcpy (nword + i, value); @@ -972,7 +1044,7 @@ quote_compound_array_list (list, type) WORD_LIST *list; int type; { - char *t; + char *s, *t; WORD_LIST *l; for (l = list; l; l = l->next) @@ -980,7 +1052,12 @@ quote_compound_array_list (list, type) if (l->word == 0 || l->word->word == 0) continue; /* should not happen, but just in case... */ if ((l->word->flags & W_ASSIGNMENT) == 0) - t = sh_single_quote (l->word->word); + { + s = (strchr (l->word->word, CTLESC)) ? quote_escapes (l->word->word) : l->word->word; + t = sh_single_quote (s); + if (s != l->word->word) + free (s); + } else t = quote_compound_array_word (l->word->word, type); free (l->word->word); @@ -1020,32 +1097,34 @@ quote_array_assignment_chars (list) /* This function is called with SUB pointing to just after the beginning `[' of an array subscript and removes the array element to which SUB expands from array VAR. A subscript of `*' or `@' unsets the array. */ -/* If FLAGS&1 we don't expand the subscript; we just use it as-is. */ +/* If FLAGS&1 (VA_NOEXPAND) we don't expand the subscript; we just use it + as-is. If FLAGS&VA_ONEWORD, we don't try to use skipsubscript to parse + the subscript, we just assume the subscript ends with a close bracket, + if one is present, and use what's inside the brackets. */ int unbind_array_element (var, sub, flags) SHELL_VAR *var; char *sub; int flags; { - int len; arrayind_t ind; char *akey; ARRAY_ELEMENT *ae; - len = skipsubscript (sub, 0, (flags&1) || (var && assoc_p(var))); /* XXX */ - if (sub[len] != ']' || len == 0) - { - builtin_error ("%s[%s: %s", var->name, sub, _(bash_badsub_errmsg)); - return -1; - } - sub[len] = '\0'; + /* Assume that the caller (unset_builtin) passes us a null-terminated SUB, + so we don't have to use VA_ONEWORD or parse the subscript again with + skipsubscript(). */ if (ALL_ELEMENT_SUB (sub[0]) && sub[1] == 0) { if (array_p (var) || assoc_p (var)) { - unbind_variable (var->name); /* XXX -- {array,assoc}_flush ? */ - return (0); + if (flags & VA_ALLOWALL) + { + unbind_variable (var->name); /* XXX -- {array,assoc}_flush ? */ + return (0); + } + /* otherwise we fall through and try to unset element `@' or `*' */ } else return -2; /* don't allow this to unset scalar variables */ @@ -1053,7 +1132,7 @@ unbind_array_element (var, sub, flags) if (assoc_p (var)) { - akey = (flags & 1) ? sub : expand_assignment_string_to_string (sub, 0); + akey = (flags & VA_NOEXPAND) ? sub : expand_subscript_string (sub, 0); if (akey == 0 || *akey == 0) { builtin_error ("[%s]: %s", sub, _(bash_badsub_errmsg)); @@ -1066,7 +1145,28 @@ unbind_array_element (var, sub, flags) } else if (array_p (var)) { - ind = array_expand_index (var, sub, len+1, 0); + if (ALL_ELEMENT_SUB (sub[0]) && sub[1] == 0) + { + /* We can go several ways here: + 1) remove the array (backwards compatible) + 2) empty the array (new behavior) + 3) do nothing; treat the `@' or `*' as an expression and throw + an error + */ + /* Behavior 1 */ + if (shell_compatibility_level <= 51) + { + unbind_variable (name_cell (var)); + return 0; + } + else /* Behavior 2 */ + { + array_flush (array_cell (var)); + return 0; + } + /* Fall through for behavior 3 */ + } + ind = array_expand_index (var, sub, strlen (sub) + 1, 0); /* negative subscripts to indexed arrays count back from end */ if (ind < 0) ind = array_max_index (array_cell (var)) + 1 + ind; @@ -1082,7 +1182,7 @@ unbind_array_element (var, sub, flags) else /* array_p (var) == 0 && assoc_p (var) == 0 */ { akey = this_command_name; - ind = array_expand_index (var, sub, len+1, 0); + ind = array_expand_index (var, sub, strlen (sub) + 1, 0); this_command_name = akey; if (ind == 0) { @@ -1144,14 +1244,23 @@ print_assoc_assignment (var, quoted) /* Return 1 if NAME is a properly-formed array reference v[sub]. */ +/* Return 1 if NAME is a properly-formed array reference v[sub]. */ + +/* When NAME is a properly-formed array reference and a non-null argument SUBP + is supplied, '[' and ']' that enclose the subscript are replaced by '\0', + and the pointer to the subscript in NAME is assigned to *SUBP, so that NAME + and SUBP can be later used as the array name and the subscript, + respectively. When SUBP is the null pointer, the original string NAME will + not be modified. */ /* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */ int -valid_array_reference (name, flags) - const char *name; +tokenize_array_reference (name, flags, subp) + char *name; int flags; + char **subp; { char *t; - int r, len, isassoc; + int r, len, isassoc, ssflags; SHELL_VAR *entry; t = mbschr (name, '['); /* ] */ @@ -1166,10 +1275,15 @@ valid_array_reference (name, flags) if (r == 0) return 0; + ssflags = 0; if (isassoc && ((flags & (VA_NOEXPAND|VA_ONEWORD)) == (VA_NOEXPAND|VA_ONEWORD))) len = strlen (t) - 1; else if (isassoc) - len = skipsubscript (t, 0, flags&VA_NOEXPAND); /* VA_NOEXPAND must be 1 */ + { + if (flags & VA_NOEXPAND) + ssflags |= 1; + len = skipsubscript (t, 0, ssflags); + } else /* Check for a properly-terminated non-null subscript. */ len = skipsubscript (t, 0, 0); /* arithmetic expression */ @@ -1182,16 +1296,34 @@ valid_array_reference (name, flags) existing associative arrays, using isassoc */ for (r = 1; r < len; r++) if (whitespace (t[r]) == 0) - return 1; - return 0; -#else + break; + if (r == len) + return 0; /* Fail if the subscript contains only whitespaces. */ +#endif + + if (subp) + { + t[0] = t[len] = '\0'; + *subp = t + 1; + } + /* This allows blank subscripts */ return 1; -#endif } return 0; } +/* Return 1 if NAME is a properly-formed array reference v[sub]. */ + +/* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */ +int +valid_array_reference (name, flags) + const char *name; + int flags; +{ + return tokenize_array_reference ((char *)name, flags, (char **)NULL); +} + /* Expand the array index beginning at S and extending LEN characters. */ arrayind_t array_expand_index (var, s, len, flags) @@ -1201,7 +1333,7 @@ array_expand_index (var, s, len, flags) int flags; { char *exp, *t, *savecmd; - int expok; + int expok, eflag; arrayind_t val; exp = (char *)xmalloc (len); @@ -1212,11 +1344,13 @@ array_expand_index (var, s, len, flags) t = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH|Q_ARRAYSUB); /* XXX - Q_ARRAYSUB for future use */ else t = exp; -#endif +#else t = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH|Q_ARRAYSUB); /* XXX - Q_ARRAYSUB for future use */ +#endif savecmd = this_command_name; this_command_name = (char *)NULL; - val = evalexp (t, EXP_EXPANDED, &expok); /* XXX - was 0 but we expanded exp already */ + eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED; + val = evalexp (t, eflag, &expok); /* XXX - was 0 but we expanded exp already */ this_command_name = savecmd; if (t != exp) free (t); @@ -1245,7 +1379,7 @@ array_variable_name (s, flags, subp, lenp) int *lenp; { char *t, *ret; - int ind, ni; + int ind, ni, ssflags; t = mbschr (s, '['); if (t == 0) @@ -1257,7 +1391,15 @@ array_variable_name (s, flags, subp, lenp) return ((char *)NULL); } ind = t - s; - ni = skipsubscript (s, ind, flags); /* XXX - was 0 not flags */ + if ((flags & (AV_NOEXPAND|AV_ONEWORD)) == (AV_NOEXPAND|AV_ONEWORD)) + ni = strlen (s) - 1; + else + { + ssflags = 0; + if (flags & AV_NOEXPAND) + ssflags |= 1; + ni = skipsubscript (s, ind, ssflags); + } if (ni <= ind + 1 || s[ni] != ']') { err_badarraysub (s); @@ -1323,19 +1465,19 @@ array_variable_part (s, flags, subp, lenp) is non-null it gets 1 if the array reference is name[*], 2 if the reference is name[@], and 0 otherwise. */ static char * -array_value_internal (s, quoted, flags, rtype, indp) +array_value_internal (s, quoted, flags, estatep) const char *s; - int quoted, flags, *rtype; - arrayind_t *indp; + int quoted, flags; + array_eltstate_t *estatep; { - int len; + int len, isassoc, subtype; arrayind_t ind; char *akey; char *retval, *t, *temp; WORD_LIST *l; SHELL_VAR *var; - var = array_variable_part (s, (flags&AV_NOEXPAND) ? 1 : 0, &t, &len); /* XXX */ + var = array_variable_part (s, flags, &t, &len); /* XXX */ /* Expand the index, even if the variable doesn't exist, in case side effects are needed, like ${w[i++]} where w is unset. */ @@ -1347,38 +1489,53 @@ array_value_internal (s, quoted, flags, rtype, indp) if (len == 0) return ((char *)NULL); /* error message already printed */ + isassoc = var && assoc_p (var); /* [ */ akey = 0; - if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']') + subtype = 0; + if (estatep) + estatep->value = (char *)NULL; + + /* Backwards compatibility: we only change the behavior of A[@] and A[*] + for associative arrays, and the caller has to request it. */ + if ((isassoc == 0 || (flags & AV_ATSTARKEYS) == 0) && ALL_ELEMENT_SUB (t[0]) && t[1] == ']') { - if (rtype) - *rtype = (t[0] == '*') ? 1 : 2; + if (estatep) + estatep->subtype = (t[0] == '*') ? 1 : 2; if ((flags & AV_ALLOWALL) == 0) { err_badarraysub (s); return ((char *)NULL); } - else if (var == 0 || value_cell (var) == 0) /* XXX - check for invisible_p(var) ? */ + else if (var == 0 || value_cell (var) == 0) return ((char *)NULL); else if (invisible_p (var)) return ((char *)NULL); else if (array_p (var) == 0 && assoc_p (var) == 0) - l = add_string_to_list (value_cell (var), (WORD_LIST *)NULL); + { + if (estatep) + estatep->type = ARRAY_SCALAR; + l = add_string_to_list (value_cell (var), (WORD_LIST *)NULL); + } else if (assoc_p (var)) { + if (estatep) + estatep->type = ARRAY_ASSOC; l = assoc_to_word_list (assoc_cell (var)); if (l == (WORD_LIST *)NULL) return ((char *)NULL); } else { + if (estatep) + estatep->type = ARRAY_ASSOC; l = array_to_word_list (array_cell (var)); if (l == (WORD_LIST *)NULL) return ((char *) NULL); } - /* Caller of array_value takes care of inspecting rtype and duplicating - retval if rtype == 0, so this is not a memory leak */ + /* Caller of array_value takes care of inspecting estatep->subtype and + duplicating retval if subtype == 0, so this is not a memory leak */ if (t[0] == '*' && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) { temp = string_list_dollar_star (l, quoted, (flags & AV_ASSIGNRHS) ? PF_ASSIGNRHS : 0); @@ -1392,11 +1549,11 @@ array_value_internal (s, quoted, flags, rtype, indp) } else { - if (rtype) - *rtype = 0; + if (estatep) + estatep->subtype = 0; if (var == 0 || array_p (var) || assoc_p (var) == 0) { - if ((flags & AV_USEIND) == 0 || indp == 0) + if ((flags & AV_USEIND) == 0 || estatep == 0) { ind = array_expand_index (var, t, len, flags); if (ind < 0) @@ -1407,17 +1564,23 @@ array_value_internal (s, quoted, flags, rtype, indp) if (ind < 0) INDEX_ERROR(); } - if (indp) - *indp = ind; + if (estatep) + estatep->ind = ind; } - else if (indp) - ind = *indp; + else if (estatep && (flags & AV_USEIND)) + ind = estatep->ind; + if (estatep && var) + estatep->type = array_p (var) ? ARRAY_INDEXED : ARRAY_SCALAR; } else if (assoc_p (var)) { t[len - 1] = '\0'; - if ((flags & AV_NOEXPAND) == 0) - akey = expand_assignment_string_to_string (t, 0); /* [ */ + if (estatep) + estatep->type = ARRAY_ASSOC; + if ((flags & AV_USEIND) && estatep && estatep->key) + akey = savestring (estatep->key); + else if ((flags & AV_NOEXPAND) == 0) + akey = expand_subscript_string (t, 0); /* [ */ else akey = savestring (t); t[len - 1] = ']'; @@ -1427,26 +1590,34 @@ array_value_internal (s, quoted, flags, rtype, indp) INDEX_ERROR(); } } - - if (var == 0 || value_cell (var) == 0) /* XXX - check invisible_p(var) ? */ + + if (var == 0 || value_cell (var) == 0) { - FREE (akey); + FREE (akey); return ((char *)NULL); } else if (invisible_p (var)) { - FREE (akey); + FREE (akey); return ((char *)NULL); } if (array_p (var) == 0 && assoc_p (var) == 0) - return (ind == 0 ? value_cell (var) : (char *)NULL); + retval = (ind == 0) ? value_cell (var) : (char *)NULL; else if (assoc_p (var)) { retval = assoc_reference (assoc_cell (var), akey); - free (akey); + if (estatep && estatep->key && (flags & AV_USEIND)) + free (akey); /* duplicated estatep->key */ + else if (estatep) + estatep->key = akey; /* XXX - caller must manage */ + else /* not saving it anywhere */ + free (akey); } else retval = array_reference (array_cell (var), ind); + + if (estatep) + estatep->value = retval; } return retval; @@ -1455,12 +1626,15 @@ array_value_internal (s, quoted, flags, rtype, indp) /* Return a string containing the elements described by the array and subscript contained in S, obeying quoting for subscripts * and @. */ char * -array_value (s, quoted, flags, rtype, indp) +array_value (s, quoted, flags, estatep) const char *s; - int quoted, flags, *rtype; - arrayind_t *indp; + int quoted, flags; + array_eltstate_t *estatep; { - return (array_value_internal (s, quoted, flags|AV_ALLOWALL, rtype, indp)); + char *retval; + + retval = array_value_internal (s, quoted, flags|AV_ALLOWALL, estatep); + return retval; } /* Return the value of the array indexing expression S as a single string. @@ -1468,12 +1642,15 @@ array_value (s, quoted, flags, rtype, indp) is used by other parts of the shell such as the arithmetic expression evaluator in expr.c. */ char * -get_array_value (s, flags, rtype, indp) +get_array_value (s, flags, estatep) const char *s; - int flags, *rtype; - arrayind_t *indp; + int flags; + array_eltstate_t *estatep; { - return (array_value_internal (s, 0, flags, rtype, indp)); + char *retval; + + retval = array_value_internal (s, 0, flags, estatep); + return retval; } char * diff --git a/arrayfunc.h b/arrayfunc.h index 838e76d2..69112b57 100644 --- a/arrayfunc.h +++ b/arrayfunc.h @@ -1,6 +1,6 @@ /* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -23,6 +23,29 @@ /* Must include variables.h before including this file. */ +/* An object to encapsulate the state of an array element. It can describe + an array assignment A[KEY]=VALUE or a[IND]=VALUE depending on TYPE, or + for passing array subscript references around, where VALUE would be + ${a[IND]} or ${A[KEY]}. This is not dependent on ARRAY_VARS so we can + use it in function parameters. */ + +/* values for `type' field */ +#define ARRAY_INVALID -1 +#define ARRAY_SCALAR 0 +#define ARRAY_INDEXED 1 +#define ARRAY_ASSOC 2 + +/* KEY will contain allocated memory if called through the assign_array_element + code path because of how assoc_insert works. */ +typedef struct element_state +{ + short type; /* assoc or indexed, says which fields are valid */ + short subtype; /* `*', `@', or something else */ + arrayind_t ind; + char *key; /* can be allocated memory */ + char *value; +} array_eltstate_t; + #if defined (ARRAY_VARS) /* This variable means to not expand associative array subscripts more than @@ -32,17 +55,23 @@ extern int assoc_expand_once; /* The analog for indexed array subscripts */ extern int array_expand_once; -/* Flags for array_value_internal and callers array_value/get_array_value */ -#define AV_ALLOWALL 0x001 +/* Flags for array_value_internal and callers array_value/get_array_value; also + used by array_variable_name and array_variable_part. */ +#define AV_ALLOWALL 0x001 /* treat a[@] like $@ and a[*] like $* */ #define AV_QUOTED 0x002 #define AV_USEIND 0x004 #define AV_USEVAL 0x008 /* XXX - should move this */ #define AV_ASSIGNRHS 0x010 /* no splitting, special case ${a[@]} */ #define AV_NOEXPAND 0x020 /* don't run assoc subscripts through word expansion */ +#define AV_ONEWORD 0x040 /* not used yet */ +#define AV_ATSTARKEYS 0x080 /* accept a[@] and a[*] but use them as keys, not special values */ -/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript() */ +/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript(). + Also used by unbind_array_element, which is currently the only function + that uses VA_ALLOWALL. */ #define VA_NOEXPAND 0x001 #define VA_ONEWORD 0x002 +#define VA_ALLOWALL 0x004 /* allow @ to mean all elements of the array */ extern SHELL_VAR *convert_var_to_array PARAMS((SHELL_VAR *)); extern SHELL_VAR *convert_var_to_assoc PARAMS((SHELL_VAR *)); @@ -51,7 +80,7 @@ extern char *make_array_variable_value PARAMS((SHELL_VAR *, arrayind_t, char *, extern SHELL_VAR *bind_array_variable PARAMS((char *, arrayind_t, char *, int)); extern SHELL_VAR *bind_array_element PARAMS((SHELL_VAR *, arrayind_t, char *, int)); -extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int)); +extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int, array_eltstate_t *)); extern SHELL_VAR *bind_assoc_variable PARAMS((SHELL_VAR *, char *, char *, char *, int)); @@ -78,22 +107,33 @@ extern void print_assoc_assignment PARAMS((SHELL_VAR *, int)); extern arrayind_t array_expand_index PARAMS((SHELL_VAR *, char *, int, int)); extern int valid_array_reference PARAMS((const char *, int)); -extern char *array_value PARAMS((const char *, int, int, int *, arrayind_t *)); -extern char *get_array_value PARAMS((const char *, int, int *, arrayind_t *)); +extern int tokenize_array_reference PARAMS((char *, int, char **)); + +extern char *array_value PARAMS((const char *, int, int, array_eltstate_t *)); +extern char *get_array_value PARAMS((const char *, int, array_eltstate_t *)); extern char *array_keys PARAMS((char *, int, int)); extern char *array_variable_name PARAMS((const char *, int, char **, int *)); extern SHELL_VAR *array_variable_part PARAMS((const char *, int, char **, int *)); +extern void init_eltstate (array_eltstate_t *); +extern void flush_eltstate (array_eltstate_t *); + #else #define AV_ALLOWALL 0 #define AV_QUOTED 0 #define AV_USEIND 0 +#define AV_USEVAL 0 #define AV_ASSIGNRHS 0 +#define AV_NOEXPAND 0 +#define AV_ONEWORD 0 +#define AV_ATSTARKEYS 0 +#define VA_NOEXPAND 0 #define VA_ONEWORD 0 +#define VA_ALLOWALL 0 #endif diff --git a/assoc.c b/assoc.c index 5782e856..cbb5c7e4 100644 --- a/assoc.c +++ b/assoc.c @@ -7,7 +7,7 @@ * chet@ins.cwru.edu */ -/* Copyright (C) 2008,2009,2011-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009,2011-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -544,6 +544,30 @@ assoc_keys_to_word_list (h) return (assoc_to_word_list_internal (h, 1)); } +WORD_LIST * +assoc_to_kvpair_list (h) + HASH_TABLE *h; +{ + WORD_LIST *list; + int i; + BUCKET_CONTENTS *tlist; + char *k, *v; + + if (h == 0 || assoc_empty (h)) + return((WORD_LIST *)NULL); + list = (WORD_LIST *)NULL; + + for (i = 0; i < h->nbuckets; i++) + for (tlist = hash_items (i, h); tlist; tlist = tlist->next) + { + k = (char *)tlist->key; + v = (char *)tlist->data; + list = make_word_list (make_bare_word (k), list); + list = make_word_list (make_bare_word (v), list); + } + return (REVERSE_LIST(list, WORD_LIST *)); +} + char * assoc_to_string (h, sep, quoted) HASH_TABLE *h; diff --git a/assoc.h b/assoc.h index 78ec0738..664d1374 100644 --- a/assoc.h +++ b/assoc.h @@ -1,7 +1,7 @@ /* assoc.h -- definitions for the interface exported by assoc.c that allows the rest of the shell to manipulate associative array variables. */ -/* Copyright (C) 2008,2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008,2009-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -60,6 +60,7 @@ extern char *assoc_to_assign PARAMS((HASH_TABLE *, int)); extern WORD_LIST *assoc_to_word_list PARAMS((HASH_TABLE *)); extern WORD_LIST *assoc_keys_to_word_list PARAMS((HASH_TABLE *)); +extern WORD_LIST *assoc_to_kvpair_list PARAMS((HASH_TABLE *)); extern char *assoc_to_string PARAMS((HASH_TABLE *, char *, int)); #endif /* _ASSOC_H_ */ diff --git a/bashansi.h b/bashansi.h index 2c33937d..dd2a544c 100644 --- a/bashansi.h +++ b/bashansi.h @@ -1,6 +1,6 @@ /* bashansi.h -- Typically included information required by picky compilers. */ -/* Copyright (C) 1993-2009 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,9 +22,6 @@ #define _BASHANSI_H_ #if defined (HAVE_STRING_H) -# if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H) -# include -# endif # include #endif /* !HAVE_STRING_H */ diff --git a/bashhist.c b/bashhist.c index 2a05a53f..90cd8c34 100644 --- a/bashhist.c +++ b/bashhist.c @@ -1,6 +1,6 @@ /* bashhist.c -- bash interface to the GNU history library. */ -/* Copyright (C) 1993-2019 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -374,8 +374,11 @@ bash_delete_history_range (first, last) HIST_ENTRY **discard_list; discard_list = remove_history_range (first, last); - for (i = 0; discard_list && discard_list[i]; i++) + if (discard_list == 0) + return 0; + for (i = 0; discard_list[i]; i++) free_history_entry (discard_list[i]); + free (discard_list); history_lines_this_session -= i; return 1; @@ -653,6 +656,8 @@ shell_comment (line) char *p; int n; + if (dstack.delimiter_depth != 0 || (parser_state & PST_HEREDOC)) + return 0; if (line == 0) return 0; for (p = line; p && *p && whitespace (*p); p++) @@ -757,7 +762,7 @@ maybe_add_history (line) int is_comment; hist_last_line_added = 0; - is_comment = (parser_state & PST_HEREDOC) ? 0 : shell_comment (line); + is_comment = shell_comment (line); /* Don't use the value of history_control to affect the second and subsequent lines of a multi-line command (old code did @@ -874,7 +879,7 @@ bash_add_history (line) add_it = 1; if (command_oriented_history && current_command_line_count > 1) { - is_comment = (parser_state & PST_HEREDOC) ? 0 : shell_comment (line); + is_comment = shell_comment (line); /* The second and subsequent lines of a here document have the trailing newline preserved. We don't want to add extra newlines here, but we @@ -887,7 +892,7 @@ bash_add_history (line) (current_command_line_count > 2) don't add a newline here. This will also take care of the literal_history case if the other conditions are met. */ - if ((parser_state & PST_HEREDOC) && current_command_line_count > 2 && line[strlen (line) - 1] == '\n') + if ((parser_state & PST_HEREDOC) && here_doc_first_line == 0 && line[strlen (line) - 1] == '\n') chars_to_add = ""; else if (current_command_line_count == current_command_line_comment+1) chars_to_add = "\n"; diff --git a/bashjmp.h b/bashjmp.h index 8ed1ac47..1a4721bc 100644 --- a/bashjmp.h +++ b/bashjmp.h @@ -1,6 +1,6 @@ /* bashjmp.h -- wrapper for setjmp.h with necessary bash definitions. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -42,5 +42,6 @@ extern int no_longjmp_on_fatal_error; #define EXITPROG 3 /* Unconditionally exit the program now. */ #define ERREXIT 4 /* Exit due to error condition */ #define SIGEXIT 5 /* Exit due to fatal terminating signal */ +#define EXITBLTIN 6 /* Exit due to the exit builtin. */ #endif /* _BASHJMP_H_ */ diff --git a/bashline.c b/bashline.c index c69c0c5e..1edff1e1 100644 --- a/bashline.c +++ b/bashline.c @@ -1,6 +1,6 @@ /* bashline.c -- Bash's interface to the readline library. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -56,6 +56,7 @@ #include "shmbutil.h" #include "trap.h" #include "flags.h" +#include "timer.h" #if defined (HAVE_MBSTR_H) && defined (HAVE_MBSCHR) # include /* mbschr */ @@ -141,6 +142,8 @@ static int bash_kill_shellword PARAMS((int, int)); static int bash_backward_kill_shellword PARAMS((int, int)); static int bash_transpose_shellwords PARAMS((int, int)); +static int bash_spell_correct_shellword PARAMS((int, int)); + /* Helper functions for Readline. */ static char *restore_tilde PARAMS((char *, char *)); static char *maybe_restore_tilde PARAMS((char *, char *)); @@ -189,6 +192,8 @@ static int return_zero PARAMS((const char *)); static char *bash_dequote_filename PARAMS((char *, int)); static char *quote_word_break_chars PARAMS((char *)); +static int bash_check_expchar PARAMS((char *, int, int *, int *)); +static void set_filename_quote_chars PARAMS((int, int, int)); static void set_filename_bstab PARAMS((const char *)); static char *bash_quote_filename PARAMS((char *, int, char *)); @@ -225,6 +230,7 @@ static char **prog_complete_matches; extern int no_symbolic_links; extern STRING_INT_ALIST word_token_alist[]; +extern sh_timer *read_timeout; /* SPECIFIC_COMPLETION_FUNCTIONS specifies that we have individual completion functions which indicate what type of completion should be @@ -370,7 +376,8 @@ enable_hostname_completion (on_or_off) int on_or_off; { int old_value; - char *at, *nv, *nval; + char *nv, *nval; + const char *at; old_value = perform_hostname_completion; @@ -430,7 +437,7 @@ enable_hostname_completion (on_or_off) strcpy (nval + 1, rl_completer_word_break_characters); } - free (rl_completer_word_break_characters); + free ((void *)rl_completer_word_break_characters); rl_completer_word_break_characters = nval; } @@ -468,6 +475,9 @@ initialize_readline () rl_add_defun ("shell-backward-kill-word", bash_backward_kill_shellword, -1); rl_add_defun ("shell-transpose-words", bash_transpose_shellwords, -1); + rl_add_defun ("spell-correct-word", bash_spell_correct_shellword, -1); + rl_bind_key_if_unbound_in_map ('s', bash_spell_correct_shellword, emacs_ctlx_keymap); + #ifdef ALIAS rl_add_defun ("alias-expand-line", alias_expand_line, -1); # ifdef BANG_HISTORY @@ -666,6 +676,8 @@ bashline_reset () rl_attempted_completion_function = attempt_shell_completion; rl_completion_entry_function = NULL; rl_ignore_some_completions_function = filename_completion_ignore; + + complete_fullquote = 1; rl_filename_quote_characters = default_filename_quote_characters; set_filename_bstab (rl_filename_quote_characters); @@ -1028,6 +1040,8 @@ posix_edit_macros (count, key) char alias_name[3], *alias_value, *macro; c = rl_read_key (); + if (c <= 0) + return 0; alias_name[0] = '_'; alias_name[1] = c; alias_name[2] = '\0'; @@ -1320,6 +1334,55 @@ bash_transpose_shellwords (count, key) return 0; } +/* Directory name spelling correction on the current word (not shellword). + COUNT > 1 is not exactly correct yet. */ +static int +bash_spell_correct_shellword (count, key) + int count, key; +{ + int opoint, wbeg, wend; + char *text, *newdir; + + opoint = rl_point; + while (count) + { + bash_backward_shellword (1, key); + wbeg = rl_point; + bash_forward_shellword (1, key); + wend = rl_point; + + if (wbeg > wend) + break; + + text = rl_copy_text (wbeg, wend); + + newdir = dirspell (text); + if (newdir) + { + rl_begin_undo_group (); + rl_delete_text (wbeg, wend); + rl_point = wbeg; + if (*newdir) + rl_insert_text (newdir); + rl_mark = wbeg; + rl_end_undo_group (); + } + + free (text); + free (newdir); + + if (rl_point >= rl_end) + break; + + count--; + + if (count) + bash_forward_shellword (1, key); /* XXX */ + } + + return 0; +} + /* **************************************************************** */ /* */ /* How To Do Shell Completion */ @@ -1516,6 +1579,7 @@ attempt_shell_completion (text, start, end) matches = (char **)NULL; rl_ignore_some_completions_function = filename_completion_ignore; + complete_fullquote = 1; /* full filename quoting by default */ rl_filename_quote_characters = default_filename_quote_characters; set_filename_bstab (rl_filename_quote_characters); set_directory_hook (); @@ -1560,7 +1624,7 @@ attempt_shell_completion (text, start, end) in_command_position++; if (check_redir (ti) == 1) - in_command_position = 0; + in_command_position = -1; /* sentinel that we're not the first word on the line */ } else { @@ -1569,7 +1633,7 @@ attempt_shell_completion (text, start, end) assignments. */ } - if (in_command_position && invalid_completion (text, ti)) + if (in_command_position > 0 && invalid_completion (text, ti)) { rl_attempted_completion_over = 1; return ((char **)NULL); @@ -1577,9 +1641,9 @@ attempt_shell_completion (text, start, end) /* Check that we haven't incorrectly flagged a closed command substitution as indicating we're in a command position. */ - if (in_command_position && ti >= 0 && rl_line_buffer[ti] == '`' && + if (in_command_position > 0 && ti >= 0 && rl_line_buffer[ti] == '`' && *text != '`' && unclosed_pair (rl_line_buffer, end, "`") == 0) - in_command_position = 0; + in_command_position = -1; /* not following a command separator */ /* Special handling for command substitution. If *TEXT is a backquote, it can be the start or end of an old-style command substitution, or @@ -1587,8 +1651,8 @@ attempt_shell_completion (text, start, end) succeed. Don't bother if readline found a single quote and we are completing on the substring. */ if (*text == '`' && rl_completion_quote_character != '\'' && - (in_command_position || (unclosed_pair (rl_line_buffer, start, "`") && - unclosed_pair (rl_line_buffer, end, "`")))) + (in_command_position > 0 || (unclosed_pair (rl_line_buffer, start, "`") && + unclosed_pair (rl_line_buffer, end, "`")))) matches = rl_completion_matches (text, command_subst_completion_function); #if defined (PROGRAMMABLE_COMPLETION) @@ -1596,7 +1660,7 @@ attempt_shell_completion (text, start, end) have_progcomps = prog_completion_enabled && (progcomp_size () > 0); iw_compspec = progcomp_search (INITIALWORD); if (matches == 0 && - (in_command_position == 0 || text[0] == '\0' || (in_command_position && iw_compspec)) && + (in_command_position == 0 || text[0] == '\0' || (in_command_position > 0 && iw_compspec)) && current_prompt_string == ps1_prompt) { int s, e, s1, e1, os, foundcs; @@ -1718,7 +1782,7 @@ attempt_shell_completion (text, start, end) if (matches == 0) { dflags = 0; - if (in_command_position) + if (in_command_position > 0) dflags |= DEFCOMP_CMDPOS; matches = bash_default_completion (text, start, end, qc, dflags); } @@ -1872,10 +1936,17 @@ executable_completion (filename, searching_path) const char *filename; int searching_path; { - char *f; + char *f, c; int r; + /* This gets an unquoted filename, so we need to quote special characters + in the filename before the completion hook gets it. */ +#if 0 f = savestring (filename); +#else + c = 0; + f = bash_quote_filename ((char *)filename, SINGLE_MATCH, &c); +#endif bash_directory_completion_hook (&f); r = searching_path ? executable_file (f) : executable_or_directory (f); @@ -1927,6 +1998,8 @@ command_word_completion_function (hint_text, state) temp = rl_variable_value ("completion-ignore-case"); igncase = RL_BOOLEAN_VARIABLE_VALUE (temp); + old_glob_ignore_case = glob_ignore_case; + if (glob_matches) { free (glob_matches); @@ -2112,6 +2185,8 @@ globword: { if (state == 0) { + rl_filename_completion_desired = 1; + glob_ignore_case = igncase; glob_matches = shell_glob_filename (hint, 0); glob_ignore_case = old_glob_ignore_case; @@ -2232,10 +2307,16 @@ globword: if (absolute_program (hint)) { +#if 0 if (igncase == 0) match = strncmp (val, hint, hint_len) == 0; else match = strncasecmp (val, hint, hint_len) == 0; +#else + /* Why duplicate the comparison rl_filename_completion_function + already performs? */ + match = 1; +#endif /* If we performed tilde expansion, restore the original filename. */ @@ -2760,13 +2841,17 @@ static int history_and_alias_expand_line (count, ignore) int count, ignore; { - char *new_line; + char *new_line, *t; new_line = 0; #if defined (BANG_HISTORY) new_line = history_expand_line_internal (rl_line_buffer); #endif + t = expand_string_dollar_quote (new_line ? new_line : rl_line_buffer, 0); + FREE (new_line); + new_line = t; + #if defined (ALIAS) if (new_line) { @@ -2798,7 +2883,7 @@ static int shell_expand_line (count, ignore) int count, ignore; { - char *new_line; + char *new_line, *t; WORD_LIST *expanded_string; WORD_DESC *w; @@ -2807,6 +2892,10 @@ shell_expand_line (count, ignore) new_line = history_expand_line_internal (rl_line_buffer); #endif + t = expand_string_dollar_quote (new_line ? new_line : rl_line_buffer, 0); + FREE (new_line); + new_line = t; + #if defined (ALIAS) if (new_line) { @@ -3191,6 +3280,8 @@ bash_directory_expansion (dirname) free (d); *dirname = nd; } + else + free (d); } /* If necessary, rewrite directory entry */ @@ -3372,38 +3463,7 @@ bash_directory_completion_hook (dirname) return_value = should_expand_dirname = nextch = closer = 0; local_dirname = *dirname; - if (t = mbschr (local_dirname, '$')) - { - should_expand_dirname = '$'; - nextch = t[1]; - /* Deliberately does not handle the deprecated $[...] arithmetic - expansion syntax */ - if (nextch == '(') - closer = ')'; - else if (nextch == '{') - closer = '}'; - else - nextch = 0; - - if (closer) - { - int p; - char delims[2]; - - delims[0] = closer; delims[1] = 0; - p = skip_to_delim (t, 1, delims, SD_NOJMP|SD_COMPLETE); - if (t[p] != closer) - should_expand_dirname = 0; - } - } - else if (local_dirname[0] == '~') - should_expand_dirname = '~'; - else - { - t = mbschr (local_dirname, '`'); - if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0) - should_expand_dirname = '`'; - } + should_expand_dirname = bash_check_expchar (local_dirname, 1, &nextch, &closer); if (should_expand_dirname && directory_exists (local_dirname, 1)) should_expand_dirname = 0; @@ -3422,24 +3482,8 @@ bash_directory_completion_hook (dirname) free (new_dirname); dispose_words (wl); local_dirname = *dirname; - /* XXX - change rl_filename_quote_characters here based on - should_expand_dirname/nextch/closer. This is the only place - custom_filename_quote_characters is modified. */ - if (rl_filename_quote_characters && *rl_filename_quote_characters) - { - int i, j, c; - i = strlen (default_filename_quote_characters); - custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1); - for (i = j = 0; c = default_filename_quote_characters[i]; i++) - { - if (c == should_expand_dirname || c == nextch || c == closer) - continue; - custom_filename_quote_characters[j++] = c; - } - custom_filename_quote_characters[j] = '\0'; - rl_filename_quote_characters = custom_filename_quote_characters; - set_filename_bstab (rl_filename_quote_characters); - } + + set_filename_quote_chars (should_expand_dirname, nextch, closer); } else { @@ -3494,7 +3538,16 @@ bash_directory_completion_hook (dirname) subsequent directory checks don't fail. */ if (temp2 == 0 && dircomplete_spelling && dircomplete_expand) { + size_t l1, l2; + temp2 = dirspell (temp1); + l2 = STRLEN (temp2); + /* Don't take matches if they are shorter than the original path */ + if (temp2 && l2 < strlen (temp1) && STREQN (temp1, temp2, l2)) + { + free (temp2); + temp2 = 0; + } if (temp2) { free (temp1); @@ -3729,7 +3782,7 @@ bash_complete_filename_internal (what_to_do) rl_completion_func_t *orig_attempt_func; rl_icppfunc_t *orig_dir_func; rl_compignore_func_t *orig_ignore_func; - /*const*/ char *orig_rl_completer_word_break_characters; + const char *orig_rl_completer_word_break_characters; int r; orig_func = rl_completion_entry_function; @@ -4099,6 +4152,95 @@ quote_word_break_chars (text) return ret; } +/* Return a character in DIRNAME that will cause shell expansion to be + performed. If NEXTP is non-null, *NEXTP gets the expansion character that + follows RET (e.g., '{' or `(' for `$'). If CLOSERP is non-null, *CLOSERP + gets the character that should close . If NEED_CLOSER is non- + zero, any expansion pair that isn't closed causes this function to + return 0, which indicates that we didn't find an expansion character. It's + used in case DIRNAME is going to be expanded. If DIRNAME is just going to + be quoted, NEED_CLOSER will be 0. */ +static int +bash_check_expchar (dirname, need_closer, nextp, closerp) + char *dirname; + int need_closer; + int *nextp, *closerp; +{ + char *t; + int ret, n, c; + + ret = n = c = 0; + if (t = mbschr (dirname, '$')) + { + ret = '$'; + n = t[1]; + /* Deliberately does not handle the deprecated $[...] arithmetic + expansion syntax */ + if (n == '(') + c = ')'; + else if (n == '{') + c = '}'; + else + n = 0; + + if (c && need_closer) /* XXX */ + { + int p; + char delims[2]; + + delims[0] = c; delims[1] = 0; + p = skip_to_delim (t, 1, delims, SD_NOJMP|SD_COMPLETE); + if (t[p] != c) + ret = 0; + } + } + else if (dirname[0] == '~') + ret = '~'; + else + { + t = mbschr (dirname, '`'); + if (t) + { + if (need_closer == 0) + ret = '`'; + else if (unclosed_pair (dirname, strlen (dirname), "`") == 0) + ret = '`'; + } + } + + if (nextp) + *nextp = n; + if (closerp) + *closerp = c; + + return ret; +} + +/* Make sure EXPCHAR and, if non-zero, NEXTCH and CLOSER are not in the set + of characters to be backslash-escaped. This is the only place + custom_filename_quote_characters is modified. */ +static void +set_filename_quote_chars (expchar, nextch, closer) + int expchar, nextch, closer; +{ + int i, j, c; + + if (rl_filename_quote_characters && *rl_filename_quote_characters) + { + i = strlen (default_filename_quote_characters); + custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1); + for (i = j = 0; c = default_filename_quote_characters[i]; i++) + { + if (c == expchar || c == nextch || c == closer) + continue; + custom_filename_quote_characters[j++] = c; + } + custom_filename_quote_characters[j] = '\0'; + rl_filename_quote_characters = custom_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); + } +} + /* Use characters in STRING to populate the table of characters that should be backslash-quoted. The table will be used for sh_backslash_quote from this file. */ @@ -4127,6 +4269,7 @@ bash_quote_filename (s, rtype, qcp) { char *rtext, *mtext, *ret; int rlen, cs; + int expchar, nextch, closer; rtext = (char *)NULL; @@ -4144,7 +4287,17 @@ bash_quote_filename (s, rtype, qcp) the word being completed contains newlines, since those are not quoted correctly using backslashes (a backslash-newline pair is special to the shell parser). */ - if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && mbschr (s, '\n')) + expchar = nextch = closer = 0; + if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && dircomplete_expand == 0 && + (expchar = bash_check_expchar (s, 0, &nextch, &closer))) + { + /* Usually this will have been set by bash_directory_completion_hook, but + there are rare cases where it will not be. */ + if (rl_filename_quote_characters != custom_filename_quote_characters) + set_filename_quote_chars (expchar, nextch, closer); + complete_fullquote = 0; + } + else if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && mbschr (s, '\n')) cs = COMPLETE_SQUOTE; else if (*qcp == '"') cs = COMPLETE_DQUOTE; @@ -4294,12 +4447,28 @@ bash_execute_unix_command (count, key) SHELL_VAR *v; char ibuf[INT_STRLEN_BOUND(int) + 1]; Keymap cmd_xmap; + const char *kseq; + size_t kslen; + + kseq = rl_executing_keyseq; + kslen = rl_key_sequence_length; + + /* If we have a numeric argument, chop it off the front of the key sequence */ + if (count > 1 || rl_explicit_arg) + { + i = rl_trim_arg_from_keyseq (rl_executing_keyseq, rl_key_sequence_length, rl_get_keymap ()); + if (i > 0) + { + kseq = rl_executing_keyseq + i; + kslen = rl_key_sequence_length - i; + } + } /* First, we need to find the right command to execute. This is tricky, because we might have already indirected into another keymap, so we have to walk cmd_xmap using the entire key sequence. */ cmd_xmap = get_cmd_xmap_from_keymap (rl_get_keymap ()); - cmd = (char *)rl_function_of_keyseq_len (rl_executing_keyseq, rl_key_sequence_length, cmd_xmap, &type); + cmd = (char *)rl_function_of_keyseq_len (kseq, kslen, cmd_xmap, &type); if (type == ISKMAP && (type = ((Keymap) cmd)[ANYOTHERKEY].type) == ISMACR) cmd = (char*)((Keymap) cmd)[ANYOTHERKEY].function; @@ -4336,6 +4505,14 @@ bash_execute_unix_command (count, key) v = bind_int_variable ("READLINE_MARK", value, 0); if (v) VSETATTR (v, att_exported); + + if (count > 1 || rl_explicit_arg) + { + value = inttostr (count, ibuf, sizeof (ibuf)); + v = bind_int_variable ("READLINE_ARGUMENT", value, 0); + if (v) + VSETATTR (v, att_exported); + } array_needs_making = 1; save_parser_state (&ps); @@ -4358,6 +4535,7 @@ bash_execute_unix_command (count, key) check_unbind_variable ("READLINE_LINE"); check_unbind_variable ("READLINE_POINT"); check_unbind_variable ("READLINE_MARK"); + check_unbind_variable ("READLINE_ARGUMENT"); array_needs_making = 1; /* and restore the readline buffer and display after command execution. */ @@ -4625,21 +4803,29 @@ bash_event_hook () sig = terminating_signal; else if (interrupt_state) sig = SIGINT; - else if (sigalrm_seen) + else if (read_timeout && read_timeout->alrmflag) sig = SIGALRM; + else if (RL_ISSTATE (RL_STATE_TIMEOUT)) /* just in case */ + { + sig = SIGALRM; + if (read_timeout) + read_timeout->alrmflag = 1; + } else sig = first_pending_trap (); /* If we're going to longjmp to top_level, make sure we clean up readline. check_signals will call QUIT, which will eventually longjmp to top_level, - calling run_interrupt_trap along the way. The check for sigalrm_seen is - to clean up the read builtin's state. */ - if (terminating_signal || interrupt_state || sigalrm_seen) + calling run_interrupt_trap along the way. The check against read_timeout + is so we can clean up the read builtin's state. */ + if (terminating_signal || interrupt_state || (read_timeout && read_timeout->alrmflag)) rl_cleanup_after_signal (); bashline_reset_event_hook (); + RL_UNSETSTATE (RL_STATE_TIMEOUT); /* XXX */ + /* posix mode SIGINT during read -e. We only get here if SIGINT is trapped. */ - if (posixly_correct && this_shell_builtin == read_builtin && sig == 2) + if (posixly_correct && this_shell_builtin == read_builtin && sig == SIGINT) { last_command_exit_value = 128|SIGINT; throw_to_top_level (); diff --git a/builtins.h b/builtins.h index dac95fdb..01565935 100644 --- a/builtins.h +++ b/builtins.h @@ -1,6 +1,6 @@ /* builtins.h -- What a builtin looks like, and where to find them. */ -/* Copyright (C) 1987-2009 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -45,6 +45,7 @@ #define ASSIGNMENT_BUILTIN 0x10 /* This builtin takes assignment statements. */ #define POSIX_BUILTIN 0x20 /* This builtins is special in the Posix command search order. */ #define LOCALVAR_BUILTIN 0x40 /* This builtin creates local variables */ +#define ARRAYREF_BUILTIN 0x80 /* This builtin takes array references as arguments */ #define BASE_INDENT 4 diff --git a/builtins/Makefile.in b/builtins/Makefile.in index b349e93c..313ea54f 100644 --- a/builtins/Makefile.in +++ b/builtins/Makefile.in @@ -1,6 +1,6 @@ # This Makefile for building libbuiltins.a is in -*- text -*- for Emacs. # -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 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 @@ -59,6 +59,7 @@ LIBBUILD = ${BUILD_DIR}/lib PROFILE_FLAGS = @PROFILE_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@ +STYLE_CFLAGS = @STYLE_CFLAGS@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG} @@ -92,7 +93,7 @@ HELPFILES_TARGET = @HELPFILES_TARGET@ INCLUDES = -I. -I.. @RL_INCLUDE@ -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib -I$(srcdir) ${INTL_INC} BASE_CCFLAGS = ${PROFILE_FLAGS} $(DEFS) $(LOCAL_DEFS) $(SYSTEM_FLAGS) \ - ${INCLUDES} $(LOCAL_CFLAGS) + ${INCLUDES} $(STYLE_CFLAGS) $(LOCAL_CFLAGS) CCFLAGS = ${ADDON_CFLAGS} $(BASE_CCFLAGS) $(CPPFLAGS) $(CFLAGS) @@ -182,7 +183,7 @@ gen-helpfiles.o: gen-helpfiles.c $(CC_FOR_BUILD) -c $(CCFLAGS_FOR_BUILD) $< gen-helpfiles: tmpbuiltins.o gen-helpfiles.o - $(CC_FOR_BUILD) ${CCFLAGS_FOR_BUILD} $(LDFLAGS_FOR_BUILD) -o $@ gen-helpfiles.o tmpbuiltins.o $(LIBS_FOR_BUILD) + $(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ gen-helpfiles.o tmpbuiltins.o $(LIBS_FOR_BUILD) builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC) @-if test -f builtins.c; then mv -f builtins.c old-builtins.c; fi @@ -203,7 +204,7 @@ builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC) helpdoc: gen-helpfiles ./gen-helpfiles ${HELPDIRDEFINE} -install-help: +install-help: $(HELPFILES_TARGET) @-if test -n "${HELPDIR}" && test -d helpfiles ; then \ test -d $(DESTDIR)${HELPDIR} || ${SHELL} ${MKDIRS} $(DESTDIR)$(HELPDIR) ;\ ( for f in helpfiles/*; do \ @@ -707,3 +708,14 @@ suspend.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h type.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h ulimit.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h umask.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h + +cd.o: $(topdir)/config-top.h +command.o: $(topdir)/config-top.h +common.o: $(topdir)/config-top.h +declare.o: $(topdir)/config-top.h +break.o: $(topdir)/config-top.h +echo.o: $(topdir)/config-top.h +evalstring.o: $(topdir)/config-top.h +exit.o: $(topdir)/config-top.h +kill.o: $(topdir)/config-top.h +shopt.o: $(topdir)/config-top.h diff --git a/builtins/bashgetopt.c b/builtins/bashgetopt.c index 405ced43..d40ffa23 100644 --- a/builtins/bashgetopt.c +++ b/builtins/bashgetopt.c @@ -1,6 +1,6 @@ /* bashgetopt.c -- `getopt' for use by the builtins. */ -/* Copyright (C) 1992-2002 Free Software Foundation, Inc. +/* Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -39,6 +39,7 @@ static int sp; char *list_optarg; +int list_optflags; int list_optopt; int list_opttype; @@ -62,6 +63,7 @@ char *opts; if (list == 0) { list_optarg = (char *)NULL; + list_optflags = 0; loptend = (WORD_LIST *)NULL; /* No non-option arguments */ return -1; } @@ -102,6 +104,7 @@ char *opts; sp = 1; } list_optarg = NULL; + list_optflags = 0; if (lcurrent) loptend = lcurrent->next; return('?'); @@ -113,6 +116,7 @@ char *opts; /* We allow -l2 as equivalent to -l 2 */ if (lcurrent->word->word[sp+1]) { list_optarg = lcurrent->word->word + sp + 1; + list_optflags = 0; lcurrent = lcurrent->next; /* If the specifier is `;', don't set optarg if the next argument looks like another option. */ @@ -123,15 +127,18 @@ char *opts; #endif lcurrent = lcurrent->next; list_optarg = lcurrent->word->word; + list_optflags = lcurrent->word->flags; lcurrent = lcurrent->next; } else if (*cp == ';') { list_optarg = (char *)NULL; + list_optflags = 0; lcurrent = lcurrent->next; } else { /* lcurrent->next == NULL */ errstr[1] = c; sh_needarg (errstr); sp = 1; list_optarg = (char *)NULL; + list_optflags = 0; return('?'); } sp = 1; @@ -140,19 +147,24 @@ char *opts; if (lcurrent->word->word[sp+1]) { if (DIGIT(lcurrent->word->word[sp+1])) { list_optarg = lcurrent->word->word + sp + 1; + list_optflags = 0; lcurrent = lcurrent->next; - } else + } else { list_optarg = (char *)NULL; + list_optflags = 0; + } } else { if (lcurrent->next && legal_number(lcurrent->next->word->word, (intmax_t *)0)) { lcurrent = lcurrent->next; list_optarg = lcurrent->word->word; + list_optflags = lcurrent->word->flags; lcurrent = lcurrent->next; } else { errstr[1] = c; sh_neednumarg (errstr); sp = 1; list_optarg = (char *)NULL; + list_optflags = 0; return ('?'); } } @@ -164,6 +176,7 @@ char *opts; lcurrent = lcurrent->next; } list_optarg = (char *)NULL; + list_optflags = 0; } return(c); diff --git a/builtins/bashgetopt.h b/builtins/bashgetopt.h index dcdaa48a..79be3431 100644 --- a/builtins/bashgetopt.h +++ b/builtins/bashgetopt.h @@ -1,6 +1,6 @@ /* bashgetopt.h -- extern declarations for stuff defined in bashgetopt.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -29,6 +29,7 @@ #define GETOPT_HELP -99 extern char *list_optarg; +extern int list_optflags; extern int list_optopt; extern int list_opttype; diff --git a/builtins/bind.def b/builtins/bind.def index ccfc08dc..53a65ac7 100644 --- a/builtins/bind.def +++ b/builtins/bind.def @@ -1,7 +1,7 @@ This file is bind.def, from which is created bind.c. It implements the builtin "bind" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -290,7 +290,7 @@ bind_builtin (list) if (nlen < olen) /* fewer bind -x bindings */ for (d = olen - nlen, i = 0; i < olen && d > 0; i++) - if (nlen == 0 || strvec_search (nbindings, obindings[i]) >= 0) + if (nlen == 0 || strvec_search (nbindings, obindings[i]) < 0) { unbind_unix_command (obindings[i]); d--; diff --git a/builtins/command.def b/builtins/command.def index acd46cc1..3efdbe6b 100644 --- a/builtins/command.def +++ b/builtins/command.def @@ -124,9 +124,7 @@ command_builtin (list) #define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN | (use_standard_path ? CMD_STDPATH : 0)) -#ifdef DEBUG - itrace("command_builtin: running execute_command for `%s'", list->word->word); -#endif + INTERNAL_DEBUG (("command_builtin: running execute_command for `%s'", list->word->word)); /* We don't want this to be reparsed (consider command echo 'foo &'), so just make a simple_command structure and call execute_command with it. */ diff --git a/builtins/common.c b/builtins/common.c index 3c9ac49d..7b80a3c7 100644 --- a/builtins/common.c +++ b/builtins/common.c @@ -1,6 +1,6 @@ /* common.c - utility functions for all builtins */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -266,6 +266,13 @@ sh_readonly (s) builtin_error (_("%s: readonly variable"), s); } +void +sh_noassign (s) + const char *s; +{ + internal_error (_("%s: cannot assign"), s); /* XXX */ +} + void sh_erange (s, desc) char *s, *desc; @@ -451,7 +458,7 @@ shift_args (times) int number_of_args () { -#ifdef DEBUG +#if 0 register WORD_LIST *list; int n; @@ -462,9 +469,9 @@ number_of_args () if (n != posparam_count) itrace("number_of_args: n (%d) != posparam_count (%d)", n, posparam_count); -#endif - +#else return posparam_count; +#endif } static int changed_dollar_vars; @@ -935,7 +942,7 @@ find_special_builtin (name) current_builtin->function : (sh_builtin_func_t *)NULL); } - + static int shell_builtin_compare (sbp1, sbp2) struct builtin *sbp1, *sbp2; @@ -971,6 +978,7 @@ builtin_help () /* */ /* **************************************************************** */ +/* Assign NAME=VALUE, passing FLAGS to the assignment functions. */ SHELL_VAR * builtin_bind_variable (name, value, flags) char *name; @@ -978,12 +986,22 @@ builtin_bind_variable (name, value, flags) int flags; { SHELL_VAR *v; + int vflags, bindflags; #if defined (ARRAY_VARS) - if (valid_array_reference (name, assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0) == 0) + /* Callers are responsible for calling this with array references that have + already undergone valid_array_reference checks (read, printf). */ + vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; + bindflags = flags | (assoc_expand_once ? ASS_NOEXPAND : 0) | ASS_ALLOWALLSUB; + if (flags & ASS_NOEXPAND) + vflags |= VA_NOEXPAND; + if (flags & ASS_ONEWORD) + vflags |= VA_ONEWORD; + + if (valid_array_reference (name, vflags) == 0) v = bind_variable (name, value, flags); else - v = assign_array_element (name, value, flags | (assoc_expand_once ? ASS_NOEXPAND : 0)); + v = assign_array_element (name, value, bindflags, (array_eltstate_t *)0); #else /* !ARRAY_VARS */ v = bind_variable (name, value, flags); #endif /* !ARRAY_VARS */ @@ -994,6 +1012,18 @@ builtin_bind_variable (name, value, flags) return v; } +SHELL_VAR * +builtin_bind_var_to_int (name, val, flags) + char *name; + intmax_t val; + int flags; +{ + SHELL_VAR *v; + + v = bind_var_to_int (name, val, flags|ASS_ALLOWALLSUB); + return v; +} + /* Like check_unbind_variable, but for use by builtins (only matters for error messages). */ int @@ -1015,3 +1045,53 @@ builtin_unbind_variable (vname) } return (unbind_variable (vname)); } + +int +builtin_arrayref_flags (w, baseflags) + WORD_DESC *w; + int baseflags; +{ + char *t; + int vflags; + + vflags = baseflags; + + /* Don't require assoc_expand_once if we have an argument that's already + passed through valid_array_reference and been expanded once. That + doesn't protect it from normal expansions like word splitting, so + proper quoting is still required. */ + if (w->flags & W_ARRAYREF) + vflags |= VA_ONEWORD|VA_NOEXPAND; + +# if 0 + /* This is a little sketchier but handles quoted arguments. */ + if (assoc_expand_once && (t = strchr (w->word, '[')) && t[strlen(t) - 1] == ']') + vflags |= VA_ONEWORD|VA_NOEXPAND; +# endif + + return vflags; +} + +/* **************************************************************** */ +/* */ +/* External interface to manipulate shell options */ +/* */ +/* **************************************************************** */ + +#if defined (ARRAY_VARS) +int +set_expand_once (nval, uwp) + int nval, uwp; +{ + int oa; + + oa = assoc_expand_once; + if (shell_compatibility_level > 51) /* XXX - internal */ + { + if (uwp) + unwind_protect_int (assoc_expand_once); + assoc_expand_once = nval; + } + return oa; +} +#endif diff --git a/builtins/common.h b/builtins/common.h index a4f9275d..38326b99 100644 --- a/builtins/common.h +++ b/builtins/common.h @@ -1,6 +1,6 @@ /* common.h -- extern declarations for functions defined in common.c. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,7 +40,7 @@ do { \ builtin_help (); \ return (EX_USAGE) -/* Flag values for parse_and_execute () */ +/* Flag values for parse_and_execute () and parse_string () */ #define SEVAL_NONINT 0x001 #define SEVAL_INTERACT 0x002 #define SEVAL_NOHIST 0x004 @@ -95,10 +95,11 @@ extern void sh_invalidoptname PARAMS((char *)); extern void sh_invalidid PARAMS((char *)); extern void sh_invalidnum PARAMS((char *)); extern void sh_invalidsig PARAMS((char *)); +extern void sh_readonly PARAMS((const char *)); +extern void sh_noassign PARAMS((const char *)); extern void sh_erange PARAMS((char *, char *)); extern void sh_badpid PARAMS((char *)); extern void sh_badjob PARAMS((char *)); -extern void sh_readonly PARAMS((const char *)); extern void sh_nojobs PARAMS((char *)); extern void sh_restricted PARAMS((char *)); extern void sh_notbuiltin PARAMS((char *)); @@ -138,6 +139,10 @@ extern sh_builtin_func_t *builtin_address PARAMS((char *)); extern sh_builtin_func_t *find_special_builtin PARAMS((char *)); extern void initialize_shell_builtins PARAMS((void)); +#if defined (ARRAY_VARS) +extern int set_expand_once PARAMS((int, int)); +#endif + /* Functions from exit.def */ extern void bash_logout PARAMS((void)); @@ -151,6 +156,9 @@ extern void builtin_help PARAMS((void)); extern void read_tty_cleanup PARAMS((void)); extern int read_tty_modified PARAMS((void)); +extern int read_builtin_timeout PARAMS((int)); +extern void check_read_timeout PARAMS((void)); + /* Functions from set.def */ extern int minus_o_option_value PARAMS((char *)); extern void list_minus_o_opts PARAMS((int, int)); @@ -205,9 +213,10 @@ extern WORD_LIST *get_directory_stack PARAMS((int)); extern int parse_and_execute PARAMS((char *, const char *, int)); extern int evalstring PARAMS((char *, const char *, int)); extern void parse_and_execute_cleanup PARAMS((int)); -extern int parse_string PARAMS((char *, const char *, int, char **)); +extern int parse_string PARAMS((char *, const char *, int, COMMAND **, char **)); extern int should_suppress_fork PARAMS((COMMAND *)); extern int can_optimize_connection PARAMS((COMMAND *)); +extern int can_optimize_cat_file PARAMS((COMMAND *)); extern void optimize_fork PARAMS((COMMAND *)); extern void optimize_subshell_command PARAMS((COMMAND *)); extern void optimize_shell_function PARAMS((COMMAND *)); @@ -223,8 +232,11 @@ extern sh_builtin_func_t *this_shell_builtin; extern sh_builtin_func_t *last_shell_builtin; extern SHELL_VAR *builtin_bind_variable PARAMS((char *, char *, int)); +extern SHELL_VAR *builtin_bind_var_to_int PARAMS((char *, intmax_t, int)); extern int builtin_unbind_variable PARAMS((const char *)); +extern int builtin_arrayref_flags PARAMS((WORD_DESC *, int)); + /* variables from evalfile.c */ extern int sourcelevel; @@ -236,12 +248,14 @@ extern int breaking; extern int continuing; extern int loop_level; -/* variables from read.def */ -extern int sigalrm_seen; - /* variables from shift.def */ extern int print_shift_error; +/* variables from shopt.def */ +#if defined (ARRAY_VARS) +extern int expand_once_flag; +#endif + /* variables from source.def */ extern int source_searches_cwd; extern int source_uses_path; @@ -249,4 +263,19 @@ extern int source_uses_path; /* variables from wait.def */ extern int wait_intr_flag; +/* common code to set flags for valid_array_reference and builtin_bind_variable */ +#if defined (ARRAY_VARS) +#define SET_VFLAGS(wordflags, vflags, bindflags) \ + do { \ + vflags = assoc_expand_once ? VA_NOEXPAND : 0; \ + bindflags = assoc_expand_once ? ASS_NOEXPAND : 0; \ + if (assoc_expand_once && (wordflags & W_ARRAYREF)) \ + vflags |= VA_ONEWORD|VA_NOEXPAND; \ + if (vflags & VA_NOEXPAND) \ + bindflags |= ASS_NOEXPAND; \ + if (vflags & VA_ONEWORD) \ + bindflags |= ASS_ONEWORD; \ + } while (0) +#endif + #endif /* !__COMMON_H */ diff --git a/builtins/complete.def b/builtins/complete.def index 28a9ec2f..6d600efb 100644 --- a/builtins/complete.def +++ b/builtins/complete.def @@ -1,7 +1,7 @@ This file is complete.def, from which is created complete.c. It implements the builtins "complete", "compgen", and "compopt" in Bash. -Copyright (C) 1999-2020 Free Software Foundation, Inc. +Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -541,6 +541,8 @@ static void print_cmd_name (cmd) const char *cmd; { + char *x; + if (STREQ (cmd, DEFAULTCMD)) printf ("-D"); else if (STREQ (cmd, EMPTYCMD)) @@ -549,6 +551,12 @@ print_cmd_name (cmd) printf ("-I"); else if (*cmd == 0) /* XXX - can this happen? */ printf ("''"); + else if (sh_contains_shell_metas (cmd)) + { + x = sh_single_quote (cmd); + printf ("%s", x); + free (x); + } else printf ("%s", cmd); } @@ -575,7 +583,7 @@ print_one_completion (cmd, cs) print_arg (cs->command, "-C", 1); /* simple arguments that don't require quoting */ - print_arg (cs->funcname, "-F", 0); + print_arg (cs->funcname, "-F", sh_contains_shell_metas (cs->funcname) != 0); print_cmd_name (cmd); printf ("\n"); diff --git a/builtins/declare.def b/builtins/declare.def index 21e4516d..54db59c5 100644 --- a/builtins/declare.def +++ b/builtins/declare.def @@ -1,7 +1,7 @@ This file is declare.def, from which is created declare.c. It implements the builtins "declare" and "local" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -22,7 +22,7 @@ $PRODUCES declare.c $BUILTIN declare $FUNCTION declare_builtin -$SHORT_DOC declare [-aAfFgiIlnrtux] [-p] [name[=value] ...] +$SHORT_DOC declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...] Set variable values and attributes. Declare variables and give them attributes. If no NAMEs are given, @@ -64,7 +64,7 @@ $END $BUILTIN typeset $FUNCTION declare_builtin -$SHORT_DOC typeset [-aAfFgiIlnrtux] [-p] name[=value] ... +$SHORT_DOC typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...] Set variable values and attributes. A synonym for `declare'. See `help declare'. @@ -91,6 +91,9 @@ $END #include "bashgetopt.h" static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int)); +static char *declare_build_newname PARAMS((char *, char *, int, char *, int)); +static char *declare_transform_name PARAMS((char *, int, int)); + static int declare_internal PARAMS((register WORD_LIST *, int)); /* Declare or change variable attributes. */ @@ -162,6 +165,68 @@ declare_find_variable (name, mkglobal, chklocal) return (find_global_variable (name)); } +/* Build a new string + NAME[SUBSCRIPT][[+]=VALUE] + from expanding a nameref into NAME */ +static char * +declare_build_newname (name, subscript_start, offset, value, aflags) + char *name, *subscript_start; + int offset; + char *value; + int aflags; +{ + size_t namelen, savelen; + char *ret; + + savelen = namelen = strlen (name); + if (subscript_start) + { + *subscript_start = '['; /* ] */ + namelen += strlen (subscript_start); + } + ret = xmalloc (namelen + 2 + strlen (value) + 1); + strcpy (ret, name); + if (subscript_start) + strcpy (ret + savelen, subscript_start); + if (offset) + { + if (aflags & ASS_APPEND) + ret[namelen++] = '+'; + ret[namelen++] = '='; + if (value && *value) + strcpy (ret + namelen, value); + else + ret[namelen] = '\0'; + } + + return (ret); +} + +static char * +declare_transform_name (name, flags_on, flags_off) + char *name; + int flags_on, flags_off; +{ + SHELL_VAR *var, *v; + char *newname; + + var = find_variable (name); + if (var == 0) + newname = nameref_transform_name (name, ASS_MKLOCAL); + else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0) + { + /* Ok, we're following namerefs here, so let's make sure that if + we followed one, it was at the same context (see below for + more details). */ + v = find_variable_last_nameref (name, 1); + newname = (v && v->context != variable_context) ? name : name_cell (var); + } + else + newname = name; /* dealing with nameref attribute */ + + return (newname); +} + /* The workhorse function. */ static int declare_internal (list, local_var) @@ -204,10 +269,9 @@ declare_internal (list, local_var) return (EX_USAGE); #endif case 'p': -/* if (local_var == 0) */ - pflag++; + pflag++; break; - case 'F': + case 'F': nodefs++; *flags |= att_function; break; @@ -271,7 +335,7 @@ declare_internal (list, local_var) /* If there are no more arguments left, then we just want to show some variables. */ - if (list == 0) /* declare -[aAfFirtx] */ + if (list == 0) /* declare -[aAfFilnrtux] */ { /* Show local variables defined at this context level if this is the `local' builtin. */ @@ -287,7 +351,7 @@ declare_internal (list, local_var) return (sh_chkwrite (EXECUTION_SUCCESS)); } - if (pflag) /* declare -p [-aAfFirtx] name [name...] */ + if (pflag) /* declare -p [-aAfFilnrtux] [name ...] */ { for (any_failed = 0; list; list = list->next) { @@ -306,13 +370,31 @@ declare_internal (list, local_var) return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS)); } + /* Some option combinations that don't make any sense */ + if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref))) + { + char *optchar; + + if (flags_on & att_nameref) + optchar = "-n"; + else if (flags_on & att_integer) + optchar = "-i"; + else if (flags_on & att_assoc) + optchar = "-A"; + else if (flags_on & att_array) + optchar = "-a"; + + sh_invalidopt (optchar); + return (EXECUTION_FAILURE); + } + #define NEXT_VARIABLE() free (name); list = list->next; continue /* There are arguments left, so we are making variables. */ - while (list) /* declare [-aAfFirx] name [name ...] */ + while (list) /* declare [-aAfFilnrtux] name[=value] [name[=value] ...] */ { - char *value, *name, *oldname; - int offset, aflags, wflags, created_var, namelen; + char *value, *name, *newname; + int offset, aflags, wflags, created_var; int assoc_noexpand; #if defined (ARRAY_VARS) int making_array_special, compound_array_assign, simple_array_assign; @@ -326,6 +408,12 @@ declare_internal (list, local_var) #else assoc_noexpand = 0; #endif + /* XXX - we allow unbalanced brackets if assoc_noexpand is set, we count + brackets and make sure they match if assoc_noexpand is not set. So we + need to make sure we're checking assoc_noexpand and expand_once_flag + for backwards compatibility. We also use assoc_noexpand below when + we call assign_array_element, so we need to make sure they're + consistent in how they count brackets. */ offset = assignment (name, assoc_noexpand ? 2 : 0); aflags = 0; created_var = 0; @@ -340,6 +428,76 @@ declare_internal (list, local_var) NEXT_VARIABLE (); } + /* If we are declaring a function, then complain about it in some way. + We don't let people make functions by saying `typeset -f foo=bar'. */ + + /* Can't define functions using assignment statements */ + if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */ + { + builtin_error (_("cannot use `-f' to make functions")); + free (name); + return (EXECUTION_FAILURE); + } + + /* There should be a way, however, to let people look at a particular + function definition by saying `typeset -f foo'. This is the only + place in this builtin where we deal with functions. */ + + if (flags_on & att_function) + { + /* Should we restrict this when the shell is in posix mode even if + the function was created before the shell entered posix mode? + Previous versions of the shell enforced the restriction. */ + if (posixly_correct && legal_identifier (name) == 0) + { + sh_invalidid (name); + assign_error++; + NEXT_VARIABLE (); + } + + var = find_function (name); + + if (var) + { + if (readonly_p (var) && (flags_off & att_readonly)) + { + builtin_error (_("%s: readonly function"), name); + any_failed++; + NEXT_VARIABLE (); + } + /* declare -[Ff] name [name...] */ + if (flags_on == att_function && flags_off == 0) + { +#if defined (DEBUGGER) + if (nodefs && debugging_mode) + { + shell_fn = find_function_def (name_cell (var)); + if (shell_fn) + printf ("%s %d %s\n", name_cell (var), shell_fn->line, shell_fn->source_file); + else + printf ("%s\n", name_cell (var)); + } + else +#endif /* DEBUGGER */ + { + t = nodefs ? name_cell (var) : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL); + printf ("%s\n", t); + any_failed = sh_chkwrite (any_failed); + } + } + else /* declare -[fF] -[rx] name [name...] */ + { + VSETATTR (var, flags_on); + flags_off &= ~att_function; /* makes no sense */ + VUNSETATTR (var, flags_off); + } + } + else + any_failed++; + + NEXT_VARIABLE (); + } + if (offset) /* declare [-aAfFirx] name=value */ { name[offset] = '\0'; @@ -361,7 +519,7 @@ declare_internal (list, local_var) if (valid_array_reference (name, 0)) { builtin_error (_("%s: reference variable cannot be an array"), name); - assign_error++; + any_failed++; NEXT_VARIABLE (); } else @@ -372,29 +530,32 @@ declare_internal (list, local_var) if (variable_context == 0) { builtin_error (_("%s: nameref variable self references not allowed"), name); - assign_error++; + assign_error++; /* XXX any_failed++ instead? */ NEXT_VARIABLE (); } else builtin_warning (_("%s: circular name reference"), name); } -#if 1 if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0) { builtin_error (_("`%s': invalid variable name for name reference"), value); assign_error++; NEXT_VARIABLE (); } -#endif } restart_new_var_name: + + /* The rest of the loop body deals with declare -[aAlinrtux] name [name...] + where each NAME can be an assignment statement. */ + + subscript_start = (char *)NULL; /* used below */ #if defined (ARRAY_VARS) + /* Determine whether we are creating or assigning an array variable */ var_exists = array_exists = creating_array = 0; compound_array_assign = simple_array_assign = 0; array_subscript_assignment = 0; - subscript_start = (char *)NULL; - if ((t = strchr (name, '[')) && (flags_on & att_function) == 0) /* ] */ + if (t = strchr (name, '[')) /* ] */ { /* If offset != 0 we have already validated any array reference because assignment() calls skipsubscript() */ @@ -413,11 +574,8 @@ restart_new_var_name: making_array_special = 0; #endif - /* If we're in posix mode or not looking for a shell function (since - shell function names don't have to be valid identifiers when the - shell's not in posix mode), check whether or not the argument is a - valid, well-formed shell identifier. */ - if ((posixly_correct || (flags_on & att_function) == 0) && legal_identifier (name) == 0) + /* Ensure the argument is a valid, well-formed shell identifier. */ + if (legal_identifier (name) == 0) { sh_invalidid (name); assign_error++; @@ -432,25 +590,12 @@ restart_new_var_name: variable that was in the temporary environment. Watch out for this. */ refvar = (SHELL_VAR *)NULL; - if (variable_context && mkglobal == 0 && ((flags_on & att_function) == 0)) + if (variable_context && mkglobal == 0) { - char *newname; - - /* check name for validity here? */ - var = find_variable (name); - if (var == 0) - newname = nameref_transform_name (name, ASS_MKLOCAL); - else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0) - { - /* Ok, we're following namerefs here, so let's make sure that if - we followed one, it was at the same context (see below for - more details). */ - refvar = find_variable_last_nameref (name, 1); - newname = (refvar && refvar->context != variable_context) ? name : var->name; - refvar = (SHELL_VAR *)NULL; - } - else - newname = name; /* dealing with nameref attribute */ + /* We don't check newname for validity here. We should not have an + invalid name assigned as the value of a nameref, but this could + cause problems. */ + newname = declare_transform_name (name, flags_on, flags_off); #if defined (ARRAY_VARS) /* Pass 1 as second argument to make_local_{assoc,array}_variable @@ -478,12 +623,12 @@ restart_new_var_name: else if (refvar && refvar->context == variable_context) var = refvar; /* Maybe we just want to create a new local variable */ - else if (var == 0 || var->context != variable_context) + else if ((var = find_variable (name)) == 0 || var->context != variable_context) var = make_local_variable (name, inherit_flag); /* otherwise we have a var at the right context */ } else - /* XXX - check name for validity here with valid_nameref_value */ + /* XXX - check name for validity here with valid_nameref_value? */ var = make_local_variable ((flags_on & att_nameref) ? name : newname, inherit_flag); /* sets att_invisible for new vars */ if (var == 0) @@ -501,483 +646,386 @@ restart_new_var_name: else var = (SHELL_VAR *)NULL; - /* If we are declaring a function, then complain about it in some way. - We don't let people make functions by saying `typeset -f foo=bar'. */ + /* VAR is non-null if we just created or fetched a local variable. */ - /* There should be a way, however, to let people look at a particular - function definition by saying `typeset -f foo'. */ - - if (flags_on & att_function) + /* Here's what ksh93 seems to do as of the 2012 version: if we are + using declare -n to modify the value of an existing nameref + variable, don't follow the nameref chain at all and just search + for a nameref at the current context. If we have a nameref, + modify its value (changing which variable it references). */ + if (var == 0 && (flags_on & att_nameref)) { - if (offset) /* declare -f [-rix] foo=bar */ - { - builtin_error (_("cannot use `-f' to make functions")); - free (name); - return (EXECUTION_FAILURE); - } - else /* declare -f [-rx] name [name...] */ - { - var = find_function (name); + /* See if we are trying to modify an existing nameref variable, + but don't follow the nameref chain. */ + var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name); + if (var && nameref_p (var) == 0) + var = 0; + } - if (var) - { - if (readonly_p (var) && (flags_off & att_readonly)) - { - builtin_error (_("%s: readonly function"), name); - any_failed++; - NEXT_VARIABLE (); - } - else if (flags_on & (att_array|att_assoc)) - { - sh_invalidopt ((flags_on & att_array) ? "-a" : "-A"); - any_failed++; - NEXT_VARIABLE (); - } - /* declare -[Ff] name [name...] */ - if (flags_on == att_function && flags_off == 0) - { -#if defined (DEBUGGER) - if (nodefs && debugging_mode) - { - shell_fn = find_function_def (var->name); - if (shell_fn) - printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file); - else - printf ("%s\n", var->name); - } - else -#endif /* DEBUGGER */ - { - t = nodefs ? var->name - : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL); - printf ("%s\n", t); - any_failed = sh_chkwrite (any_failed); - } - } - else /* declare -[fF] -[rx] name [name...] */ - { - VSETATTR (var, flags_on); - flags_off &= ~att_function; /* makes no sense */ - VUNSETATTR (var, flags_off); - } - } - else - any_failed++; + /* However, if we're turning off the nameref attribute on an existing + nameref variable, we first follow the nameref chain to the end, + modify the value of the variable this nameref variable references + if there is an assignment statement argument, + *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref + flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */ + else if (var == 0 && (flags_off & att_nameref)) + { + /* See if we are trying to modify an existing nameref variable */ + refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0); + if (refvar && nameref_p (refvar) == 0) + refvar = 0; + /* If the nameref is readonly but doesn't have a value, ksh93 + allows the nameref attribute to be removed. If it's readonly + and has a value, even if the value doesn't reference an + existing variable, we disallow the modification */ + if (refvar && nameref_cell (refvar) && readonly_p (refvar)) + { + sh_readonly (name); + any_failed++; NEXT_VARIABLE (); } + + /* If all we're doing is turning off the nameref attribute, don't + bother with VAR at all, whether it exists or not. Just turn it + off and go on. */ + if (refvar && flags_on == 0 && offset == 0 && flags_off == att_nameref) + { + VUNSETATTR (refvar, att_nameref); + NEXT_VARIABLE (); + } + + if (refvar) + var = declare_find_variable (nameref_cell (refvar), mkglobal, 0); } - else /* declare -[aAinrx] name [name...] */ - { - /* Non-null if we just created or fetched a local variable. */ -#if 0 - /* This is bash-4.3 code. */ - /* Here's what ksh93 seems to do. If we are modifying an existing - nameref variable, we don't follow the nameref chain past the last - nameref, and we set the nameref variable's value so future - references to that variable will return the value of the variable - we're assigning right now. */ -#else - /* Here's what ksh93 seems to do as of the 2012 version: if we are - using declare -n to modify the value of an existing nameref - variable, don't follow the nameref chain at all and just search - for a nameref at the current context. If we have a nameref, - modify its value (changing which variable it references). */ -#endif - if (var == 0 && (flags_on & att_nameref)) - { - /* See if we are trying to modify an existing nameref variable, - but don't follow the nameref chain. */ - var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name); - if (var && nameref_p (var) == 0) - var = 0; - } - /* However, if we're turning off the nameref attribute on an existing - nameref variable, we first follow the nameref chain to the end, - modify the value of the variable this nameref variable references - if there is an assignment statement argument, - *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref - flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */ - else if (var == 0 && (flags_off & att_nameref)) - { - /* See if we are trying to modify an existing nameref variable */ - refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0); - if (refvar && nameref_p (refvar) == 0) - refvar = 0; - /* If the nameref is readonly but doesn't have a value, ksh93 - allows the nameref attribute to be removed. If it's readonly - and has a value, even if the value doesn't reference an - existing variable, we disallow the modification */ - if (refvar && nameref_cell (refvar) && readonly_p (refvar)) - { - sh_readonly (name); - any_failed++; - NEXT_VARIABLE (); - } - - /* If all we're doing is turning off the nameref attribute, don't - bother with VAR at all, whether it exists or not. Just turn it - off and go on. */ - if (refvar && flags_on == 0 && offset == 0 && (flags_off & ~att_nameref) == 0) - { - VUNSETATTR (refvar, att_nameref); - NEXT_VARIABLE (); - } - - if (refvar) - /* XXX - use declare_find_variable here? */ - var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar)); - } #if defined (ARRAY_VARS) - /* If we have an array assignment to a nameref, remove the nameref - attribute and go on. */ - else if (var == 0 && offset && array_subscript_assignment) + /* If we have an array assignment to a nameref, remove the nameref + attribute and go on. This handles + declare -n xref[=value]; declare [-a] xref[1]=one */ + else if (var == 0 && offset && array_subscript_assignment) + { + var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name); + if (var && nameref_p (var)) { - var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name); - if (var && nameref_p (var)) - { - internal_warning (_("%s: removing nameref attribute"), name); - FREE (value_cell (var)); /* XXX - bash-4.3 compat */ - var_setvalue (var, (char *)NULL); - VUNSETATTR (var, att_nameref); - } + internal_warning (_("%s: removing nameref attribute"), name); + FREE (value_cell (var)); /* XXX - bash-4.3 compat */ + var_setvalue (var, (char *)NULL); + VUNSETATTR (var, att_nameref); } + } #endif - /* See if we are trying to set flags or value (or create) for an - existing nameref that points to a non-existent variable: e.g., + /* See if we are trying to set flags or value (or create) for an + existing nameref that points to a non-existent variable: e.g., declare -n foo=bar unset foo # unsets bar declare -i foo foo=4+4 - declare -p foo */ - if (var == 0 && (mkglobal || flags_on || flags_off || offset)) + declare -p foo + */ + if (var == 0 && (mkglobal || flags_on || flags_off || offset)) + { + refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0); + if (refvar && nameref_p (refvar) == 0) + refvar = 0; + if (refvar) + var = declare_find_variable (nameref_cell (refvar), mkglobal, 0); + if (refvar && var == 0) { - refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0); - if (refvar && nameref_p (refvar) == 0) - refvar = 0; - if (refvar) - /* XXX - use declare_find_variable here? */ - var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar)); - if (refvar && var == 0) - { - oldname = name; /* need to free this */ + /* I'm not sure subscript_start is ever non-null here. In any + event, build a new name from the nameref value, including any + subscript, and add the [[+]=value] if offset != 0 */ + newname = declare_build_newname (nameref_cell (refvar), subscript_start, offset, value, aflags); + free (name); + name = newname; - namelen = strlen (nameref_cell (refvar)); -#if defined (ARRAY_VARS) - if (subscript_start) + if (offset) + { + offset = assignment (name, 0); + /* If offset was valid previously, but substituting the + the nameref value results in an invalid assignment, + throw an invalid identifier error */ + if (offset == 0) { - *subscript_start = '['; /*]*/ - namelen += strlen (subscript_start); + sh_invalidid (name); + assign_error++; + NEXT_VARIABLE (); } -#endif - name = xmalloc (namelen + 2 + strlen (value) + 1); - strcpy (name, nameref_cell (refvar)); + name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0'; + value = name + offset + 1; + } + + /* OK, let's turn off the nameref attribute. + Now everything else applies to VAR. */ + if (flags_off & att_nameref) + VUNSETATTR (refvar, att_nameref); + + goto restart_new_var_name; + /* NOTREACHED */ + } + } + if (var == 0) + var = declare_find_variable (name, mkglobal, chklocal); + + /* At this point, VAR is the variable we are dealing with; REFVAR is the + nameref variable we dereferenced to get VAR, if any. */ #if defined (ARRAY_VARS) - if (subscript_start) - strcpy (name + strlen (nameref_cell (refvar)), subscript_start); + var_exists = var != 0; + array_exists = var && (array_p (var) || assoc_p (var)); + creating_array = flags_on & (att_array|att_assoc); #endif - /* We are committed to using the new name, so reset */ - if (offset) - { - /* Rebuild assignment and restore offset and value */ - if (aflags & ASS_APPEND) - name[namelen++] = '+'; - name[namelen++] = '='; - if (value && *value) - strcpy (name + namelen, value); - else - name[namelen] = '\0'; - offset = assignment (name, 0); - /* if offset was valid previously, but the substituting - of the nameref value results in an invalid assignment, - throw an invalid identifier error */ - if (offset == 0) - { - free (oldname); - sh_invalidid (name); - assign_error++; - NEXT_VARIABLE (); - } - name[offset] = '\0'; - value = name + namelen; - } - free (oldname); - - /* OK, let's turn off the nameref attribute. - Now everything else applies to VAR. */ - if (flags_off & att_nameref) - VUNSETATTR (refvar, att_nameref); - - goto restart_new_var_name; - /* NOTREACHED */ - } - } - if (var == 0) - var = declare_find_variable (name, mkglobal, chklocal); + /* Make a new variable if we need to. */ + if (var == 0) + { #if defined (ARRAY_VARS) - var_exists = var != 0; - array_exists = var && (array_p (var) || assoc_p (var)); - creating_array = flags_on & (att_array|att_assoc); -#endif - - if (var == 0) - { -#if defined (ARRAY_VARS) - if (flags_on & att_assoc) - { - var = make_new_assoc_variable (name); - if (var && offset == 0) - VSETATTR (var, att_invisible); - } - else if ((flags_on & att_array) || making_array_special) - { - var = make_new_array_variable (name); - if (var && offset == 0) - VSETATTR (var, att_invisible); - } - else -#endif - { - var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE); - if (var && offset == 0) - VSETATTR (var, att_invisible); - } - if (var == 0) - { - /* Has to appear in brackets */ - NEXT_VARIABLE (); - } - created_var = 1; - } - /* Can't take an existing array variable and make it a nameref */ - else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref)) - { - builtin_error (_("%s: reference variable cannot be an array"), name); - assign_error++; - NEXT_VARIABLE (); - } - else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0) - { - builtin_error (_("`%s': invalid variable name for name reference"), value); - any_failed++; - NEXT_VARIABLE (); - } - else if (flags_on & att_nameref) - { -#if 1 - /* Check of offset is to allow an assignment to a nameref var as - part of the declare word to override existing value */ - if (nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0) - { - builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var)); - any_failed++; - NEXT_VARIABLE (); - } -#endif - if (readonly_p (var)) - { - sh_readonly (name); - any_failed++; - NEXT_VARIABLE (); - } - /* ksh93 compat: turning on nameref attribute turns off -ilu */ - VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase); - } - - /* Cannot use declare +r to turn off readonly attribute. */ - if (readonly_p (var) && (flags_off & att_readonly)) - { - sh_readonly (name_cell (var)); - any_failed++; - NEXT_VARIABLE (); - } - - /* Cannot use declare to assign value to readonly or noassign - variable. */ - if ((readonly_p (var) || noassign_p (var)) && offset) - { - if (readonly_p (var)) - sh_readonly (name); - assign_error++; - NEXT_VARIABLE (); - } - -#if defined (ARRAY_VARS) - /* make declare a[2]=foo as similar to a[2]=foo as possible if - a is already an array or assoc variable. */ - if (array_subscript_assignment && array_exists && creating_array == 0) - simple_array_assign = 1; - else if ((making_array_special || creating_array || array_exists) && offset) - { - int vlen; - vlen = STRLEN (value); -/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/ - if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 && - value[0] == '(' && value[vlen-1] == ')') - { - /* The warning is only printed when using compound assignment - to an array variable that doesn't already exist. We use - creating_array to allow things like - declare -a foo$bar='(abc)' to work. */ - if (array_exists == 0 && creating_array == 0) - internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word); - compound_array_assign = array_exists || creating_array; - simple_array_assign = making_array_special; - } - else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN))) - compound_array_assign = 1; - else - simple_array_assign = 1; - } - - /* Cannot use declare +a name or declare +A name to remove an - array variable. */ - if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var))) - { - builtin_error (_("%s: cannot destroy array variables in this way"), name); - any_failed++; - NEXT_VARIABLE (); - } - - if ((flags_on & att_array) && assoc_p (var)) - { - builtin_error (_("%s: cannot convert associative to indexed array"), name); - any_failed++; - NEXT_VARIABLE (); - } - if ((flags_on & att_assoc) && array_p (var)) - { - builtin_error (_("%s: cannot convert indexed to associative array"), name); - any_failed++; - NEXT_VARIABLE (); - } - - /* declare -A name[[n]] makes name an associative array variable. */ if (flags_on & att_assoc) - { - if (assoc_p (var) == 0) - var = convert_var_to_assoc (var); - } - /* declare -a name[[n]] or declare name[n] makes name an indexed - array variable. */ - else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0) - var = convert_var_to_array (var); -#endif /* ARRAY_VARS */ - - /* XXX - we note that we are turning on nameref attribute and defer - setting it until the assignment has been made so we don't do an - inadvertent nameref lookup. Might have to do the same thing for - flags_off&att_nameref. */ - /* XXX - ksh93 makes it an error to set a readonly nameref variable - using a single typeset command. */ - onref = (flags_on & att_nameref); - flags_on &= ~att_nameref; -#if defined (ARRAY_VARS) - if (array_p (var) || assoc_p (var) - || (offset && compound_array_assign) - || simple_array_assign) - onref = 0; /* array variables may not be namerefs */ -#endif - - /* ksh93 seems to do this */ - offref = (flags_off & att_nameref); - flags_off &= ~att_nameref; - - VSETATTR (var, flags_on); - VUNSETATTR (var, flags_off); - -#if defined (ARRAY_VARS) - if (offset && compound_array_assign) - assign_array_var_from_string (var, value, aflags|ASS_FORCE); - else if (simple_array_assign && subscript_start) - { - int local_aflags; - /* declare [-aA] name[N]=value */ - *subscript_start = '['; /* ] */ - /* XXX - problem here with appending */ - local_aflags = aflags&ASS_APPEND; - local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0; - var = assign_array_element (name, value, local_aflags); /* XXX - not aflags */ - *subscript_start = '\0'; - if (var == 0) /* some kind of assignment error */ - { - assign_error++; - flags_on |= onref; - flags_off |= offref; - NEXT_VARIABLE (); - } - } - else if (simple_array_assign) - { - /* let bind_{array,assoc}_variable take care of this. */ - if (assoc_p (var)) - bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE); - else - bind_array_variable (name, 0, value, aflags|ASS_FORCE); - } + var = make_new_assoc_variable (name); + else if ((flags_on & att_array) || making_array_special) + var = make_new_array_variable (name); else #endif - /* XXX - no ASS_FORCE here */ - /* bind_variable_value duplicates the essential internals of - bind_variable() */ - if (offset) + var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE); + + if (var == 0) { - if (onref || nameref_p (var)) - aflags |= ASS_NAMEREF; - v = bind_variable_value (var, value, aflags); - if (v == 0 && (onref || nameref_p (var))) - { - if (valid_nameref_value (value, 1) == 0) - sh_invalidid (value); - assign_error++; - /* XXX - unset this variable? or leave it as normal var? */ - if (created_var) - delete_var (var->name, mkglobal ? global_variables : shell_variables); - flags_on |= onref; /* undo change from above */ - flags_off |= offref; - NEXT_VARIABLE (); - } + /* Has to appear in brackets */ + NEXT_VARIABLE (); } + if (offset == 0) + VSETATTR (var, att_invisible); + created_var = 1; + } - /* If we found this variable in the temporary environment, as with - `var=value declare -x var', make sure it is treated identically - to `var=value export var'. Do the same for `declare -r' and - `readonly'. Preserve the attributes, except for att_tempvar. */ - /* XXX -- should this create a variable in the global scope, or - modify the local variable flags? ksh93 has it modify the - global scope. - Need to handle case like in set_var_attribute where a temporary - variable is in the same table as the function local vars. */ - if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var)) + /* Nameref variable error checking. */ + + /* Can't take an existing array variable and make it a nameref */ + else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref)) + { + builtin_error (_("%s: reference variable cannot be an array"), name); + any_failed++; + NEXT_VARIABLE (); + } + /* Can't have an invalid identifier as nameref value */ + else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0) + { + builtin_error (_("`%s': invalid variable name for name reference"), value); + any_failed++; + NEXT_VARIABLE (); + } + /* Can't make an existing variable a nameref if its current value is not + a valid identifier. Check of offset is to allow an assignment to a + nameref var as part of the declare word to override existing value. */ + else if ((flags_on & att_nameref) && nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0) + { + builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var)); + any_failed++; + NEXT_VARIABLE (); + } + /* Can't make an existing readonly variable a nameref. */ + else if ((flags_on & att_nameref) && readonly_p (var)) + { + sh_readonly (name); + any_failed++; + NEXT_VARIABLE (); + } + + /* Readonly variable error checking. */ + + /* Cannot use declare +r to turn off readonly attribute. */ + if (readonly_p (var) && (flags_off & att_readonly)) + { + sh_readonly (name_cell (var)); + any_failed++; + NEXT_VARIABLE (); + } + /* Cannot use declare to assign value to readonly or noassign variable. */ + else if ((readonly_p (var) || noassign_p (var)) && offset) + { + if (readonly_p (var)) + sh_readonly (name); + assign_error++; + NEXT_VARIABLE (); + } + +#if defined (ARRAY_VARS) + /* Array variable error checking. */ + + /* Cannot use declare +a name or declare +A name to remove an array variable. */ + if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var))) + { + builtin_error (_("%s: cannot destroy array variables in this way"), name); + any_failed++; + NEXT_VARIABLE (); + } + else if ((flags_on & att_array) && assoc_p (var)) + { + builtin_error (_("%s: cannot convert associative to indexed array"), name); + any_failed++; + NEXT_VARIABLE (); + } + else if ((flags_on & att_assoc) && array_p (var)) + { + builtin_error (_("%s: cannot convert indexed to associative array"), name); + any_failed++; + NEXT_VARIABLE (); + } + + /* make declare A[2]=foo as similar to A[2]=foo as possible if A is + already an array or assoc variable. */ + if (array_subscript_assignment && array_exists && creating_array == 0) + simple_array_assign = 1; + else if ((making_array_special || creating_array || array_exists) && offset) + { + int vlen; + vlen = STRLEN (value); +/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/ + + if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 && + value[0] == '(' && value[vlen-1] == ')') { - SHELL_VAR *tv; - char *tvalue; + /* I don't believe this warning is printed any more. + We use creating_array to allow things like + declare -a foo$bar='(abc)' + to work as they have in the past. */ + if (array_exists == 0 && creating_array == 0) + internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word); + compound_array_assign = array_exists || creating_array; + simple_array_assign = making_array_special; + } + else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN))) + compound_array_assign = 1; + else + simple_array_assign = 1; + } - tv = find_tempenv_variable (var->name); - if (tv) - { - tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring (""); - tv = bind_variable (var->name, tvalue, 0); - if (tv) - { - tv->attributes |= var->attributes & ~att_tempvar; - if (tv->context > 0) - VSETATTR (tv, att_propagate); - } - free (tvalue); - } - VSETATTR (var, att_propagate); + /* declare -A name[[n]] makes name an associative array variable. */ + if (flags_on & att_assoc) + { + if (assoc_p (var) == 0) + var = convert_var_to_assoc (var); + } + /* declare -a name[[n]] or declare name[n] makes NAME an indexed + array variable. */ + else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0) + var = convert_var_to_array (var); +#endif /* ARRAY_VARS */ + + /* ksh93 compat: turning on nameref attribute turns off -ilu */ + if (flags_on & att_nameref) + VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase); + + /* XXX - we note that we are turning on nameref attribute and defer + setting it until the assignment has been made so we don't do an + inadvertent nameref lookup. Might have to do the same thing for + flags_off&att_nameref. */ + /* XXX - ksh93 makes it an error to set a readonly nameref variable + using a single typeset command. */ + onref = (flags_on & att_nameref); + flags_on &= ~att_nameref; +#if defined (ARRAY_VARS) + /* I don't believe this condition ever tests true, but array variables + may not be namerefs */ + if (array_p (var) || assoc_p (var) || compound_array_assign || simple_array_assign) + onref = 0; +#endif + + /* ksh93 seems to do this */ + offref = (flags_off & att_nameref); + flags_off &= ~att_nameref; + + VSETATTR (var, flags_on); + VUNSETATTR (var, flags_off); + +#if defined (ARRAY_VARS) + if (offset && compound_array_assign) + assign_array_var_from_string (var, value, aflags|ASS_FORCE); + else if (simple_array_assign && subscript_start) + { + int local_aflags; + + /* declare [-aA] name[N]=value */ + *subscript_start = '['; /* ] */ + /* XXX - problem here with appending */ + local_aflags = aflags&ASS_APPEND; + local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0; + local_aflags |= ASS_ALLOWALLSUB; /* allow declare a[@]=at */ + var = assign_array_element (name, value, local_aflags, (array_eltstate_t *)0); /* XXX - not aflags */ + *subscript_start = '\0'; + if (var == 0) /* some kind of assignment error */ + { + assign_error++; + flags_on |= onref; + flags_off |= offref; + NEXT_VARIABLE (); + } + } + else if (simple_array_assign) + { + /* let bind_{array,assoc}_variable take care of this. */ + if (assoc_p (var)) + bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE); + else + bind_array_variable (name, 0, value, aflags|ASS_FORCE); + } + else +#endif + /* XXX - no ASS_FORCE here */ + /* bind_variable_value duplicates the essential internals of bind_variable() */ + if (offset) + { + if (onref || nameref_p (var)) + aflags |= ASS_NAMEREF; + v = bind_variable_value (var, value, aflags); + if (v == 0 && (onref || nameref_p (var))) + { + if (valid_nameref_value (value, 1) == 0) + sh_invalidid (value); + assign_error++; + /* XXX - unset this variable? or leave it as normal var? */ + if (created_var) + delete_var (name_cell (var), mkglobal ? global_variables : shell_variables); + flags_on |= onref; /* undo change from above */ + flags_off |= offref; + NEXT_VARIABLE (); } } + /* If we found this variable in the temporary environment, as with + `var=value declare -x var', make sure it is treated identically + to `var=value export var'. Do the same for `declare -r' and + `readonly'. Preserve the attributes, except for att_tempvar. */ + /* XXX -- should this create a variable in the global scope, or + modify the local variable flags? ksh93 has it modify the + global scope. + Need to handle case like in set_var_attribute where a temporary + variable is in the same table as the function local vars. */ + if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var)) + { + SHELL_VAR *tv; + char *tvalue; + + tv = find_tempenv_variable (name_cell (var)); + if (tv) + { + tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring (""); + tv = bind_variable (name_cell (var), tvalue, 0); + if (tv) + { + tv->attributes |= var->attributes & ~att_tempvar; + if (tv->context > 0) + VSETATTR (tv, att_propagate); + } + free (tvalue); + } + VSETATTR (var, att_propagate); + } + /* Turn on nameref attribute we deferred above. */ - /* XXX - should we turn on the noassign attribute for consistency with - ksh93 when we turn on the nameref attribute? */ VSETATTR (var, onref); flags_on |= onref; VUNSETATTR (var, offref); flags_off |= offref; + /* Yuck. ksh93 compatibility. XXX - need to investigate more but definitely happens when turning off nameref attribute on nameref (see comments above). Under no circumstances allow this to turn diff --git a/builtins/enable.def b/builtins/enable.def index 9d9010b7..27d341a6 100644 --- a/builtins/enable.def +++ b/builtins/enable.def @@ -1,7 +1,7 @@ This file is enable.def, from which is created enable.c. It implements the builtin "enable" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -75,6 +75,7 @@ $END #define ENABLED 1 #define DISABLED 2 #define SPECIAL 4 +#define SILENT 8 /* affects dyn_load_builtin behavior */ #define AFLAG 0x01 #define DFLAG 0x02 @@ -110,6 +111,7 @@ enable_builtin (list) { int result, flags; int opt, filter; + WORD_LIST *next; #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) char *filename; #endif @@ -178,6 +180,7 @@ enable_builtin (list) filter |= SPECIAL; list_some_builtins (filter); + result = sh_chkwrite (EXECUTION_SUCCESS); } #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) else if (flags & FFLAG) @@ -187,6 +190,8 @@ enable_builtin (list) filter |= SPECIAL; result = dyn_load_builtin (list, filter, filename); + if (result != EXECUTION_SUCCESS) + result = EXECUTION_FAILURE; /* normalize return value */ #if defined (PROGRAMMABLE_COMPLETION) set_itemlist_dirty (&it_builtins); #endif @@ -212,13 +217,37 @@ enable_builtin (list) while (list) { opt = enable_shell_command (list->word->word, flags & NFLAG); + next = list->next; - if (opt == EXECUTION_FAILURE) +#if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM) + /* If we try to enable a non-existent builtin, and we have dynamic + loading, try the equivalent of `enable -f name name'. */ + if (opt == EX_NOTFOUND) + { + int dflags, r; + + dflags = ENABLED|SILENT|((flags & SFLAG) ? SPECIAL : 0); + + list->next = 0; + r = dyn_load_builtin (list, dflags, list->word->word); + list->next = next; + if (r == EXECUTION_SUCCESS) + opt = r; +#if defined (PROGRAMMABLE_COMPLETION) + set_itemlist_dirty (&it_builtins); +#endif + } +#endif + + if (opt == EX_NOTFOUND) { sh_notbuiltin (list->word->word); result = EXECUTION_FAILURE; } - list = list->next; + else if (opt != EXECUTION_SUCCESS) + result = EXECUTION_FAILURE; + + list = next; } } return (result); @@ -260,7 +289,7 @@ enable_shell_command (name, disable_p) b = builtin_address_internal (name, 1); if (b == 0) - return (EXECUTION_FAILURE); + return (EX_NOTFOUND); if (disable_p) b->flags &= ~BUILTIN_ENABLED; @@ -339,11 +368,16 @@ dyn_load_builtin (list, flags, filename) if (handle == 0) { - name = printable_filename (filename, 0); - builtin_error (_("cannot open shared object %s: %s"), name, dlerror ()); - if (name != filename) - free (name); - return (EXECUTION_FAILURE); + /* If we've been told to be quiet, don't complain about not finding the + specified shared object. */ + if ((flags & SILENT) == 0) + { + name = printable_filename (filename, 0); + builtin_error (_("cannot open shared object %s: %s"), name, dlerror ()); + if (name != filename) + free (name); + } + return (EX_NOTFOUND); } for (new = 0, l = list; l; l = l->next, new++) @@ -369,7 +403,7 @@ dyn_load_builtin (list, flags, filename) { name = printable_filename (filename, 0); builtin_error (_("cannot find %s in shared object %s: %s"), - struct_name, name, dlerror ()); + struct_name, name, dlerror ()); if (name != filename) free (name); free (struct_name); diff --git a/builtins/evalstring.c b/builtins/evalstring.c index 18928a17..3801a7a0 100644 --- a/builtins/evalstring.c +++ b/builtins/evalstring.c @@ -1,6 +1,6 @@ /* evalstring.c - evaluate a string as one or more shell commands. */ -/* Copyright (C) 1996-2020 Free Software Foundation, Inc. +/* Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -88,24 +88,18 @@ int should_suppress_fork (command) COMMAND *command; { -#if 0 /* TAG: bash-5.2 */ int subshell; subshell = subshell_environment & SUBSHELL_PROCSUB; /* salt to taste */ -#endif return (startup_state == 2 && parse_and_execute_level == 1 && - running_trap == 0 && *bash_input.location.string == '\0' && parser_expanding_alias () == 0 && + running_trap == 0 && command->type == cm_simple && signal_is_trapped (EXIT_TRAP) == 0 && signal_is_trapped (ERROR_TRAP) == 0 && any_signals_trapped () < 0 && -#if 0 /* TAG: bash-5.2 */ (subshell || (command->redirects == 0 && command->value.Simple->redirects == 0)) && -#else - command->redirects == 0 && command->value.Simple->redirects == 0 && -#endif ((command->flags & CMD_TIME_PIPELINE) == 0) && ((command->flags & CMD_INVERT_RETURN) == 0)); } @@ -175,6 +169,19 @@ optimize_shell_function (command) } } +int +can_optimize_cat_file (command) + COMMAND *command; +{ + return (command->type == cm_simple && !command->redirects && + (command->flags & CMD_TIME_PIPELINE) == 0 && + command->value.Simple->words == 0 && + command->value.Simple->redirects && + command->value.Simple->redirects->next == 0 && + command->value.Simple->redirects->instruction == r_input_direction && + command->value.Simple->redirects->redirector.dest == 0); +} + /* How to force parse_and_execute () to clean up after itself. */ void parse_and_execute_cleanup (old_running_trap) @@ -364,6 +371,25 @@ parse_and_execute (string, from_file, flags) should_jump_to_top_level = 1; goto out; + case EXITBLTIN: + if (command) + { + if (variable_context && signal_is_trapped (0)) + { + /* Let's make sure we run the exit trap in the function + context, as we do when not running parse_and_execute. + The pe_dispose unwind frame comes before any unwind- + protects installed by the string we're evaluating, so + it will undo the current function scope. */ + dispose_command (command); + discard_unwind_frame ("pe_dispose"); + } + else + run_unwind_frame ("pe_dispose"); + } + should_jump_to_top_level = 1; + goto out; + case DISCARD: if (command) run_unwind_frame ("pe_dispose"); @@ -473,13 +499,7 @@ parse_and_execute (string, from_file, flags) if (startup_state == 2 && (subshell_environment & SUBSHELL_COMSUB) && *bash_input.location.string == '\0' && - command->type == cm_simple && !command->redirects && - (command->flags & CMD_TIME_PIPELINE) == 0 && - command->value.Simple->words == 0 && - command->value.Simple->redirects && - command->value.Simple->redirects->next == 0 && - command->value.Simple->redirects->instruction == r_input_direction && - command->value.Simple->redirects->redirector.dest == 0) + can_optimize_cat_file (command)) { int r; r = cat_file (command->value.Simple->redirects); @@ -543,10 +563,11 @@ parse_and_execute (string, from_file, flags) command substitutions during parsing to obey Posix rules about finding the end of the command and balancing parens. */ int -parse_string (string, from_file, flags, endp) +parse_string (string, from_file, flags, cmdp, endp) char *string; const char *from_file; int flags; + COMMAND **cmdp; char **endp; { int code, nc; @@ -575,9 +596,9 @@ parse_string (string, from_file, flags, endp) code = should_jump_to_top_level = 0; oglobal = global_command; - ostring = string; with_input_from_string (string, from_file); + ostring = bash_input.location.string; while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */ { command = (COMMAND *)NULL; @@ -593,15 +614,15 @@ parse_string (string, from_file, flags, endp) if (code) { -#if defined (DEBUG) -itrace("parse_string: longjmp executed: code = %d", code); -#endif + INTERNAL_DEBUG(("parse_string: longjmp executed: code = %d", code)); + should_jump_to_top_level = 0; switch (code) { case FORCE_EOF: case ERREXIT: case EXITPROG: + case EXITBLTIN: case DISCARD: /* XXX */ if (command) dispose_command (command); @@ -621,7 +642,10 @@ itrace("parse_string: longjmp executed: code = %d", code); if (parse_command () == 0) { - dispose_command (global_command); + if (cmdp) + *cmdp = global_command; + else + dispose_command (global_command); global_command = (COMMAND *)NULL; } else @@ -637,7 +661,11 @@ itrace("parse_string: longjmp executed: code = %d", code); } if (current_token == yacc_EOF || current_token == shell_eof_token) + { + if (current_token == shell_eof_token) + rewind_input_string (); break; + } } out: @@ -663,12 +691,10 @@ out: return (nc); } -/* Handle a $( < file ) command substitution. This expands the filename, - returning errors as appropriate, then just cats the file to the standard - output. */ -static int -cat_file (r) +int +open_redir_file (r, fnp) REDIRECT *r; + char **fnp; { char *fn; int fd, rval; @@ -694,9 +720,30 @@ cat_file (r) { file_error (fn); free (fn); + if (fnp) + *fnp = 0; return -1; } + if (fnp) + *fnp = fn; + return fd; +} + +/* Handle a $( < file ) command substitution. This expands the filename, + returning errors as appropriate, then just cats the file to the standard + output. */ +static int +cat_file (r) + REDIRECT *r; +{ + char *fn; + int fd, rval; + + fd = open_redir_file (r, &fn); + if (fd < 0) + return -1; + rval = zcatfd (fd, 1, fn); free (fn); diff --git a/builtins/exec.def b/builtins/exec.def index cbcb641a..16a81dae 100644 --- a/builtins/exec.def +++ b/builtins/exec.def @@ -1,7 +1,7 @@ This file is exec.def, from which is created exec.c. It implements the builtin "exec" in Bash. -Copyright (C) 1987-2019 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -215,7 +215,7 @@ exec_builtin (list) maybe_save_shell_history (); #endif /* HISTORY */ - restore_original_signals (); + reset_signal_handlers (); /* leave trap strings in place */ #if defined (JOB_CONTROL) orig_job_control = job_control; /* XXX - was also interactive_shell */ @@ -253,7 +253,7 @@ failed_exec: FREE (command); if (subshell_environment || (interactive == 0 && no_exit_on_failed_exec == 0)) - exit_shell (exit_value); + exit_shell (last_command_exit_value = exit_value); if (args) strvec_dispose (args); @@ -261,8 +261,11 @@ failed_exec: if (env && env != export_env) strvec_dispose (env); - initialize_traps (); + /* If we're not exiting after the exec fails, we restore the shell signal + handlers and then modify the signal dispositions based on the trap strings + before the failed exec. */ initialize_signals (1); + restore_traps (); #if defined (JOB_CONTROL) if (orig_job_control) diff --git a/builtins/exit.def b/builtins/exit.def index dc6f3d5b..9c85bc58 100644 --- a/builtins/exit.def +++ b/builtins/exit.def @@ -1,7 +1,7 @@ This file is exit.def, from which is created exit.c. It implements the builtins "exit", and "logout" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -151,7 +151,7 @@ exit_or_logout (list) last_command_exit_value = exit_value; /* Exit the program. */ - jump_to_top_level (EXITPROG); + jump_to_top_level (EXITBLTIN); /*NOTREACHED*/ } diff --git a/builtins/fc.def b/builtins/fc.def index 467dbcbc..9b8a997d 100644 --- a/builtins/fc.def +++ b/builtins/fc.def @@ -1,7 +1,7 @@ This file is fc.def, from which is created fc.c. It implements the builtin "fc" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -450,6 +450,8 @@ fc_builtin (list) for (i = reverse ? histend : histbeg; reverse ? i >= histbeg : i <= histend; reverse ? i-- : i++) { QUIT; + if (hlist[i] == 0) + continue; if (numbering) fprintf (stream, "%d", i + history_base); if (listing) @@ -459,7 +461,8 @@ fc_builtin (list) else fprintf (stream, "\t%c", histdata (i) ? '*' : ' '); } - fprintf (stream, "%s\n", histline (i)); + if (histline (i)) + fprintf (stream, "%s\n", histline (i)); } if (listing) diff --git a/builtins/gen-helpfiles.c b/builtins/gen-helpfiles.c index 6bed4474..d27d306b 100644 --- a/builtins/gen-helpfiles.c +++ b/builtins/gen-helpfiles.c @@ -1,6 +1,6 @@ /* gen-helpfiles - create files containing builtin help text */ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -64,6 +64,7 @@ #undef xrealloc #undef xfree +#undef malloc #undef free /* defined in xmalloc.h */ #endif diff --git a/builtins/hash.def b/builtins/hash.def index c58e91c4..b65f42ee 100644 --- a/builtins/hash.def +++ b/builtins/hash.def @@ -1,7 +1,7 @@ This file is hash.def, from which is created hash.c. It implements the builtin "hash" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -138,7 +138,7 @@ hash_builtin (list) (list_portably == 0 || shell_compatibility_level <= 50)) printf (_("%s: hash table empty\n"), this_command_name); - return (EXECUTION_SUCCESS); + return (sh_chkwrite (EXECUTION_SUCCESS)); } if (expunge_hash_table) diff --git a/builtins/help.def b/builtins/help.def index f33b2b93..346d93fe 100644 --- a/builtins/help.def +++ b/builtins/help.def @@ -1,7 +1,7 @@ This file is help.def, from which is created help.c. It implements the builtin "help" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -186,8 +186,7 @@ help_builtin (list) return (EXECUTION_FAILURE); } - fflush (stdout); - return (EXECUTION_SUCCESS); + return (sh_chkwrite (EXECUTION_SUCCESS)); } void diff --git a/builtins/history.def b/builtins/history.def index 5db44c2c..6918d8a4 100644 --- a/builtins/history.def +++ b/builtins/history.def @@ -1,7 +1,7 @@ This file is history.def, from which is created history.c. It implements the builtin "history" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -100,6 +100,10 @@ static int expand_and_print_history PARAMS((WORD_LIST *)); #define CFLAG 0x40 #define DFLAG 0x80 +#ifndef TIMELEN_MAX +# define TIMELEN_MAX 128 +#endif + int history_builtin (list) WORD_LIST *list; @@ -189,35 +193,29 @@ history_builtin (list) return (EXECUTION_FAILURE); } if (delete_arg[0] == '-' && delete_start < 0) - { - /* the_history[history_length] == 0x0, so this is correct */ - delete_start += history_length; - if (delete_start < history_base) - { -start_error: - sh_erange (delete_arg, _("history position")); - return (EXECUTION_FAILURE); - } - } + /* the_history[history_length] == 0x0, so this is correct */ + delete_start += history_length; /* numbers as displayed by display_history are offset by history_base */ else if (delete_start > 0) delete_start -= history_base; + if (delete_start < 0 || delete_start >= history_length) - goto start_error; + { + sh_erange (delete_arg, _("history position")); + return (EXECUTION_FAILURE); + } + if (range[0] == '-' && delete_end < 0) - { - delete_end += history_length; - if (delete_end < history_base) - { -range_error: - sh_erange (range, _("history position")); - return (EXECUTION_FAILURE); - } - } + delete_end += history_length; else if (delete_end > 0) delete_end -= history_base; + if (delete_end < 0 || delete_end >= history_length) - goto range_error; + { + sh_erange (range, _("history position")); + return (EXECUTION_FAILURE); + } + /* XXX - print error if end < start? */ result = bash_delete_history_range (delete_start, delete_end); if (where_history () > history_length) history_set_pos (history_length); @@ -237,7 +235,7 @@ range_error: that history -d -1 will delete the last history entry, which at this point is the history -d -1 we just added. */ ind = history_length + delete_offset; - if (ind < history_base) + if (ind < 0) /* offset by history_base below */ { sh_erange (delete_arg, _("history position")); return (EXECUTION_FAILURE); @@ -328,7 +326,7 @@ histtime (hlist, histtimefmt) HIST_ENTRY *hlist; const char *histtimefmt; { - static char timestr[128]; + static char timestr[TIMELEN_MAX]; time_t t; struct tm *tm; diff --git a/builtins/mapfile.def b/builtins/mapfile.def index 65c3cb4f..c17fc5c5 100644 --- a/builtins/mapfile.def +++ b/builtins/mapfile.def @@ -2,7 +2,7 @@ This file is mapfile.def, from which is created mapfile.c. It implements the builtin "mapfile" in Bash. Copyright (C) 2005-2006 Rocky Bernstein for Free Software Foundation, Inc. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -68,6 +68,7 @@ $END #include #include "builtins.h" +#include "../bashtypes.h" #include "posixstat.h" #if defined (HAVE_UNISTD_H) @@ -140,7 +141,7 @@ do_chop(line, delim) int length; length = strlen (line); - if (length && line[length-1] == delim) + if (length && (unsigned char)line[length-1] == delim) line[length-1] = '\0'; } @@ -156,6 +157,7 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n size_t line_length; unsigned int array_index, line_count; SHELL_VAR *entry; + struct stat sb; int unbuffered_read; line = NULL; @@ -180,19 +182,22 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n } else if (invisible_p (entry)) VUNSETATTR (entry, att_invisible); /* no longer invisible */ - + if (flags & MAPF_CLEARARRAY) array_flush (array_cell (entry)); #ifndef __CYGWIN__ - unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE); + /* If the delimiter is a newline, turn on unbuffered reads for pipes + (terminals are ok). If the delimiter is not a newline, unbuffered reads + for every file descriptor that's not a regular file. */ + if (delim == '\n') + unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE); + else + unbuffered_read = (fstat (fd, &sb) != 0) || (S_ISREG (sb.st_mode) == 0); #else unbuffered_read = 1; #endif - if (delim != '\n') - unbuffered_read = 1; - zreset (); /* Skip any lines at beginning of file? */ @@ -215,11 +220,11 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n /* Has a callback been registered and if so is it time to call it? */ if (callback && line_count && (line_count % callback_quantum) == 0) { - run_callback (callback, array_index, line); - /* Reset the buffer for bash own stream. */ if (unbuffered_read == 0) zsyncfd (fd); + + run_callback (callback, array_index, line); } /* XXX - bad things can happen if the callback modifies ENTRY, e.g., diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c index e243021f..f21b76b9 100644 --- a/builtins/mkbuiltins.c +++ b/builtins/mkbuiltins.c @@ -1,7 +1,7 @@ /* mkbuiltins.c - Create builtins.c, builtext.h, and builtdoc.c from a single source file called builtins.def. */ -/* Copyright (C) 1987-2020 Free Software Foundation, Inc. +/* Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -72,7 +72,8 @@ extern char *strcpy (); #define BUILTIN_FLAG_SPECIAL 0x01 #define BUILTIN_FLAG_ASSIGNMENT 0x02 #define BUILTIN_FLAG_LOCALVAR 0x04 -#define BUILTIN_FLAG_POSIX_BUILTIN 0x08 +#define BUILTIN_FLAG_POSIX_BUILTIN 0x08 +#define BUILTIN_FLAG_ARRAYREF_ARG 0x10 #define BASE_INDENT 4 @@ -173,11 +174,22 @@ char *posix_builtins[] = (char *)NULL }; +/* The builtin commands that can take array references as arguments and pay + attention to `assoc_expand_once'. These are the ones that don't assign + values, but need to avoid double expansions. */ +char *arrayvar_builtins[] = +{ + "declare", "let", "local", "printf", "read", "test", "[", + "typeset", "unset", "wait", /*]*/ + (char *)NULL +}; + /* Forward declarations. */ static int is_special_builtin (); static int is_assignment_builtin (); static int is_localvar_builtin (); static int is_posix_builtin (); +static int is_arrayvar_builtin (); #if !defined (HAVE_RENAME) static int rename (); @@ -831,6 +843,8 @@ builtin_handler (self, defs, arg) new->flags |= BUILTIN_FLAG_LOCALVAR; if (is_posix_builtin (name)) new->flags |= BUILTIN_FLAG_POSIX_BUILTIN; + if (is_arrayvar_builtin (name)) + new->flags |= BUILTIN_FLAG_ARRAYREF_ARG; array_add ((char *)new, defs->builtins); building_builtin = 1; @@ -1111,7 +1125,7 @@ char *structfile_header[] = { "/* This file is manufactured by ./mkbuiltins, and should not be", " edited by hand. See the source to mkbuiltins for details. */", "", - "/* Copyright (C) 1987-2015 Free Software Foundation, Inc.", + "/* Copyright (C) 1987-2021 Free Software Foundation, Inc.", "", " This file is part of GNU Bash, the Bourne Again SHell.", "", @@ -1250,12 +1264,13 @@ write_builtins (defs, structfile, externfile) else fprintf (structfile, "(sh_builtin_func_t *)0x0, "); - fprintf (structfile, "%s%s%s%s%s, %s_doc,\n", + fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n", "BUILTIN_ENABLED | STATIC_BUILTIN", (builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_ARRAYREF_ARG) ? " | ARRAYREF_BUILTIN" : "", document_name (builtin)); /* Don't translate short document summaries that are identical @@ -1645,6 +1660,13 @@ is_posix_builtin (name) return (_find_in_table (name, posix_builtins)); } +static int +is_arrayvar_builtin (name) + char *name; +{ + return (_find_in_table (name, arrayvar_builtins)); +} + #if !defined (HAVE_RENAME) static int rename (from, to) diff --git a/builtins/printf.def b/builtins/printf.def index 0a5f4897..25145448 100644 --- a/builtins/printf.def +++ b/builtins/printf.def @@ -1,7 +1,7 @@ This file is printf.def, from which is created printf.c. It implements the builtin "printf" in Bash. -Copyright (C) 1997-2020 Free Software Foundation, Inc. +Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -40,6 +40,8 @@ printf interprets: %b expand backslash escape sequences in the corresponding argument %q quote the argument in a way that can be reused as shell input + %Q like %q, but apply any precision to the unquoted argument before + quoting %(fmt)T output the date-time string resulting from using FMT as a format string for strftime(3) @@ -149,7 +151,7 @@ extern int errno; if (vflag) \ { \ SHELL_VAR *v; \ - v = builtin_bind_variable (vname, vbuf, 0); \ + v = builtin_bind_variable (vname, vbuf, bindflags); \ stupidly_hack_special_variables (vname); \ if (v == 0 || readonly_p (v) || noassign_p (v)) \ return (EXECUTION_FAILURE); \ @@ -184,6 +186,10 @@ extern int errno; #define SKIP1 "#'-+ 0" #define LENMODS "hjlLtz" +#ifndef TIMELEN_MAX +# define TIMELEN_MAX 128 +#endif + extern time_t shell_start_time; #if !HAVE_ASPRINTF @@ -226,6 +232,7 @@ static int conversion_error; /* printf -v var support */ static int vflag = 0; +static int bindflags = 0; static char *vbuf, *vname; static size_t vbsize; static int vblen; @@ -241,7 +248,7 @@ printf_builtin (list) { int ch, fieldwidth, precision; int have_fieldwidth, have_precision; - char convch, thisch, nextch, *format, *modstart, *fmt, *start; + char convch, thisch, nextch, *format, *modstart, *precstart, *fmt, *start; #if defined (HANDLE_MULTIBYTE) char mbch[25]; /* 25 > MB_LEN_MAX, plus can handle 4-byte UTF-8 and large Unicode characters*/ int mbind, mblen; @@ -251,8 +258,6 @@ printf_builtin (list) #endif conversion_error = 0; - retval = EXECUTION_SUCCESS; - vflag = 0; reset_internal_getopt (); @@ -262,12 +267,14 @@ printf_builtin (list) { case 'v': vname = list_optarg; + bindflags = 0; #if defined (ARRAY_VARS) - arrayflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; - if (legal_identifier (vname) || valid_array_reference (vname, arrayflags)) + SET_VFLAGS (list_optflags, arrayflags, bindflags); + retval = legal_identifier (vname) || valid_array_reference (vname, arrayflags); #else - if (legal_identifier (vname)) + retval = legal_identifier (vname); #endif + if (retval) { vflag = 1; if (vbsize == 0) @@ -310,6 +317,7 @@ printf_builtin (list) format = list->word->word; tw = 0; + retval = EXECUTION_SUCCESS; garglist = orig_arglist = list->next; @@ -331,6 +339,7 @@ printf_builtin (list) { precision = fieldwidth = 0; have_fieldwidth = have_precision = 0; + precstart = 0; if (*fmt == '\\') { @@ -404,6 +413,8 @@ printf_builtin (list) if (*fmt == '-') #endif fmt++; + if (DIGIT (*fmt)) + precstart = fmt; while (DIGIT (*fmt)) fmt++; } @@ -449,7 +460,7 @@ printf_builtin (list) case '(': { - char *timefmt, timebuf[128], *t; + char *timefmt, timebuf[TIMELEN_MAX], *t; int n; intmax_t arg; time_t secs; @@ -531,7 +542,7 @@ printf_builtin (list) if (var && *var) { if (legal_identifier (var)) - bind_var_to_int (var, tw); + bind_var_to_int (var, tw, 0); else { sh_invalidid (var); @@ -573,12 +584,27 @@ printf_builtin (list) } case 'q': /* print with shell quoting */ + case 'Q': { char *p, *xp; - int r; + int r, mpr; + size_t slen; r = 0; p = getstr (); + /* Decode precision and apply it to the unquoted string. */ + if (convch == 'Q' && precstart) + { + mpr = *precstart++ - '0'; + while (DIGIT (*precstart)) + mpr = (mpr * 10) + (*precstart++ - '0'); + /* Error if precision > INT_MAX here? */ + precision = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr; + slen = strlen (p); + /* printf precision works in bytes. */ + if (precision < slen) + p[precision] = '\0'; + } if (p && *p == 0) /* XXX - getstr never returns null */ xp = savestring ("''"); else if (ansic_shouldquote (p)) @@ -587,6 +613,12 @@ printf_builtin (list) xp = sh_backslash_quote (p, 0, 3); if (xp) { + if (convch == 'Q') + { + slen = strlen (xp); + if (slen > precision) + precision = slen; + } /* Use printstr to get fieldwidth and precision right. */ r = printstr (start, xp, strlen (xp), fieldwidth, precision); if (r < 0) @@ -760,7 +792,7 @@ printstr (fmt, string, len, fieldwidth, precision) fw = (mfw < 0 || mfw > INT_MAX) ? INT_MAX : mfw; } - /* get precision, if present */ + /* get precision, if present. doesn't handle negative precisions */ if (*fmt == '.') { fmt++; @@ -776,6 +808,8 @@ printstr (fmt, string, len, fieldwidth, precision) mpr = (mpr * 10) + (*fmt++ - '0'); /* Error if precision > INT_MAX here? */ pr = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr; + if (pr < precision && precision < INT_MAX) + pr = precision; /* XXX */ } else pr = 0; /* "a null digit string is treated as zero" */ diff --git a/builtins/read.def b/builtins/read.def index 39e16e84..64565268 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -1,7 +1,7 @@ This file is read.def, from which is created read.c. It implements the builtin "read" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -30,7 +30,8 @@ if the -u option is supplied. The line is split into fields as with word splitting, and the first word is assigned to the first NAME, the second word to the second NAME, and so on, with any leftover words assigned to the last NAME. Only the characters found in $IFS are recognized as word -delimiters. +delimiters. By default, the backslash character escapes delimiter characters +and newline. If no NAMEs are supplied, the line read is stored in the REPLY variable. @@ -107,6 +108,7 @@ $END #endif #include "shmbutil.h" +#include "timer.h" #if !defined(errno) extern int errno; @@ -124,19 +126,19 @@ static int set_itext PARAMS((void)); static char *edit_line PARAMS((char *, char *)); static void set_eol_delim PARAMS((int)); static void reset_eol_delim PARAMS((char *)); +static void set_readline_timeout PARAMS((sh_timer *t, time_t, long)); #endif -static SHELL_VAR *bind_read_variable PARAMS((char *, char *)); +static SHELL_VAR *bind_read_variable PARAMS((char *, char *, int)); #if defined (HANDLE_MULTIBYTE) static int read_mbchar PARAMS((int, char *, int, int, int)); #endif static void ttyrestore PARAMS((struct ttsave *)); static sighandler sigalrm PARAMS((int)); -static void reset_alarm PARAMS((void)); +static void reset_timeout PARAMS((void)); /* Try this to see what the rest of the shell can do with the information. */ -procenv_t alrmbuf; -int sigalrm_seen; +sh_timer *read_timeout; static int reading, tty_modified; static SigHandler *old_alrm; @@ -148,21 +150,44 @@ static struct ttsave termsave; avoids problems with the semi-tricky stuff we do with the xfree of input_string at the top of the unwind-protect list (see below). */ -/* Set a flag that CHECK_ALRM can check. This relies on zread or read_builtin - calling trap.c:check_signals(), which knows about sigalrm_seen and alrmbuf. */ +/* Set a flag that check_read_timeout can check. This relies on zread or + read_builtin calling trap.c:check_signals() (which calls check_read_timeout()) */ static sighandler sigalrm (s) int s; { - sigalrm_seen = 1; + /* Display warning if this is called without read_timeout set? */ + if (read_timeout) + read_timeout->alrmflag = 1; } static void -reset_alarm () +reset_timeout () { /* Cancel alarm before restoring signal handler. */ - falarm (0, 0); - set_signal_handler (SIGALRM, old_alrm); + if (read_timeout) + shtimer_clear (read_timeout); + read_timeout = 0; +} + +void +check_read_timeout () +{ + if (read_timeout && shtimer_chktimeout (read_timeout)) + sh_longjmp (read_timeout->jmpenv, 1); +} + +int +read_builtin_timeout (fd) + int fd; +{ + if ((read_timeout == 0) || + (read_timeout->fd != fd) || + (read_timeout->tmout.tv_sec == 0 && read_timeout->tmout.tv_usec == 0)) + return 0; + + return ((read_timeout->flags & SHTIMER_ALARM) ? shtimer_alrm (read_timeout) + : shtimer_select (read_timeout)); } /* Read the value of the shell variables whose names follow. @@ -191,10 +216,12 @@ read_builtin (list) struct stat tsb; SHELL_VAR *var; TTYSTRUCT ttattrs, ttset; + sigset_t chldset, prevset; #if defined (ARRAY_VARS) WORD_LIST *alist; int vflags; #endif + int bindflags; #if defined (READLINE) char *rlbuf, *itext; int rlind; @@ -225,7 +252,8 @@ read_builtin (list) USE_VAR(ps2); USE_VAR(lastsig); - sigalrm_seen = reading = tty_modified = 0; + reading = tty_modified = 0; + read_timeout = 0; i = 0; /* Index into the string that we are reading. */ raw = edit = 0; /* Not reading raw input by default. */ @@ -330,18 +358,16 @@ read_builtin (list) /* `read -t 0 var' tests whether input is available with select/FIONREAD, and fails if those are unavailable */ if (have_timeout && tmsec == 0 && tmusec == 0) -#if 0 - return (EXECUTION_FAILURE); -#else return (input_avail (fd) ? EXECUTION_SUCCESS : EXECUTION_FAILURE); -#endif /* Convenience: check early whether or not the first of possibly several variable names is a valid identifier, and bail early if so. */ #if defined (ARRAY_VARS) - vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; + if (list) + SET_VFLAGS (list->word->flags, vflags, bindflags); if (list && legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) #else + bindflags = 0; if (list && legal_identifier (list->word->word) == 0) #endif { @@ -387,6 +413,12 @@ read_builtin (list) } } +#if defined (SIGCHLD) + sigemptyset (&chldset); + sigprocmask (SIG_BLOCK, (sigset_t *)0, &chldset); + sigaddset (&chldset, SIGCHLD); +#endif + begin_unwind_frame ("read_builtin"); #if defined (BUFFERED_INPUT) @@ -435,10 +467,27 @@ read_builtin (list) if (tmsec > 0 || tmusec > 0) { - code = setjmp_nosigs (alrmbuf); + read_timeout = shtimer_alloc (); + read_timeout->flags = SHTIMER_LONGJMP; + +#if defined (HAVE_SELECT) + read_timeout->flags |= edit ? SHTIMER_ALARM : SHTIMER_SELECT; +#else + read_timeout->flags |= SHTIMER_ALARM; +#endif + read_timeout->fd = fd; + + read_timeout->alrm_handler = sigalrm; + } + + if (tmsec > 0 || tmusec > 0) + { + code = setjmp_nosigs (read_timeout->jmpenv); if (code) { - sigalrm_seen = 0; + reset_timeout (); + sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0); + /* Tricky. The top of the unwind-protect stack is the free of input_string. We want to run all the rest and use input_string, so we have to save input_string temporarily, run the unwind- @@ -460,16 +509,17 @@ read_builtin (list) } if (interactive_shell == 0) initialize_terminating_signals (); - old_alrm = set_signal_handler (SIGALRM, sigalrm); - add_unwind_protect (reset_alarm, (char *)NULL); + add_unwind_protect (reset_timeout, (char *)NULL); #if defined (READLINE) if (edit) { add_unwind_protect (reset_attempted_completion_function, (char *)NULL); add_unwind_protect (bashline_reset_event_hook, (char *)NULL); + set_readline_timeout (read_timeout, tmsec, tmusec); } + else #endif - falarm (tmsec, tmusec); + shtimer_set (read_timeout, tmsec, tmusec); } /* If we've been asked to read only NCHARS chars, or we're using some @@ -545,12 +595,16 @@ read_builtin (list) of the unwind-protect stack after the realloc() works right. */ add_unwind_protect (xfree, input_string); - CHECK_ALRM; + check_read_timeout (); + /* These only matter if edit == 0 */ if ((nchars > 0) && (input_is_tty == 0) && ignore_delim) /* read -N */ unbuffered_read = 2; +#if 0 else if ((nchars > 0) || (delim != '\n') || input_is_pipe) +#else + else if (((nchars > 0 || delim != '\n') && input_is_tty) || input_is_pipe) unbuffered_read = 1; - +#endif if (prompt && edit == 0) { fprintf (stderr, "%s", prompt); @@ -564,7 +618,7 @@ read_builtin (list) ps2 = 0; for (print_ps2 = eof = retval = 0;;) { - CHECK_ALRM; + check_read_timeout (); #if defined (READLINE) if (edit) @@ -575,6 +629,10 @@ read_builtin (list) free (rlbuf); rlbuf = (char *)0; } +#if defined (SIGCHLD) + if (tmsec > 0 || tmusec > 0) + sigprocmask (SIG_SETMASK, &chldset, &prevset); +#endif if (rlbuf == 0) { reading = 1; @@ -582,6 +640,10 @@ read_builtin (list) reading = 0; rlind = 0; } +#if defined (SIGCHLD) + if (tmsec > 0 || tmusec > 0) + sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0); +#endif if (rlbuf == 0) { eof = 1; @@ -603,14 +665,24 @@ read_builtin (list) } reading = 1; - CHECK_ALRM; + check_read_timeout (); errno = 0; + +#if defined (SIGCHLD) + if (tmsec > 0 || tmusec > 0) + sigprocmask (SIG_SETMASK, &chldset, &prevset); +#endif if (unbuffered_read == 2) retval = posixly_correct ? zreadintr (fd, &c, 1) : zreadn (fd, &c, nchars - nr); else if (unbuffered_read) retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1); else retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c); +#if defined (SIGCHLD) + if (tmsec > 0 || tmusec > 0) + sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0); +#endif + reading = 0; if (retval <= 0) @@ -644,7 +716,7 @@ read_builtin (list) #endif if (retval <= 0) /* XXX shouldn't happen */ - CHECK_ALRM; + check_read_timeout (); /* XXX -- use i + mb_cur_max (at least 4) for multibyte/read_mbchar */ if (i + (mb_cur_max > 4 ? mb_cur_max : 4) >= size) @@ -704,7 +776,7 @@ read_builtin (list) add_char: input_string[i++] = c; - CHECK_ALRM; + check_read_timeout (); #if defined (HANDLE_MULTIBYTE) /* XXX - what if C == 127? Can DEL introduce a multibyte sequence? */ @@ -741,7 +813,7 @@ add_char: break; } input_string[i] = '\0'; - CHECK_ALRM; + check_read_timeout (); #if defined (READLINE) if (edit) @@ -758,7 +830,7 @@ add_char: } if (tmsec > 0 || tmusec > 0) - reset_alarm (); + reset_timeout (); if (nchars > 0 || delim != '\n') { @@ -883,6 +955,7 @@ assign_vars: { varname = list->word->word; #if defined (ARRAY_VARS) + SET_VFLAGS (list->word->flags, vflags, bindflags); if (legal_identifier (varname) == 0 && valid_array_reference (varname, vflags) == 0) #else if (legal_identifier (varname) == 0) @@ -906,16 +979,16 @@ assign_vars: if (t && saw_escape) { t1 = dequote_string (t); - var = bind_read_variable (varname, t1); + var = bind_read_variable (varname, t1, bindflags); free (t1); } else - var = bind_read_variable (varname, t ? t : ""); + var = bind_read_variable (varname, t ? t : "", bindflags); } else { t = (char *)0; - var = bind_read_variable (varname, ""); + var = bind_read_variable (varname, "", bindflags); } FREE (t); @@ -931,6 +1004,7 @@ assign_vars: /* Now assign the rest of the line to the last variable argument. */ #if defined (ARRAY_VARS) + SET_VFLAGS (list->word->flags, vflags, bindflags); if (legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0) #else if (legal_identifier (list->word->word) == 0) @@ -967,11 +1041,11 @@ assign_vars: if (saw_escape && input_string && *input_string) { t = dequote_string (input_string); - var = bind_read_variable (list->word->word, t); + var = bind_read_variable (list->word->word, t, bindflags); free (t); } else - var = bind_read_variable (list->word->word, input_string ? input_string : ""); + var = bind_read_variable (list->word->word, input_string ? input_string : "", bindflags); if (var) { @@ -988,12 +1062,13 @@ assign_vars: } static SHELL_VAR * -bind_read_variable (name, value) +bind_read_variable (name, value, flags) char *name, *value; + int flags; { SHELL_VAR *v; - v = builtin_bind_variable (name, value, 0); + v = builtin_bind_variable (name, value, flags); return (v == 0 ? v : ((readonly_p (v) || noassign_p (v)) ? (SHELL_VAR *)NULL : v)); } @@ -1131,7 +1206,15 @@ edit_line (p, itext) bashline_reset_event_hook (); if (ret == 0) - return ret; + { + if (RL_ISSTATE (RL_STATE_TIMEOUT)) + { + sigalrm (SIGALRM); /* simulate receiving SIGALRM */ + check_read_timeout (); + } + return ret; + } + len = strlen (ret); ret = (char *)xrealloc (ret, len + 2); ret[len++] = delim; @@ -1139,6 +1222,17 @@ edit_line (p, itext) return ret; } +static void +set_readline_timeout (t, sec, usec) + sh_timer *t; + time_t sec; + long usec; +{ + t->tmout.tv_sec = sec; + t->tmout.tv_usec = usec; + rl_set_timeout (sec, usec); +} + static int old_delim_ctype; static rl_command_func_t *old_delim_func; static int old_newline_ctype; diff --git a/builtins/reserved.def b/builtins/reserved.def index 33184b02..420042dc 100644 --- a/builtins/reserved.def +++ b/builtins/reserved.def @@ -114,22 +114,22 @@ Returns the status of the last command executed. $END $BUILTIN while -$SHORT_DOC while COMMANDS; do COMMANDS; done +$SHORT_DOC while COMMANDS; do COMMANDS-2; done Execute commands as long as a test succeeds. -Expand and execute COMMANDS as long as the final command in the -`while' COMMANDS has an exit status of zero. +Expand and execute COMMANDS-2 as long as the final command in COMMANDS has +an exit status of zero. Exit Status: Returns the status of the last command executed. $END $BUILTIN until -$SHORT_DOC until COMMANDS; do COMMANDS; done +$SHORT_DOC until COMMANDS; do COMMANDS-2; done Execute commands as long as a test does not succeed. -Expand and execute COMMANDS as long as the final command in the -`until' COMMANDS has an exit status which is not zero. +Expand and execute COMMANDS-2 as long as the final command in COMMANDS has +an exit status which is not zero. Exit Status: Returns the status of the last command executed. diff --git a/builtins/set.def b/builtins/set.def index 8ee01657..44f17691 100644 --- a/builtins/set.def +++ b/builtins/set.def @@ -1,7 +1,7 @@ This file is set.def, from which is created set.c. It implements the "set" and "unset" builtins in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -52,7 +52,7 @@ $PRODUCES set.c $BUILTIN set $FUNCTION set_builtin -$SHORT_DOC set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...] +$SHORT_DOC set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] Set or unset values of shell options and positional parameters. Change the value of shell attributes and positional parameters, or @@ -835,7 +835,7 @@ unset_builtin (list) WORD_LIST *list; { int unset_function, unset_variable, unset_array, opt, nameref, any_failed; - int global_unset_func, global_unset_var, vflags, valid_id; + int global_unset_func, global_unset_var, vflags, base_vflags, valid_id; char *name, *tname; unset_function = unset_variable = unset_array = nameref = any_failed = 0; @@ -873,7 +873,7 @@ unset_builtin (list) nameref = 0; #if defined (ARRAY_VARS) - vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; + base_vflags = assoc_expand_once ? VA_NOEXPAND : 0; #endif while (list) @@ -889,15 +889,15 @@ unset_builtin (list) unset_function = global_unset_func; unset_variable = global_unset_var; +#if defined (ARRAY_VARS) + vflags = builtin_arrayref_flags (list->word, base_vflags); +#endif + #if defined (ARRAY_VARS) unset_array = 0; /* XXX valid array reference second arg was 0 */ - if (!unset_function && nameref == 0 && valid_array_reference (name, vflags)) - { - t = strchr (name, '['); - *t++ = '\0'; - unset_array++; - } + if (!unset_function && nameref == 0 && tokenize_array_reference (name, vflags, &t)) + unset_array = 1; #endif /* Get error checking out of the way first. The low-level functions just perform the unset, relying on the caller to verify. */ @@ -959,6 +959,9 @@ unset_builtin (list) #if defined (ARRAY_VARS) if (var && unset_array) { + if (shell_compatibility_level <= 51) + vflags |= VA_ALLOWALL; + /* Let unbind_array_element decide what to do with non-array vars */ tem = unbind_array_element (var, t, vflags); /* XXX new third arg */ if (tem == -2 && array_p (var) == 0 && assoc_p (var) == 0) @@ -981,9 +984,16 @@ unset_builtin (list) #if defined (ARRAY_VARS) if (valid_array_reference (nameref_cell (var), 0)) { + int len; + tname = savestring (nameref_cell (var)); - if (var = array_variable_part (tname, 0, &t, (int *)0)) - tem = unbind_array_element (var, t, vflags); /* XXX new third arg */ + if (var = array_variable_part (tname, 0, &t, &len)) + { + /* change to what unbind_array_element now expects */ + if (t[len - 1] == ']') + t[len - 1] = 0; + tem = unbind_array_element (var, t, vflags); /* XXX new third arg */ + } free (tname); } else diff --git a/builtins/setattr.def b/builtins/setattr.def index a193462d..c2ea7d56 100644 --- a/builtins/setattr.def +++ b/builtins/setattr.def @@ -1,7 +1,7 @@ This file is setattr.def, from which is created setattr.c. It implements the builtins "export" and "readonly", in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -514,7 +514,10 @@ show_var_attributes (var, pattr, nodefs) printf ("%s\n", var->name); else { - x = sh_double_quote (value_cell (var)); + if (ansic_shouldquote (value_cell (var))) + x = ansic_quote (value_cell (var), 0, (int *)0); + else + x = sh_double_quote (value_cell (var)); printf ("%s=%s\n", var->name, x); free (x); } diff --git a/builtins/shopt.def b/builtins/shopt.def index 6dca2242..52204c7b 100644 --- a/builtins/shopt.def +++ b/builtins/shopt.def @@ -1,7 +1,7 @@ This file is shopt.def, from which is created shopt.c. It implements the Bash `shopt' builtin. -Copyright (C) 1994-2020 Free Software Foundation, Inc. +Copyright (C) 1994-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -89,10 +89,14 @@ extern int check_jobs_at_exit; extern int autocd; extern int glob_star; extern int glob_asciirange; +extern int glob_always_skip_dot_and_dotdot; extern int lastpipe_opt; extern int inherit_errexit; extern int localvar_inherit; extern int localvar_unset; +extern int varassign_redir_autoclose; +extern int singlequote_translations; +extern int patsub_replacement; #if defined (EXTENDED_GLOB) extern int extended_glob; @@ -120,6 +124,7 @@ extern int debugging_mode; #if defined (ARRAY_VARS) extern int assoc_expand_once; extern int array_expand_once; +int expand_once_flag; #endif #if defined (SYSLOG_HISTORY) @@ -140,6 +145,10 @@ static int shopt_enable_hostname_completion PARAMS((char *, int)); static int shopt_set_complete_direxpand PARAMS((char *, int)); #endif +#if defined (ARRAY_VARS) +static int set_assoc_expand PARAMS((char *, int)); +#endif + static int shopt_set_debug_mode PARAMS((char *, int)); static int shopt_login_shell; @@ -163,7 +172,7 @@ static struct { } shopt_vars[] = { { "autocd", &autocd, (shopt_set_func_t *)NULL }, #if defined (ARRAY_VARS) - { "assoc_expand_once", &assoc_expand_once, (shopt_set_func_t *)NULL }, + { "assoc_expand_once", &expand_once_flag, set_assoc_expand }, #endif { "cdable_vars", &cdable_vars, (shopt_set_func_t *)NULL }, { "cdspell", &cdspelling, (shopt_set_func_t *)NULL }, @@ -202,6 +211,7 @@ static struct { { "force_fignore", &force_fignore, (shopt_set_func_t *)NULL }, #endif { "globasciiranges", &glob_asciirange, (shopt_set_func_t *)NULL }, + { "globskipdots", &glob_always_skip_dot_and_dotdot, (shopt_set_func_t *)NULL }, { "globstar", &glob_star, (shopt_set_func_t *)NULL }, { "gnu_errfmt", &gnu_error_format, (shopt_set_func_t *)NULL }, #if defined (HISTORY) @@ -228,7 +238,9 @@ static struct { #endif { "nocaseglob", &glob_ignore_case, (shopt_set_func_t *)NULL }, { "nocasematch", &match_ignore_case, (shopt_set_func_t *)NULL }, + { "noexpand_translation", &singlequote_translations, (shopt_set_func_t *)NULL }, { "nullglob", &allow_null_glob_expansion, (shopt_set_func_t *)NULL }, + { "patsub_replacement", &patsub_replacement, (shopt_set_func_t *)NULL }, #if defined (PROGRAMMABLE_COMPLETION) { "progcomp", &prog_completion_enabled, (shopt_set_func_t *)NULL }, # if defined (ALIAS) @@ -244,6 +256,7 @@ static struct { #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT) { "syslog_history", &syslog_history, (shopt_set_func_t *)NULL }, #endif + { "varredir_close", &varassign_redir_autoclose, (shopt_set_func_t *)NULL }, { "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL }, { (char *)0, (int *)0, (shopt_set_func_t *)NULL } }; @@ -352,6 +365,9 @@ reset_shopt_options () glob_ignore_case = match_ignore_case = 0; print_shift_error = 0; source_uses_path = promptvars = 1; + varassign_redir_autoclose = 0; + singlequote_translations = 0; + patsub_replacement = 1; #if defined (JOB_CONTROL) check_jobs_at_exit = 0; @@ -362,7 +378,7 @@ reset_shopt_options () #endif #if defined (ARRAY_VARS) - assoc_expand_once = 0; + expand_once_flag = assoc_expand_once = 0; #endif #if defined (HISTORY) @@ -897,3 +913,17 @@ initialize_bashopts (no_bashopts) /* Set up the $BASHOPTS variable. */ set_bashopts (); } + +#if defined (ARRAY_VARS) +static int +set_assoc_expand (option_name, mode) + char *option_name; + int mode; +{ +#if 0 /* leave this disabled */ + if (shell_compatibility_level <= 51) +#endif + assoc_expand_once = expand_once_flag; + return 0; +} +#endif diff --git a/builtins/trap.def b/builtins/trap.def index daeec9ea..94229433 100644 --- a/builtins/trap.def +++ b/builtins/trap.def @@ -1,7 +1,7 @@ This file is trap.def, from which is created trap.c. It implements the builtin "trap" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -250,7 +250,9 @@ showtrap (i, show_default) int i, show_default; { char *t, *p, *sn; + int free_t; + free_t = 1; p = trap_list[i]; if (p == (char *)DEFAULT_SIG && signal_is_hard_ignored (i) == 0) { @@ -258,6 +260,7 @@ showtrap (i, show_default) t = "-"; else return; + free_t = 0; } else if (signal_is_hard_ignored (i)) t = (char *)NULL; @@ -279,7 +282,7 @@ showtrap (i, show_default) else printf ("trap -- %s %s\n", t ? t : "''", sn); - if (show_default == 0) + if (free_t) FREE (t); } diff --git a/builtins/ulimit.def b/builtins/ulimit.def index a895c5e2..fd9f7a3d 100644 --- a/builtins/ulimit.def +++ b/builtins/ulimit.def @@ -1,7 +1,7 @@ This file is ulimit.def, from which is created ulimit.c. It implements the builtin "ulimit" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -23,7 +23,7 @@ $PRODUCES ulimit.c $BUILTIN ulimit $FUNCTION ulimit_builtin $DEPENDS_ON !_MINIX -$SHORT_DOC ulimit [-SHabcdefiklmnpqrstuvxPT] [limit] +$SHORT_DOC ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit] Modify shell resource limits. Provides control over the resources available to the shell and processes @@ -428,6 +428,15 @@ ulimit_builtin (list) } } + /* POSIX compatibility. If the last item in cmdlist does not have an option + argument, but there is an operand (list != 0), treat the operand as if + it were an option argument for that last command. */ + if (list && list->word && cmdlist[ncmd - 1].arg == 0) + { + cmdlist[ncmd - 1].arg = list->word->word; + list = list->next; + } + for (c = 0; c < ncmd; c++) if (ulimit_internal (cmdlist[c].cmd, cmdlist[c].arg, mode, ncmd > 1) == EXECUTION_FAILURE) return (EXECUTION_FAILURE); diff --git a/builtins/wait.def b/builtins/wait.def index e70a4d94..290fb26f 100644 --- a/builtins/wait.def +++ b/builtins/wait.def @@ -1,7 +1,7 @@ This file is wait.def, from which is created wait.c. It implements the builtin "wait" in Bash. -Copyright (C) 1987-2020 Free Software Foundation, Inc. +Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -111,7 +111,7 @@ int wait_builtin (list) WORD_LIST *list; { - int status, code, opt, nflag; + int status, code, opt, nflag, vflags, bindflags; volatile int wflags; char *vname; SHELL_VAR *pidvar; @@ -119,7 +119,7 @@ wait_builtin (list) USE_VAR(list); - nflag = wflags = 0; + nflag = wflags = vflags = 0; vname = NULL; pidvar = (SHELL_VAR *)NULL; reset_internal_getopt (); @@ -136,6 +136,7 @@ wait_builtin (list) break; case 'p': vname = list_optarg; + vflags = list_optflags; break; #endif CASE_HELPOPT; @@ -152,9 +153,10 @@ wait_builtin (list) #if defined (ARRAY_VARS) int arrayflags; - arrayflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0; + SET_VFLAGS (vflags, arrayflags, bindflags); if (legal_identifier (vname) == 0 && valid_array_reference (vname, arrayflags) == 0) #else + bindflags = 0; if (legal_identifier (vname) == 0) #endif { @@ -181,8 +183,10 @@ wait_builtin (list) last_command_exit_signal = wait_signal_received; status = 128 + wait_signal_received; wait_sigint_cleanup (); +#if defined (JOB_CONTROL) if (wflags & JWAIT_WAITING) unset_waitlist (); +#endif WAIT_RETURN (status); } @@ -217,7 +221,7 @@ wait_builtin (list) status = wait_for_any_job (wflags, &pstat); if (vname && status >= 0) - bind_var_to_int (vname, pstat.pid); + builtin_bind_var_to_int (vname, pstat.pid, bindflags); if (status < 0) status = 127; @@ -233,7 +237,7 @@ wait_builtin (list) { wait_for_background_pids (&pstat); if (vname) - bind_var_to_int (vname, pstat.pid); + builtin_bind_var_to_int (vname, pstat.pid, bindflags); WAIT_RETURN (EXECUTION_SUCCESS); } diff --git a/command.h b/command.h index b8477528..e0dc2f95 100644 --- a/command.h +++ b/command.h @@ -1,7 +1,7 @@ /* command.h -- The structures used internally to represent commands, and the extern declarations of the functions used to create them. */ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -81,18 +81,18 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, #define W_NOGLOB (1 << 5) /* Do not perform globbing on this word. */ #define W_NOSPLIT2 (1 << 6) /* Don't split word except for $@ expansion (using spaces) because context does not allow it. */ #define W_TILDEEXP (1 << 7) /* Tilde expand this assignment word */ -#define W_DOLLARAT (1 << 8) /* $@ and its special handling -- UNUSED */ -#define W_DOLLARSTAR (1 << 9) /* $* and its special handling -- UNUSED */ +#define W_DOLLARAT (1 << 8) /* UNUSED - $@ and its special handling */ +#define W_ARRAYREF (1 << 9) /* word is a valid array reference */ #define W_NOCOMSUB (1 << 10) /* Don't perform command substitution on this word */ #define W_ASSIGNRHS (1 << 11) /* Word is rhs of an assignment statement */ #define W_NOTILDE (1 << 12) /* Don't perform tilde expansion on this word */ -#define W_ITILDE (1 << 13) /* Internal flag for word expansion */ +#define W_NOASSNTILDE (1 << 13) /* don't do tilde expansion like an assignment statement */ #define W_EXPANDRHS (1 << 14) /* Expanding word in ${paramOPword} */ #define W_COMPASSIGN (1 << 15) /* Compound assignment */ #define W_ASSNBLTIN (1 << 16) /* word is a builtin command that takes assignments */ #define W_ASSIGNARG (1 << 17) /* word is assignment argument to command */ #define W_HASQUOTEDNULL (1 << 18) /* word contains a quoted null character */ -#define W_DQUOTE (1 << 19) /* word should be treated as if double-quoted */ +#define W_DQUOTE (1 << 19) /* UNUSED - word should be treated as if double-quoted */ #define W_NOPROCSUB (1 << 20) /* don't perform process substitution */ #define W_SAWQUOTEDNULL (1 << 21) /* word contained a quoted null that was removed */ #define W_ASSIGNASSOC (1 << 22) /* word looks like associative array assignment */ @@ -102,8 +102,8 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, #define W_NOBRACE (1 << 26) /* Don't perform brace expansion */ #define W_COMPLETE (1 << 27) /* word is being expanded for completion */ #define W_CHKLOCAL (1 << 28) /* check for local vars on assignment */ -#define W_NOASSNTILDE (1 << 29) /* don't do tilde expansion like an assignment statement */ -#define W_FORCELOCAL (1 << 30) /* force assignments to be to local variables, non-fatal on assignment errors */ +#define W_FORCELOCAL (1 << 29) /* force assignments to be to local variables, non-fatal on assignment errors */ +/* UNUSED (1 << 30) */ /* Flags for the `pflags' argument to param_expand() and various parameter_brace_expand_xxx functions; also used for string_list_dollar_at */ diff --git a/config-bot.h b/config-bot.h index b075c778..a687e402 100644 --- a/config-bot.h +++ b/config-bot.h @@ -1,7 +1,7 @@ /* config-bot.h */ /* modify settings or make new ones based on what autoconf tells us. */ -/* Copyright (C) 1989-2009 Free Software Foundation, Inc. +/* Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -99,7 +99,7 @@ #endif #if !HAVE_MKDTEMP -# undef USE_MKDTMP +# undef USE_MKDTEMP #endif /* If the shell is called by this name, it will become restricted. */ diff --git a/config-top.h b/config-top.h index 735f75e3..db4ab6ee 100644 --- a/config-top.h +++ b/config-top.h @@ -1,6 +1,6 @@ /* config-top.h - various user-settable options not under the control of autoconf. */ -/* Copyright (C) 2002-2009 Free Software Foundation, Inc. +/* Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -77,6 +77,12 @@ "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc" #endif +/* The default path for enable -f */ +#ifndef DEFAULT_LOADABLE_BUILTINS_PATH +#define DEFAULT_LOADABLE_BUILTINS_PATH \ + "/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:." +#endif + /* Default primary and secondary prompt strings. */ #define PPROMPT "\\s-\\v\\$ " #define SPROMPT "> " @@ -108,7 +114,7 @@ /* Define if you want the case-toggling operators (~[~]) and the `capcase' variable attribute (declare -c). */ -/* TAG: bash-5.2 disable */ +/* TAG: bash-5.2 disable? */ #define CASEMOD_TOGGLECASE #define CASEMOD_CAPCASE diff --git a/config.h.in b/config.h.in index ab316d46..d6d52930 100644 --- a/config.h.in +++ b/config.h.in @@ -23,15 +23,6 @@ /* Template settings for autoconf */ -#undef __EXTENSIONS__ -#undef _ALL_SOURCE -#undef _GNU_SOURCE -#undef _POSIX_SOURCE -#undef _POSIX_1_SOURCE -#undef _POSIX_PTHREAD_SEMANTICS -#undef _TANDEM_SOURCE -#undef _MINIX - /* Configuration feature settings controllable by autoconf. */ /* Define JOB_CONTROL if your operating system supports @@ -219,10 +210,10 @@ #undef __CHAR_UNSIGNED__ -/* Define if the compiler supports `long long' variables. */ -#undef HAVE_LONG_LONG +/* Define if the compiler supports `long long int' variables. */ +#undef HAVE_LONG_LONG_INT -#undef HAVE_UNSIGNED_LONG_LONG +#undef HAVE_UNSIGNED_LONG_LONG_INT /* The number of bytes in a int. */ #undef SIZEOF_INT @@ -233,6 +224,9 @@ /* The number of bytes in a pointer to char. */ #undef SIZEOF_CHAR_P +/* The number of bytes in a size_t. */ +#undef SIZEOF_SIZE_T + /* The number of bytes in a double (hopefully 8). */ #undef SIZEOF_DOUBLE @@ -252,6 +246,8 @@ /* Characteristics of the system's header files and libraries that affect the compilation environment. */ +/* These are set by AC_USE_SYSTEM_EXTENSIONS */ + /* Define if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE @@ -259,11 +255,18 @@ /* Define if you need to in order for stat and other things to work. */ #undef _POSIX_SOURCE -/* Define to use GNU libc extensions */ +/* Define to use GNU libc extensions. */ #undef _GNU_SOURCE -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS +/* Define to enable general system extensions on Solaris. */ +#undef __EXTENSIONS__ + +/* General system extensions on AIX */ +#undef _ALL_SOURCE + +#undef _POSIX_PTHREAD_SEMANTICS +#undef _TANDEM_SOURCE +#undef _MINIX /* Memory management functions. */ @@ -513,11 +516,6 @@ #undef PGRP_PIPE -/* Define if the setvbuf function takes the buffering type as its second - argument and the buffer pointer as the third, as on System V - before release 3. */ -#undef SETVBUF_REVERSED - #undef STAT_MACROS_BROKEN #undef ULIMIT_MAXFDS @@ -530,8 +528,6 @@ #undef HAVE_PRINTF_A_FORMAT -#undef CTYPE_NON_ASCII - /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET @@ -554,12 +550,6 @@ /* Type and behavior of signal handling functions. */ -/* Define as the return type of signal handlers (int or void). */ -#undef RETSIGTYPE - -/* Define if return type of signal handlers is void */ -#undef VOID_SIGHANDLER - #undef MUST_REINSTALL_SIGHANDLERS #undef HAVE_BSD_SIGNALS @@ -1092,8 +1082,6 @@ /* Define if you have */ #undef HAVE_SYS_TIME_H -#undef TIME_WITH_SYS_TIME - /* Define if you have */ #undef HAVE_SYS_TIMES_H @@ -1169,6 +1157,13 @@ #undef DEV_FD_STAT_BROKEN +/* An array implementation that prioritizes speed (O(1) access) over space, + in array2.c */ +#undef ALT_ARRAY_IMPLEMENTATION + +/* Support for $"..." translatable strings. */ +#undef TRANSLATABLE_STRINGS + /* Additional defines for configuring lib/intl, maintained by autoscan/autoheader */ /* Define if you have the header file. */ diff --git a/configure b/configure index 0f1d3ed1..e9200378 100755 --- a/configure +++ b/configure @@ -1,12 +1,13 @@ #! /bin/sh -# From configure.ac for Bash 5.1, version 5.022. +# From configure.ac for Bash 5.2, version 5.039. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bash 5.1-release. +# Generated by GNU Autoconf 2.71 for bash 5.2-alpha. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -17,14 +18,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -34,46 +37,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -82,13 +85,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -97,8 +93,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -110,30 +110,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -155,20 +135,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -188,42 +170,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -231,14 +224,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -256,18 +256,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-bash@gnu.org + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and bug-bash@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -295,6 +296,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -312,6 +314,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -326,7 +336,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -335,7 +345,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -374,12 +384,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -391,18 +402,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -414,9 +434,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -443,7 +463,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -487,7 +507,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -501,6 +521,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -514,6 +538,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -581,52 +612,47 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bash' PACKAGE_TARNAME='bash' -PACKAGE_VERSION='5.1-release' -PACKAGE_STRING='bash 5.1-release' +PACKAGE_VERSION='5.2-alpha' +PACKAGE_STRING='bash 5.2-alpha' PACKAGE_BUGREPORT='bug-bash@gnu.org' PACKAGE_URL='' ac_unique_file="shell.h" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= gt_needs= -ac_header_list= +ac_func_c_list= gl_use_threads_default= -ac_func_list= ac_subst_vars='LTLIBOBJS LOCAL_DEFS LOCAL_LDFLAGS @@ -734,14 +760,16 @@ READLINE_LIB RL_MINOR RL_MAJOR RL_VERSION +EGREP +GREP +CPP LIBS_FOR_BUILD +STYLE_CFLAGS +BASE_CFLAGS_FOR_BUILD STATIC_LD SIGNAMES_O SIGNAMES_H CROSS_COMPILE -EGREP -GREP -CPP OBJEXT EXEEXT ac_ct_CC @@ -754,6 +782,7 @@ HELPFILES_TARGET HELPINSTALL HELPDIRDEFINE HELPDIR +ARRAY_O MALLOC_DEP MALLOC_LDFLAGS MALLOC_LIBRARY @@ -793,6 +822,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -822,6 +852,7 @@ with_gnu_malloc with_installed_readline enable_minimal_config enable_alias +enable_alt_array_implementation enable_arith_for_command enable_array_variables enable_bang_history @@ -856,6 +887,7 @@ enable_select enable_separate_helpfiles enable_single_help_strings enable_strict_posix_default +enable_translatable_strings enable_usg_echo_default enable_xpg_echo_default enable_mem_scramble @@ -925,6 +957,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -954,8 +987,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -996,9 +1027,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1022,9 +1053,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1177,6 +1208,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1226,9 +1266,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1242,9 +1282,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1288,9 +1328,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1306,7 +1346,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1314,7 +1354,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1370,7 +1410,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1427,7 +1467,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bash 5.1-release to adapt to many kinds of systems. +\`configure' configures bash 5.2-alpha to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1467,6 +1507,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1492,7 +1533,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bash 5.1-release:";; + short | recursive ) echo "Configuration of bash 5.2-alpha:";; esac cat <<\_ACEOF @@ -1502,6 +1543,9 @@ Optional Features: --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-minimal-config a minimal sh-like configuration --enable-alias enable shell aliases + --enable-alt-array-implementation + enable an alternate array implementation that + optimizes speed at the cost of space --enable-arith-for-command enable arithmetic for command --enable-array-variables @@ -1563,6 +1607,8 @@ Optional Features: translation --enable-strict-posix-default configure bash to be posix-conformant by default + --enable-translatable-strings + include support for $"..." translatable strings --enable-usg-echo-default a synonym for --enable-xpg-echo-default --enable-xpg-echo-default @@ -1646,9 +1692,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1676,7 +1722,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1684,7 +1731,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1693,10 +1740,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bash configure 5.1-release -generated by GNU Autoconf 2.69 +bash configure 5.2-alpha +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1713,14 +1760,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1728,14 +1775,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1745,20 +1793,91 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1766,17 +1885,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1791,218 +1911,18 @@ fi } # ac_fn_c_try_link -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------- ## -## Report this to bug-bash@gnu.org ## -## ------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2010,16 +1930,9 @@ else #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2037,28 +1950,72 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2066,17 +2023,18 @@ $as_echo "$ac_res" >&6; } ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2084,12 +2042,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2097,41 +2056,45 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2145,19 +2108,22 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- @@ -2173,7 +2139,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2183,14 +2149,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2200,9 +2167,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2210,14 +2178,14 @@ else fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2227,14 +2195,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2244,9 +2213,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2254,14 +2224,14 @@ else fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2269,7 +2239,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2279,12 +2249,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2294,12 +2265,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include #include int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -2327,9 +2298,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +printf %s "checking for $2.$3... " >&6; } +if eval test \${$4+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (ac_aggr.$3) @@ -2367,14 +2340,15 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2383,29 +2357,50 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bash $as_me 5.1-release, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by bash $as_me 5.2-alpha, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2438,8 +2433,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2474,7 +2473,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2509,11 +2508,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2524,8 +2525,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2549,7 +2550,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2557,14 +2558,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2572,15 +2573,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2588,8 +2589,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2603,63 +2604,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2669,32 +2655,449 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" +as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" gt_needs="$gt_needs need-ngettext" -as_fn_append ac_header_list " stdlib.h" -as_fn_append ac_header_list " unistd.h" -as_fn_append ac_header_list " sys/param.h" -as_fn_append ac_func_list " symlink" -as_fn_append ac_func_list " uselocale" -as_fn_append ac_header_list " xlocale.h" -as_fn_append ac_header_list " sys/time.h" -as_fn_append ac_func_list " alarm" -as_fn_append ac_func_list " fpurge" -as_fn_append ac_func_list " __fpurge" -as_fn_append ac_func_list " snprintf" -as_fn_append ac_func_list " vsnprintf" +as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" +as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE" +as_fn_append ac_func_c_list " symlink HAVE_SYMLINK" +as_fn_append ac_func_c_list " uselocale HAVE_USELOCALE" +as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H" +as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF" +as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" +as_fn_append ac_func_c_list " alarm HAVE_ALARM" +as_fn_append ac_func_c_list " fpurge HAVE_FPURGE" +as_fn_append ac_func_c_list " __fpurge HAVE___FPURGE" +as_fn_append ac_func_c_list " snprintf HAVE_SNPRINTF" +as_fn_append ac_func_c_list " vsnprintf HAVE_VSNPRINTF" + +# Auxiliary files required by this configure script. +ac_aux_files="config.rpath install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/./support" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2705,12 +3108,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2719,24 +3122,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2746,11 +3149,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2767,66 +3171,42 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_aux_dir= -for ac_dir in ./support "$srcdir"/./support; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in ./support \"$srcdir\"/./support" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - ac_config_headers="$ac_config_headers config.h" -BASHVERS=5.1 -RELSTATUS=release +BASHVERS=5.2 +RELSTATUS=alpha case "$RELSTATUS" in alp*|bet*|dev*|rc*|releng*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;; *) DEBUG= MALLOC_DEBUG= ;; esac -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -2845,21 +3225,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -2929,31 +3310,36 @@ esac # Check whether --with-afs was given. -if test "${with_afs+set}" = set; then : +if test ${with_afs+y} +then : withval=$with_afs; opt_afs=$withval fi # Check whether --with-bash-malloc was given. -if test "${with_bash_malloc+set}" = set; then : +if test ${with_bash_malloc+y} +then : withval=$with_bash_malloc; opt_bash_malloc=$withval fi # Check whether --with-curses was given. -if test "${with_curses+set}" = set; then : +if test ${with_curses+y} +then : withval=$with_curses; opt_curses=$withval fi # Check whether --with-gnu-malloc was given. -if test "${with_gnu_malloc+set}" = set; then : +if test ${with_gnu_malloc+y} +then : withval=$with_gnu_malloc; opt_bash_malloc=$withval fi # Check whether --with-installed-readline was given. -if test "${with_installed_readline+set}" = set; then : +if test ${with_installed_readline+y} +then : withval=$with_installed_readline; opt_with_installed_readline=$withval fi @@ -2967,7 +3353,7 @@ if test "$opt_bash_malloc" = yes; then MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)' MALLOC_DEP='$(MALLOC_LIBRARY)' - $as_echo "#define USING_BASH_MALLOC 1" >>confdefs.h + printf "%s\n" "#define USING_BASH_MALLOC 1" >>confdefs.h else MALLOC_LIB= @@ -2977,7 +3363,7 @@ else fi if test "$opt_afs" = yes; then - $as_echo "#define AFS 1" >>confdefs.h + printf "%s\n" "#define AFS 1" >>confdefs.h fi @@ -3027,12 +3413,17 @@ opt_dircomplete_expand_default=no opt_globascii_default=yes opt_function_import=yes opt_dev_fd_stat_broken=no +opt_alt_array_impl=no +opt_translatable_strings=yes + +ARRAY_O=array.o opt_static_link=no opt_profiling=no # Check whether --enable-minimal-config was given. -if test "${enable_minimal_config+set}" = set; then : +if test ${enable_minimal_config+y} +then : enableval=$enable_minimal_config; opt_minimal_config=$enableval fi @@ -3047,207 +3438,260 @@ if test $opt_minimal_config = yes; then opt_net_redirs=no opt_progcomp=no opt_separate_help=no opt_multibyte=yes opt_cond_regexp=no opt_coproc=no opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no + opt_translatable_strings=no opt_globascii_default=yes fi # Check whether --enable-alias was given. -if test "${enable_alias+set}" = set; then : +if test ${enable_alias+y} +then : enableval=$enable_alias; opt_alias=$enableval fi +# Check whether --enable-alt-array-implementation was given. +if test ${enable_alt_array_implementation+y} +then : + enableval=$enable_alt_array_implementation; opt_alt_array_impl=$enableval +fi + # Check whether --enable-arith-for-command was given. -if test "${enable_arith_for_command+set}" = set; then : +if test ${enable_arith_for_command+y} +then : enableval=$enable_arith_for_command; opt_arith_for_command=$enableval fi # Check whether --enable-array-variables was given. -if test "${enable_array_variables+set}" = set; then : +if test ${enable_array_variables+y} +then : enableval=$enable_array_variables; opt_array_variables=$enableval fi # Check whether --enable-bang-history was given. -if test "${enable_bang_history+set}" = set; then : +if test ${enable_bang_history+y} +then : enableval=$enable_bang_history; opt_bang_history=$enableval fi # Check whether --enable-brace-expansion was given. -if test "${enable_brace_expansion+set}" = set; then : +if test ${enable_brace_expansion+y} +then : enableval=$enable_brace_expansion; opt_brace_expansion=$enableval fi # Check whether --enable-casemod-attributes was given. -if test "${enable_casemod_attributes+set}" = set; then : +if test ${enable_casemod_attributes+y} +then : enableval=$enable_casemod_attributes; opt_casemod_attrs=$enableval fi # Check whether --enable-casemod-expansions was given. -if test "${enable_casemod_expansions+set}" = set; then : +if test ${enable_casemod_expansions+y} +then : enableval=$enable_casemod_expansions; opt_casemod_expansions=$enableval fi # Check whether --enable-command-timing was given. -if test "${enable_command_timing+set}" = set; then : +if test ${enable_command_timing+y} +then : enableval=$enable_command_timing; opt_command_timing=$enableval fi # Check whether --enable-cond-command was given. -if test "${enable_cond_command+set}" = set; then : +if test ${enable_cond_command+y} +then : enableval=$enable_cond_command; opt_cond_command=$enableval fi # Check whether --enable-cond-regexp was given. -if test "${enable_cond_regexp+set}" = set; then : +if test ${enable_cond_regexp+y} +then : enableval=$enable_cond_regexp; opt_cond_regexp=$enableval fi # Check whether --enable-coprocesses was given. -if test "${enable_coprocesses+set}" = set; then : +if test ${enable_coprocesses+y} +then : enableval=$enable_coprocesses; opt_coproc=$enableval fi # Check whether --enable-debugger was given. -if test "${enable_debugger+set}" = set; then : +if test ${enable_debugger+y} +then : enableval=$enable_debugger; opt_debugger=$enableval fi # Check whether --enable-dev-fd-stat-broken was given. -if test "${enable_dev_fd_stat_broken+set}" = set; then : +if test ${enable_dev_fd_stat_broken+y} +then : enableval=$enable_dev_fd_stat_broken; opt_dev_fd_stat_broken=$enableval fi # Check whether --enable-direxpand-default was given. -if test "${enable_direxpand_default+set}" = set; then : +if test ${enable_direxpand_default+y} +then : enableval=$enable_direxpand_default; opt_dircomplete_expand_default=$enableval fi # Check whether --enable-directory-stack was given. -if test "${enable_directory_stack+set}" = set; then : +if test ${enable_directory_stack+y} +then : enableval=$enable_directory_stack; opt_dirstack=$enableval fi # Check whether --enable-disabled-builtins was given. -if test "${enable_disabled_builtins+set}" = set; then : +if test ${enable_disabled_builtins+y} +then : enableval=$enable_disabled_builtins; opt_disabled_builtins=$enableval fi # Check whether --enable-dparen-arithmetic was given. -if test "${enable_dparen_arithmetic+set}" = set; then : +if test ${enable_dparen_arithmetic+y} +then : enableval=$enable_dparen_arithmetic; opt_dparen_arith=$enableval fi # Check whether --enable-extended-glob was given. -if test "${enable_extended_glob+set}" = set; then : +if test ${enable_extended_glob+y} +then : enableval=$enable_extended_glob; opt_extended_glob=$enableval fi # Check whether --enable-extended-glob-default was given. -if test "${enable_extended_glob_default+set}" = set; then : +if test ${enable_extended_glob_default+y} +then : enableval=$enable_extended_glob_default; opt_extglob_default=$enableval fi # Check whether --enable-function-import was given. -if test "${enable_function_import+set}" = set; then : +if test ${enable_function_import+y} +then : enableval=$enable_function_import; opt_function_import=$enableval fi # Check whether --enable-glob-asciiranges-default was given. -if test "${enable_glob_asciiranges_default+set}" = set; then : +if test ${enable_glob_asciiranges_default+y} +then : enableval=$enable_glob_asciiranges_default; opt_globascii_default=$enableval fi # Check whether --enable-help-builtin was given. -if test "${enable_help_builtin+set}" = set; then : +if test ${enable_help_builtin+y} +then : enableval=$enable_help_builtin; opt_help=$enableval fi # Check whether --enable-history was given. -if test "${enable_history+set}" = set; then : +if test ${enable_history+y} +then : enableval=$enable_history; opt_history=$enableval fi # Check whether --enable-job-control was given. -if test "${enable_job_control+set}" = set; then : +if test ${enable_job_control+y} +then : enableval=$enable_job_control; opt_job_control=$enableval fi # Check whether --enable-multibyte was given. -if test "${enable_multibyte+set}" = set; then : +if test ${enable_multibyte+y} +then : enableval=$enable_multibyte; opt_multibyte=$enableval fi # Check whether --enable-net-redirections was given. -if test "${enable_net_redirections+set}" = set; then : +if test ${enable_net_redirections+y} +then : enableval=$enable_net_redirections; opt_net_redirs=$enableval fi # Check whether --enable-process-substitution was given. -if test "${enable_process_substitution+set}" = set; then : +if test ${enable_process_substitution+y} +then : enableval=$enable_process_substitution; opt_process_subst=$enableval fi # Check whether --enable-progcomp was given. -if test "${enable_progcomp+set}" = set; then : +if test ${enable_progcomp+y} +then : enableval=$enable_progcomp; opt_progcomp=$enableval fi # Check whether --enable-prompt-string-decoding was given. -if test "${enable_prompt_string_decoding+set}" = set; then : +if test ${enable_prompt_string_decoding+y} +then : enableval=$enable_prompt_string_decoding; opt_prompt_decoding=$enableval fi # Check whether --enable-readline was given. -if test "${enable_readline+set}" = set; then : +if test ${enable_readline+y} +then : enableval=$enable_readline; opt_readline=$enableval fi # Check whether --enable-restricted was given. -if test "${enable_restricted+set}" = set; then : +if test ${enable_restricted+y} +then : enableval=$enable_restricted; opt_restricted=$enableval fi # Check whether --enable-select was given. -if test "${enable_select+set}" = set; then : +if test ${enable_select+y} +then : enableval=$enable_select; opt_select=$enableval fi # Check whether --enable-separate-helpfiles was given. -if test "${enable_separate_helpfiles+set}" = set; then : +if test ${enable_separate_helpfiles+y} +then : enableval=$enable_separate_helpfiles; opt_separate_help=$enableval fi # Check whether --enable-single-help-strings was given. -if test "${enable_single_help_strings+set}" = set; then : +if test ${enable_single_help_strings+y} +then : enableval=$enable_single_help_strings; opt_single_longdoc_strings=$enableval fi # Check whether --enable-strict-posix-default was given. -if test "${enable_strict_posix_default+set}" = set; then : +if test ${enable_strict_posix_default+y} +then : enableval=$enable_strict_posix_default; opt_strict_posix=$enableval fi +# Check whether --enable-translatable-strings was given. +if test ${enable_translatable_strings+y} +then : + enableval=$enable_translatable_strings; opt_translatable_strings=$enableval +fi + # Check whether --enable-usg-echo-default was given. -if test "${enable_usg_echo_default+set}" = set; then : +if test ${enable_usg_echo_default+y} +then : enableval=$enable_usg_echo_default; opt_xpg_echo=$enableval fi # Check whether --enable-xpg-echo-default was given. -if test "${enable_xpg_echo_default+set}" = set; then : +if test ${enable_xpg_echo_default+y} +then : enableval=$enable_xpg_echo_default; opt_xpg_echo=$enableval fi # Check whether --enable-mem-scramble was given. -if test "${enable_mem_scramble+set}" = set; then : +if test ${enable_mem_scramble+y} +then : enableval=$enable_mem_scramble; opt_memscramble=$enableval fi # Check whether --enable-profiling was given. -if test "${enable_profiling+set}" = set; then : +if test ${enable_profiling+y} +then : enableval=$enable_profiling; opt_profiling=$enableval fi # Check whether --enable-static-link was given. -if test "${enable_static_link+set}" = set; then : +if test ${enable_static_link+y} +then : enableval=$enable_static_link; opt_static_link=$enableval fi @@ -3260,134 +3704,143 @@ fi if test $opt_alias = yes; then -$as_echo "#define ALIAS 1" >>confdefs.h +printf "%s\n" "#define ALIAS 1" >>confdefs.h fi if test $opt_dirstack = yes; then -$as_echo "#define PUSHD_AND_POPD 1" >>confdefs.h +printf "%s\n" "#define PUSHD_AND_POPD 1" >>confdefs.h fi if test $opt_restricted = yes; then -$as_echo "#define RESTRICTED_SHELL 1" >>confdefs.h +printf "%s\n" "#define RESTRICTED_SHELL 1" >>confdefs.h fi if test $opt_process_subst = yes; then -$as_echo "#define PROCESS_SUBSTITUTION 1" >>confdefs.h +printf "%s\n" "#define PROCESS_SUBSTITUTION 1" >>confdefs.h fi if test $opt_prompt_decoding = yes; then -$as_echo "#define PROMPT_STRING_DECODE 1" >>confdefs.h +printf "%s\n" "#define PROMPT_STRING_DECODE 1" >>confdefs.h fi if test $opt_select = yes; then -$as_echo "#define SELECT_COMMAND 1" >>confdefs.h +printf "%s\n" "#define SELECT_COMMAND 1" >>confdefs.h fi if test $opt_help = yes; then -$as_echo "#define HELP_BUILTIN 1" >>confdefs.h +printf "%s\n" "#define HELP_BUILTIN 1" >>confdefs.h fi if test $opt_array_variables = yes; then -$as_echo "#define ARRAY_VARS 1" >>confdefs.h +printf "%s\n" "#define ARRAY_VARS 1" >>confdefs.h fi if test $opt_dparen_arith = yes; then -$as_echo "#define DPAREN_ARITHMETIC 1" >>confdefs.h +printf "%s\n" "#define DPAREN_ARITHMETIC 1" >>confdefs.h fi if test $opt_brace_expansion = yes; then -$as_echo "#define BRACE_EXPANSION 1" >>confdefs.h +printf "%s\n" "#define BRACE_EXPANSION 1" >>confdefs.h fi if test $opt_disabled_builtins = yes; then -$as_echo "#define DISABLED_BUILTINS 1" >>confdefs.h +printf "%s\n" "#define DISABLED_BUILTINS 1" >>confdefs.h fi if test $opt_command_timing = yes; then -$as_echo "#define COMMAND_TIMING 1" >>confdefs.h +printf "%s\n" "#define COMMAND_TIMING 1" >>confdefs.h fi if test $opt_xpg_echo = yes ; then -$as_echo "#define DEFAULT_ECHO_TO_XPG 1" >>confdefs.h +printf "%s\n" "#define DEFAULT_ECHO_TO_XPG 1" >>confdefs.h fi if test $opt_strict_posix = yes; then -$as_echo "#define STRICT_POSIX 1" >>confdefs.h +printf "%s\n" "#define STRICT_POSIX 1" >>confdefs.h fi if test $opt_extended_glob = yes ; then -$as_echo "#define EXTENDED_GLOB 1" >>confdefs.h +printf "%s\n" "#define EXTENDED_GLOB 1" >>confdefs.h fi if test $opt_extglob_default = yes; then -$as_echo "#define EXTGLOB_DEFAULT 1" >>confdefs.h +printf "%s\n" "#define EXTGLOB_DEFAULT 1" >>confdefs.h else -$as_echo "#define EXTGLOB_DEFAULT 0" >>confdefs.h +printf "%s\n" "#define EXTGLOB_DEFAULT 0" >>confdefs.h fi if test $opt_cond_command = yes ; then -$as_echo "#define COND_COMMAND 1" >>confdefs.h +printf "%s\n" "#define COND_COMMAND 1" >>confdefs.h fi if test $opt_cond_regexp = yes ; then -$as_echo "#define COND_REGEXP 1" >>confdefs.h +printf "%s\n" "#define COND_REGEXP 1" >>confdefs.h fi if test $opt_coproc = yes; then -$as_echo "#define COPROCESS_SUPPORT 1" >>confdefs.h +printf "%s\n" "#define COPROCESS_SUPPORT 1" >>confdefs.h fi if test $opt_arith_for_command = yes; then -$as_echo "#define ARITH_FOR_COMMAND 1" >>confdefs.h +printf "%s\n" "#define ARITH_FOR_COMMAND 1" >>confdefs.h fi if test $opt_net_redirs = yes; then -$as_echo "#define NETWORK_REDIRECTIONS 1" >>confdefs.h +printf "%s\n" "#define NETWORK_REDIRECTIONS 1" >>confdefs.h fi if test $opt_progcomp = yes; then -$as_echo "#define PROGRAMMABLE_COMPLETION 1" >>confdefs.h +printf "%s\n" "#define PROGRAMMABLE_COMPLETION 1" >>confdefs.h fi if test $opt_multibyte = no; then -$as_echo "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h +printf "%s\n" "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h fi if test $opt_debugger = yes; then -$as_echo "#define DEBUGGER 1" >>confdefs.h +printf "%s\n" "#define DEBUGGER 1" >>confdefs.h fi if test $opt_casemod_attrs = yes; then -$as_echo "#define CASEMOD_ATTRS 1" >>confdefs.h +printf "%s\n" "#define CASEMOD_ATTRS 1" >>confdefs.h fi if test $opt_casemod_expansions = yes; then -$as_echo "#define CASEMOD_EXPANSIONS 1" >>confdefs.h +printf "%s\n" "#define CASEMOD_EXPANSIONS 1" >>confdefs.h fi if test $opt_dircomplete_expand_default = yes; then -$as_echo "#define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h +printf "%s\n" "#define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h fi if test $opt_globascii_default = yes; then -$as_echo "#define GLOBASCII_DEFAULT 1" >>confdefs.h +printf "%s\n" "#define GLOBASCII_DEFAULT 1" >>confdefs.h else -$as_echo "#define GLOBASCII_DEFAULT 0" >>confdefs.h +printf "%s\n" "#define GLOBASCII_DEFAULT 0" >>confdefs.h fi if test $opt_function_import = yes; then -$as_echo "#define FUNCTION_IMPORT 1" >>confdefs.h +printf "%s\n" "#define FUNCTION_IMPORT 1" >>confdefs.h fi if test $opt_dev_fd_stat_broken = yes; then -$as_echo "#define DEV_FD_STAT_BROKEN 1" >>confdefs.h +printf "%s\n" "#define DEV_FD_STAT_BROKEN 1" >>confdefs.h + +fi +if test $opt_alt_array_impl = yes; then +printf "%s\n" "#define ALT_ARRAY_IMPLEMENTATION 1" >>confdefs.h + +ARRAY_O=array2.o +fi +if test $opt_translatable_strings = yes; then +printf "%s\n" "#define TRANSLATABLE_STRINGS 1" >>confdefs.h fi if test $opt_memscramble = yes; then -$as_echo "#define MEMSCRAMBLE 1" >>confdefs.h +printf "%s\n" "#define MEMSCRAMBLE 1" >>confdefs.h fi @@ -3400,7 +3853,7 @@ fi HELPDIR= HELPDIRDEFINE= HELPINSTALL= HELPFILES_TARGET= if test "$opt_separate_help" != no; then if test "$opt_separate_help" = "yes" ; then - HELPDIR='${datadir}/bash' + HELPDIR='${datadir}/bash/helpfiles' else HELPDIR=$opt_separate_help fi @@ -3430,6 +3883,8 @@ fi + + if test -z "$CFLAGS"; then want_auto_cflags=1 fi @@ -3438,6 +3893,15 @@ echo "" echo "Beginning configuration for bash-$BASHVERS-$RELSTATUS for ${host_cpu}-${host_vendor}-${host_os}" echo "" + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3446,11 +3910,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3458,11 +3923,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3473,11 +3942,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3486,11 +3955,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3498,11 +3968,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3513,11 +3987,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3525,8 +3999,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3539,11 +4013,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3551,11 +4026,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3566,11 +4045,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3579,11 +4058,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3592,15 +4072,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3616,18 +4100,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3638,11 +4122,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3650,11 +4135,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3665,11 +4154,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3682,11 +4171,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3694,11 +4184,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3709,11 +4203,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3725,8 +4219,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3734,25 +4228,129 @@ esac fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3762,7 +4360,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3770,7 +4368,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3782,9 +4380,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3805,11 +4403,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3826,7 +4425,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3842,44 +4441,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3893,15 +4494,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3910,7 +4511,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -3922,8 +4523,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3931,10 +4532,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3942,39 +4543,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3988,11 +4590,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -4001,31 +4604,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -4035,29 +4639,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -4066,57 +4674,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -4131,94 +4742,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -4229,542 +4890,199 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$want_auto_cflags"; then - AUTO_CFLAGS="-g ${GCC+-O2}" - AUTO_LDFLAGS="-g ${GCC+-O2}" - STYLE_CFLAGS="${GCC+-Wno-parentheses} ${GCC+-Wno-format-security}" + AUTO_CFLAGS="-g ${GCC:+-O2}" + AUTO_LDFLAGS="-g ${GCC:+-O2}" +# STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security} ${GCC:+-Wno-tautological-constant-out-of-range-compare}" + STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security}" else AUTO_CFLAGS= AUTO_LDFLAGS= STYLE_CFLAGS= fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 -$as_echo_n "checking for library containing strerror... " >&6; } -if ${ac_cv_search_strerror+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strerror (); -int -main () -{ -return strerror (); - ; - return 0; -} -_ACEOF -for ac_lib in '' cposix; do - if test -z "$ac_lib"; then - ac_res="none required" +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" + ac_header=$ac_item fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_strerror=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_strerror+:} false; then : - break -fi -done -if ${ac_cv_search_strerror+:} false; then : - -else - ac_cv_search_strerror=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 -$as_echo "$ac_cv_search_strerror" >&6; } -ac_res=$ac_cv_search_strerror -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - done - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= + + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h + fi - if test "$MINIX" = yes; then - -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h -$as_echo "#define _MINIX 1" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test ${ac_cv_safe_to_define___extensions__+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_safe_to_define___extensions__=yes -else +else $as_nop ac_cv_safe_to_define___extensions__=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if test ${ac_cv_should_define__xopen_source+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_should_define__xopen_source=no + if test $ac_cv_header_wchar_h = yes +then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + #include + mbstate_t x; +int +main (void) +{ - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #define _XOPEN_SOURCE 500 + #include + mbstate_t x; +int +main (void) +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_should_define__xopen_source=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } + printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h + + printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h + + printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h + + printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h + + if test $ac_cv_header_minix_config_h = yes +then : + MINIX=yes + printf "%s\n" "#define _MINIX 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h + + printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h + +else $as_nop + MINIX= +fi + if test $ac_cv_safe_to_define___extensions__ = yes +then : + printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h + +fi + if test $ac_cv_should_define__xopen_source = yes +then : + printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h + +fi # Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : +if test ${enable_largefile+y} +then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC @@ -4778,44 +5096,47 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_largefile_CC=' -n32'; break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4824,22 +5145,23 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 @@ -4848,43 +5170,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=64; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF +printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } +if test ${ac_cv_sys_large_files+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4893,22 +5215,23 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 @@ -4917,40 +5240,37 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=1; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +printf "%s\n" "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF +printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h ;; esac rm -rf conftest* fi - - fi @@ -5010,7 +5330,7 @@ if test "$opt_static_link" = yes; then prefer_static=yes prefer_shared=no # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2 - if test -n "$GCC" || test "$ac_cv_c_compiler_gnu" = "yes"; then + if test "$GCC" = "yes"; then STATIC_LD="-static" case "$host_os" in solaris2*|linux*) ;; @@ -5032,9 +5352,12 @@ if test "X$cross_compiling" = "Xno"; then fi # CFLAGS set above to default value if not passed in environment if test -n "$want_auto_cflags" ; then - CFLAGS_FOR_BUILD="${CFLAGS} ${STYLE_CFLAGS}" + CFLAGS_FOR_BUILD="${CFLAGS}" + BASE_CFLAGS_FOR_BUILD="${CFLAGS}" else + # passed in environment CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'} + BASE_CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'} fi LIBS_FOR_BUILD=${LIBS_FOR_BUILD-'$(LIBS)'} else @@ -5042,6 +5365,7 @@ else CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""} LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD="-g"} + BASE_CFLAGS_FOR_BUILD=${BASE_CFLAGS_FOR_BUILD="-g"} LIBS_FOR_BUILD=${LIBS_FOR_BUILD-""} fi @@ -5056,12 +5380,290 @@ fi -if test $ac_cv_c_compiler_gnu = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -$as_echo_n "checking whether $CC needs -traditional... " >&6; } -if ${ac_cv_prog_gcc_traditional+:} false; then : - $as_echo_n "(cached) " >&6 + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +if test $ac_cv_c_compiler_gnu = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 +printf %s "checking whether $CC needs -traditional... " >&6; } +if test ${ac_cv_prog_gcc_traditional+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5069,12 +5671,13 @@ else Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : + $EGREP "$ac_pattern" >/dev/null 2>&1 +then : ac_cv_prog_gcc_traditional=yes -else +else $as_nop ac_cv_prog_gcc_traditional=no fi -rm -f conftest* +rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then @@ -5084,15 +5687,16 @@ rm -f conftest* Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : + $EGREP "$ac_pattern" >/dev/null 2>&1 +then : ac_cv_prog_gcc_traditional=yes fi -rm -f conftest* +rm -rf conftest* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -$as_echo "$ac_cv_prog_gcc_traditional" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 +printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi @@ -5110,22 +5714,25 @@ then if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 -$as_echo_n "checking which library has the termcap functions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 +printf %s "checking which library has the termcap functions... " >&6; } _bash_needmsg= fi -if ${bash_cv_termcap_lib+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${bash_cv_termcap_lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" -if test "x$ac_cv_func_tgetent" = xyes; then : +if test "x$ac_cv_func_tgetent" = xyes +then : bash_cv_termcap_lib=libc -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 -$as_echo_n "checking for tgetent in -ltermcap... " >&6; } -if ${ac_cv_lib_termcap_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 +printf %s "checking for tgetent in -ltermcap... " >&6; } +if test ${ac_cv_lib_termcap_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5134,37 +5741,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_termcap_tgetent=yes -else +else $as_nop ac_cv_lib_termcap_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 -$as_echo "$ac_cv_lib_termcap_tgetent" >&6; } -if test "x$ac_cv_lib_termcap_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; } +if test "x$ac_cv_lib_termcap_tgetent" = xyes +then : bash_cv_termcap_lib=libtermcap -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 -$as_echo_n "checking for tgetent in -ltinfo... " >&6; } -if ${ac_cv_lib_tinfo_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 +printf %s "checking for tgetent in -ltinfo... " >&6; } +if test ${ac_cv_lib_tinfo_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ltinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5173,37 +5780,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_tinfo_tgetent=yes -else +else $as_nop ac_cv_lib_tinfo_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 -$as_echo "$ac_cv_lib_tinfo_tgetent" >&6; } -if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; } +if test "x$ac_cv_lib_tinfo_tgetent" = xyes +then : bash_cv_termcap_lib=libtinfo -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 -$as_echo_n "checking for tgetent in -lcurses... " >&6; } -if ${ac_cv_lib_curses_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 +printf %s "checking for tgetent in -lcurses... " >&6; } +if test ${ac_cv_lib_curses_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5212,37 +5819,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_curses_tgetent=yes -else +else $as_nop ac_cv_lib_curses_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 -$as_echo "$ac_cv_lib_curses_tgetent" >&6; } -if test "x$ac_cv_lib_curses_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; } +if test "x$ac_cv_lib_curses_tgetent" = xyes +then : bash_cv_termcap_lib=libcurses -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 -$as_echo_n "checking for tgetent in -lncurses... " >&6; } -if ${ac_cv_lib_ncurses_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 +printf %s "checking for tgetent in -lncurses... " >&6; } +if test ${ac_cv_lib_ncurses_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5251,37 +5858,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_ncurses_tgetent=yes -else +else $as_nop ac_cv_lib_ncurses_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 -$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; } -if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; } +if test "x$ac_cv_lib_ncurses_tgetent" = xyes +then : bash_cv_termcap_lib=libncurses -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 -$as_echo_n "checking for tgetent in -lncursesw... " >&6; } -if ${ac_cv_lib_ncursesw_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 +printf %s "checking for tgetent in -lncursesw... " >&6; } +if test ${ac_cv_lib_ncursesw_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lncursesw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5290,32 +5897,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_ncursesw_tgetent=yes -else +else $as_nop ac_cv_lib_ncursesw_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 -$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; } -if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; } +if test "x$ac_cv_lib_ncursesw_tgetent" = xyes +then : bash_cv_termcap_lib=libncursesw -else +else $as_nop bash_cv_termcap_lib=gnutermcap fi @@ -5332,11 +5938,11 @@ fi fi if test "X$_bash_needmsg" = "Xyes"; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 -$as_echo_n "checking which library has the termcap functions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 +printf %s "checking which library has the termcap functions... " >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 -$as_echo "using $bash_cv_termcap_lib" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 +printf "%s\n" "using $bash_cv_termcap_lib" >&6; } if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" @@ -5361,8 +5967,8 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version of installed readline library" >&5 -$as_echo_n "checking version of installed readline library... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of installed readline library" >&5 +printf %s "checking version of installed readline library... " >&6; } # What a pain in the ass this is. @@ -5386,12 +5992,15 @@ LIBS="$LIBS -lreadline ${TERMCAP_LIB}" CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" -if ${ac_cv_rl_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +if test ${ac_cv_rl_version+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_rl_version='8.0' -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5417,9 +6026,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_rl_version=`cat conftest.rlv` -else +else $as_nop ac_cv_rl_version='0.0' fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -5463,31 +6073,25 @@ RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" # Readline versions greater than 4.2 have these defines in readline.h if test $ac_cv_rl_version = '0.0' ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not test version of installed readline library." >&5 -$as_echo "$as_me: WARNING: Could not test version of installed readline library." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Could not test version of installed readline library." >&5 +printf "%s\n" "$as_me: WARNING: Could not test version of installed readline library." >&2;} elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5 -$as_echo "$ac_cv_rl_version" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5 +printf "%s\n" "$ac_cv_rl_version" >&6; } else -cat >>confdefs.h <<_ACEOF -#define RL_READLINE_VERSION $RL_VERSION -_ACEOF +printf "%s\n" "#define RL_READLINE_VERSION $RL_VERSION" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define RL_VERSION_MAJOR $RL_MAJOR -_ACEOF +printf "%s\n" "#define RL_VERSION_MAJOR $RL_MAJOR" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define RL_VERSION_MINOR $RL_MINOR -_ACEOF +printf "%s\n" "#define RL_VERSION_MINOR $RL_MINOR" >>confdefs.h @@ -5499,8 +6103,8 @@ RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5 -$as_echo "$ac_cv_rl_version" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5 +printf "%s\n" "$ac_cv_rl_version" >&6; } fi @@ -5508,17 +6112,17 @@ fi case "$ac_cv_rl_version" in 8*|9*) ;; *) opt_with_installed_readline=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installed readline library is too old to be linked with bash" >&5 -$as_echo "$as_me: WARNING: installed readline library is too old to be linked with bash" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using private bash version" >&5 -$as_echo "$as_me: WARNING: using private bash version" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: installed readline library is too old to be linked with bash" >&5 +printf "%s\n" "$as_me: WARNING: installed readline library is too old to be linked with bash" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using private bash version" >&5 +printf "%s\n" "$as_me: WARNING: using private bash version" >&2;} ;; esac fi TILDE_LIB=-ltilde if test $opt_readline = yes; then - $as_echo "#define READLINE 1" >>confdefs.h + printf "%s\n" "#define READLINE 1" >>confdefs.h if test "$opt_with_installed_readline" != "no" ; then case "$opt_with_installed_readline" in @@ -5554,11 +6158,11 @@ else fi if test $opt_history = yes || test $opt_bang_history = yes; then if test $opt_history = yes; then - $as_echo "#define HISTORY 1" >>confdefs.h + printf "%s\n" "#define HISTORY 1" >>confdefs.h fi if test $opt_bang_history = yes; then - $as_echo "#define BANG_HISTORY 1" >>confdefs.h + printf "%s\n" "#define BANG_HISTORY 1" >>confdefs.h fi if test "$opt_with_installed_readline" != "no"; then @@ -5600,7 +6204,8 @@ fi -# Find a good install program. We prefer a C program (faster), + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -5614,20 +6219,25 @@ fi # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -5637,13 +6247,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -5651,12 +6261,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -5672,7 +6282,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -5682,8 +6292,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -5696,11 +6306,12 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -5708,11 +6319,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5723,11 +6338,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5736,11 +6351,12 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -5748,11 +6364,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5763,11 +6383,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AR" = x; then @@ -5775,8 +6395,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -5789,11 +6409,12 @@ test -n "$ARFLAGS" || ARFLAGS="cr" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -5801,11 +6422,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5816,11 +6441,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5829,11 +6454,12 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -5841,11 +6467,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5856,11 +6486,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -5868,8 +6498,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -5882,11 +6512,12 @@ for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_YACC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_YACC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else @@ -5894,11 +6525,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5909,11 +6544,11 @@ fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 -$as_echo "$YACC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +printf "%s\n" "$YACC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5921,13 +6556,14 @@ fi done test -n "$YACC" || YACC="yacc" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -5943,20 +6579,20 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi case "$ac_cv_prog_YACC" in *bison*) ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5 -$as_echo "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;; +*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5 +printf "%s\n" "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;; esac case "$host_os" in @@ -6326,19 +6962,17 @@ fi -$as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +printf %s "checking for an ANSI C-conforming const... " >&6; } +if test ${ac_cv_c_const+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __cplusplus @@ -6351,7 +6985,7 @@ main () /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. + /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ @@ -6379,7 +7013,7 @@ main () iptr p = 0; ++p; } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; @@ -6395,47 +7029,50 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_const=yes -else +else $as_nop ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -$as_echo "#define const /**/" >>confdefs.h +printf "%s\n" "#define const /**/" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } +if test ${ac_cv_c_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } +static $ac_kw foo_t static_foo (void) {return 0; } +$ac_kw foo_t foo (void) {return 0; } #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; @@ -6452,11 +7089,12 @@ _ACEOF ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +printf %s "checking whether byte ordering is bigendian... " >&6; } +if test ${ac_cv_c_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6467,7 +7105,8 @@ else typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -6491,7 +7130,7 @@ if ac_fn_c_try_compile "$LINENO"; then : fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6500,7 +7139,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -6512,7 +7151,8 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6520,7 +7160,7 @@ if ac_fn_c_try_compile "$LINENO"; then : #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -6530,14 +7170,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -6546,7 +7187,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -6556,14 +7197,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef _BIG_ENDIAN not big endian @@ -6573,31 +7215,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = +unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = + unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - short int ebcdic_ii[] = + unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = + unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -6605,14 +7249,15 @@ short int ascii_mm[] = extern int foo; int -main () +main (void) { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -6625,13 +7270,13 @@ if ac_fn_c_try_compile "$LINENO"; then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { /* Are we little or big endian? From Harbison&Steele. */ @@ -6647,9 +7292,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_bigendian=no -else +else $as_nop ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -6658,17 +7304,17 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h + printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h +printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) @@ -6676,11 +7322,12 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for preprocessor stringizing operator" >&5 -$as_echo_n "checking for preprocessor stringizing operator... " >&6; } -if ${ac_cv_c_stringize+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for preprocessor stringizing operator" >&5 +printf %s "checking for preprocessor stringizing operator... " >&6; } +if test ${ac_cv_c_stringize+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define x(y) #y @@ -6688,53 +7335,43 @@ else char *s = x(teststring); _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "#teststring" >/dev/null 2>&1; then : + $EGREP "#teststring" >/dev/null 2>&1 +then : ac_cv_c_stringize=no -else +else $as_nop ac_cv_c_stringize=yes fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stringize" >&5 -$as_echo "$ac_cv_c_stringize" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stringize" >&5 +printf "%s\n" "$ac_cv_c_stringize" >&6; } if test $ac_cv_c_stringize = yes; then -$as_echo "#define HAVE_STRINGIZE 1" >>confdefs.h +printf "%s\n" "#define HAVE_STRINGIZE 1" >>confdefs.h fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 -$as_echo_n "checking for long double with more range or precision than double... " >&6; } -if ${ac_cv_type_long_double_wider+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 +printf %s "checking for long double... " >&6; } +if test ${ac_cv_type_long_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$GCC" = yes; then + ac_cv_type_long_double=yes + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include - long double const a[] = - { - 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, - LDBL_MIN, LDBL_MAX, LDBL_EPSILON - }; - long double - f (long double x) - { - return ((x + (unsigned long int) 10) * (-1 / x) + a[0] - + (x ? f (x) : 'c')); - } - +/* The Stardent Vistra knows sizeof (long double), but does + not support it. */ + long double foo = 0.0L; int -main () +main (void) { -static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) - + (DBL_MANT_DIG < LDBL_MANT_DIG) - - (LDBL_MAX_EXP < DBL_MAX_EXP) - - (LDBL_MANT_DIG < DBL_MANT_DIG))) - && (int) LDBL_EPSILON == 0 - )]; +static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ + sizeof (double) <= sizeof (long double))]; test_array [0] = 0; return test_array [0]; @@ -6742,54 +7379,43 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_long_double_wider=yes -else - ac_cv_type_long_double_wider=no +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_type_long_double=yes +else $as_nop + ac_cv_type_long_double=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 -$as_echo "$ac_cv_type_long_double_wider" >&6; } - if test $ac_cv_type_long_double_wider = yes; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 +printf "%s\n" "$ac_cv_type_long_double" >&6; } + if test $ac_cv_type_long_double = yes; then -$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h +printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi - ac_cv_c_long_double=$ac_cv_type_long_double_wider - if test $ac_cv_c_long_double = yes; then +if test "$ac_prog_cc_stdc" != no; then -$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h - - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 -$as_echo_n "checking for function prototypes... " >&6; } -if test "$ac_cv_prog_cc_c89" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define PROTOTYPES 1" >>confdefs.h +printf "%s\n" "#define PROTOTYPES 1" >>confdefs.h -$as_echo "#define __PROTOTYPES 1" >>confdefs.h +printf "%s\n" "#define __PROTOTYPES 1" >>confdefs.h -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 -$as_echo_n "checking whether char is unsigned... " >&6; } -if ${ac_cv_c_char_unsigned+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 +printf %s "checking whether char is unsigned... " >&6; } +if test ${ac_cv_c_char_unsigned+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; @@ -6799,30 +7425,32 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_char_unsigned=no -else +else $as_nop ac_cv_c_char_unsigned=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 -$as_echo "$ac_cv_c_char_unsigned" >&6; } -if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then - $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 +printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } +if test $ac_cv_c_char_unsigned = yes; then + printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 -$as_echo_n "checking for working volatile... " >&6; } -if ${ac_cv_c_volatile+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 +printf %s "checking for working volatile... " >&6; } +if test ${ac_cv_c_volatile+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { volatile int x; @@ -6832,87 +7460,98 @@ return !x && !y; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_volatile=yes -else +else $as_nop ac_cv_c_volatile=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 -$as_echo "$ac_cv_c_volatile" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 +printf "%s\n" "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then -$as_echo "#define volatile /**/" >>confdefs.h +printf "%s\n" "#define volatile /**/" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 -$as_echo_n "checking for C/C++ restrict keyword... " >&6; } -if ${ac_cv_c_restrict+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +printf %s "checking for C/C++ restrict keyword... " >&6; } +if test ${ac_cv_c_restrict+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do + # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: + # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html + # Put 'restrict' last, because C++ lacks it. + for ac_kw in __restrict__ __restrict _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -typedef int * int_ptr; - int foo (int_ptr $ac_kw ip) { - return ip[0]; - } +typedef int *int_ptr; + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } + int -main () +main (void) { int s[1]; - int * $ac_kw t = s; - t[0] = 0; - return foo(t) + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_restrict=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 -$as_echo "$ac_cv_c_restrict" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +printf "%s\n" "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; - no) $as_echo "#define restrict /**/" >>confdefs.h + no) printf "%s\n" "#define restrict /**/" >>confdefs.h ;; - *) cat >>confdefs.h <<_ACEOF -#define restrict $ac_cv_c_restrict -_ACEOF + *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done @@ -6923,7 +7562,7 @@ IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then + if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a @@ -6933,14 +7572,15 @@ fi MKDIR_P="$ac_install_sh -d" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -6954,10 +7594,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -6966,13 +7611,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -7000,23 +7645,24 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 -$as_echo_n "checking whether NLS is requested... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. -if test "${enable_nls+set}" = set; then : +if test ${enable_nls+y} +then : enableval=$enable_nls; USE_NLS=$enableval -else +else $as_nop USE_NLS=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +printf "%s\n" "$USE_NLS" >&6; } @@ -7055,11 +7701,12 @@ rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MSGFMT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_MSGFMT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. @@ -7087,20 +7734,21 @@ esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 -$as_echo "$MSGFMT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +printf "%s\n" "$MSGFMT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GMSGFMT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GMSGFMT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. @@ -7110,11 +7758,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7127,11 +7779,11 @@ esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 -$as_echo "$GMSGFMT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +printf "%s\n" "$GMSGFMT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7177,11 +7829,12 @@ rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_XGETTEXT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_XGETTEXT+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. @@ -7209,11 +7862,11 @@ esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -$as_echo "$XGETTEXT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +printf "%s\n" "$XGETTEXT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi rm -f messages.po @@ -7254,11 +7907,12 @@ rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MSGMERGE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_MSGMERGE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. @@ -7285,11 +7939,11 @@ esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 -$as_echo "$MSGMERGE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +printf "%s\n" "$MSGMERGE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7300,11 +7954,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 -$as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; } -if ${ac_cv_gnu_library_2+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 +printf %s "checking whether we are using the GNU C Library 2 or newer... " >&6; } +if test ${ac_cv_gnu_library_2+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7317,18 +7972,19 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + $EGREP "Lucky GNU user" >/dev/null 2>&1 +then : ac_cv_gnu_library_2=yes -else +else $as_nop ac_cv_gnu_library_2=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 -$as_echo "$ac_cv_gnu_library_2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 +printf "%s\n" "$ac_cv_gnu_library_2" >&6; } GLIBC2="$ac_cv_gnu_library_2" @@ -7338,40 +7994,43 @@ $as_echo "$ac_cv_gnu_library_2" >&6; } CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 -$as_echo_n "checking whether the -Werror option is usable... " >&6; } -if ${gl_cv_cc_vis_werror+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 +printf %s "checking whether the -Werror option is usable... " >&6; } +if test ${gl_cv_cc_vis_werror+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_cc_vis_werror=yes -else +else $as_nop gl_cv_cc_vis_werror=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 -$as_echo "$gl_cv_cc_vis_werror" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 -$as_echo_n "checking for simple visibility declarations... " >&6; } -if ${gl_cv_cc_visibility+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +printf %s "checking for simple visibility declarations... " >&6; } +if test ${gl_cv_cc_visibility+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then @@ -7386,24 +8045,25 @@ extern __attribute__((__visibility__("hidden"))) int hiddenvar; void dummyfunc (void) {} int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_cc_visibility=yes -else +else $as_nop gl_cv_cc_visibility=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 -$as_echo "$gl_cv_cc_visibility" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 @@ -7412,69 +8072,67 @@ $as_echo "$gl_cv_cc_visibility" >&6; } -cat >>confdefs.h <<_ACEOF -#define HAVE_VISIBILITY $HAVE_VISIBILITY -_ACEOF +printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 -$as_echo_n "checking for stdint.h... " >&6; } -if ${gl_cv_header_stdint_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 +printf %s "checking for stdint.h... " >&6; } +if test ${gl_cv_header_stdint_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_header_stdint_h=yes -else +else $as_nop gl_cv_header_stdint_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 -$as_echo "$gl_cv_header_stdint_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 +printf "%s\n" "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_STDINT_H_WITH_UINTMAX 1 -_ACEOF +printf "%s\n" "#define HAVE_STDINT_H_WITH_UINTMAX 1" >>confdefs.h fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +printf %s "checking for working alloca.h... " >&6; } +if test ${ac_cv_working_alloca_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; @@ -7482,52 +8140,52 @@ char *p = (char *) alloca (2 * sizeof (int)); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_working_alloca_h=yes -else +else $as_nop ac_cv_working_alloca_h=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +printf "%s\n" "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +printf %s "checking for alloca... " >&6; } +if test ${ac_cv_func_alloca_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test $ac_cv_working_alloca_h = yes; then + ac_cv_func_alloca_works=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER +#include +#include +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _MSC_VER # include # define alloca _alloca # else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif +# ifdef __cplusplus +extern "C" # endif +void *alloca (size_t); # endif #endif int -main () +main (void) { char *p = (char *) alloca (1); if (p) return 0; @@ -7535,20 +8193,22 @@ char *p = (char *) alloca (1); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_func_alloca_works=yes -else +else $as_nop ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +printf "%s\n" "$ac_cv_func_alloca_works" >&6; } +fi if test $ac_cv_func_alloca_works = yes; then -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions @@ -7558,58 +8218,19 @@ else ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -$as_echo "#define C_ALLOCA 1" >>confdefs.h +printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +printf %s "checking stack direction for C alloca... " >&6; } +if test ${ac_cv_c_stack_direction+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_c_stack_direction=0 -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -7630,9 +8251,10 @@ main (int argc, char **argv) return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_stack_direction=1 -else +else $as_nop ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7640,58 +8262,44 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +printf "%s\n" "$ac_cv_c_stack_direction" >&6; } +printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi - - - for ac_header in $ac_header_list -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - +ac_func= +for ac_item in $ac_func_c_list +do + if test $ac_func; then + ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func + if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then + echo "#define $ac_item 1" >> confdefs.h + fi + ac_func= + else + ac_func=$ac_item + fi done - - - - - - -for ac_func in getpagesize -do : - ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" -if test "x$ac_cv_func_getpagesize" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETPAGESIZE 1 -_ACEOF - -fi -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 -$as_echo_n "checking for working mmap... " >&6; } -if ${ac_cv_func_mmap_fixed_mapped+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_mmap_fixed_mapped=no -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +printf %s "checking for working mmap... " >&6; } +if test ${ac_cv_func_mmap_fixed_mapped+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + linux*) ac_cv_func_mmap_fixed_mapped=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_mmap_fixed_mapped=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -7723,10 +8331,6 @@ $ac_includes_default #include #include -#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H -char *malloc (); -#endif - /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE @@ -7760,7 +8364,7 @@ char *malloc (); #endif /* no HAVE_GETPAGESIZE */ int -main () +main (void) { char *data, *data2, *data3; const char *cdata2; @@ -7828,12 +8432,15 @@ main () if (*(data + i) != *(data3 + i)) return 14; close (fd); + free (data); + free (data3); return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_func_mmap_fixed_mapped=yes -else +else $as_nop ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7841,22 +8448,23 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 -$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then -$as_echo "#define HAVE_MMAP 1" >>confdefs.h +printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 -$as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; } -if ${gt_cv_int_divbyzero_sigfpe+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 +printf %s "checking whether integer division by zero raises SIGFPE... " >&6; } +if test ${gt_cv_int_divbyzero_sigfpe+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_cv_int_divbyzero_sigfpe= case "$host_os" in @@ -7871,7 +8479,8 @@ else ;; esac if test -z "$gt_cv_int_divbyzero_sigfpe"; then - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # Guess based on the CPU. case "$host_cpu" in @@ -7881,7 +8490,7 @@ else gt_cv_int_divbyzero_sigfpe="guessing no";; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7918,9 +8527,10 @@ int main () } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gt_cv_int_divbyzero_sigfpe=yes -else +else $as_nop gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7930,24 +8540,23 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 -$as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 +printf "%s\n" "$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac -cat >>confdefs.h <<_ACEOF -#define INTDIV0_RAISES_SIGFPE $value -_ACEOF +printf "%s\n" "#define INTDIV0_RAISES_SIGFPE $value" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 -$as_echo_n "checking for inttypes.h... " >&6; } -if ${gl_cv_header_inttypes_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 +printf %s "checking for inttypes.h... " >&6; } +if test ${gl_cv_header_inttypes_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7955,39 +8564,41 @@ else #include int -main () +main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_header_inttypes_h=yes -else +else $as_nop gl_cv_header_inttypes_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 -$as_echo "$gl_cv_header_inttypes_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 +printf "%s\n" "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_INTTYPES_H_WITH_UINTMAX 1 -_ACEOF +printf "%s\n" "#define HAVE_INTTYPES_H_WITH_UINTMAX 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 -$as_echo_n "checking for unsigned long long int... " >&6; } -if ${ac_cv_type_unsigned_long_long_int+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +printf %s "checking for unsigned long long int... " >&6; } +if test ${ac_cv_type_unsigned_long_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + case $ac_prog_cc_stdc in + no | c89) ;; + *) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many @@ -8005,7 +8616,7 @@ else ? 1 : -1)]; int i = 63; int -main () +main (void) { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; @@ -8019,20 +8630,21 @@ main () } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -else +else $as_nop ac_cv_type_unsigned_long_long_int=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext;; + esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 -$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then -$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h +printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi @@ -8045,35 +8657,29 @@ $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h && ac_type='unsigned long long' \ || ac_type='unsigned long' -cat >>confdefs.h <<_ACEOF -#define uintmax_t $ac_type -_ACEOF +printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h else -$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h fi - for ac_header in inttypes.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_INTTYPES_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes +then : + printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h fi -done - if test $ac_cv_header_inttypes_h = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 -$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } -if ${gt_cv_inttypes_pri_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 +printf %s "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } +if test ${gt_cv_inttypes_pri_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8084,29 +8690,28 @@ char *p = PRId32; #endif int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gt_cv_inttypes_pri_broken=no -else +else $as_nop gt_cv_inttypes_pri_broken=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 -$as_echo "$gt_cv_inttypes_pri_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 +printf "%s\n" "$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then -cat >>confdefs.h <<_ACEOF -#define PRI_MACROS_BROKEN 1 -_ACEOF +printf "%s\n" "#define PRI_MACROS_BROKEN 1" >>confdefs.h PRI_MACROS_BROKEN=1 else @@ -8120,9 +8725,10 @@ _ACEOF # Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then : +if test ${enable_threads+y} +then : enableval=$enable_threads; gl_use_threads=$enableval -else +else $as_nop if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else @@ -8157,7 +8763,7 @@ fi # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in - aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + aix* | freebsd* | midnightbsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi @@ -8184,9 +8790,10 @@ fi # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi @@ -8204,25 +8811,26 @@ if test "${PATH_SEPARATOR+set}" != set; then fi if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 -$as_echo_n "checking for ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 +printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else - if ${acl_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${acl_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH @@ -8291,7 +8899,8 @@ else #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in @@ -8300,7 +8909,7 @@ if ac_fn_c_try_compile "$LINENO"; then : esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8312,9 +8921,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in @@ -8323,7 +8933,7 @@ else esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac @@ -8332,18 +8942,19 @@ fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${acl_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${acl_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$acl_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 -$as_echo_n "checking for shared library run path origin... " >&6; } -if ${acl_cv_rpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +printf %s "checking for shared library run path origin... " >&6; } +if test ${acl_cv_rpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh @@ -8374,8 +8988,8 @@ else acl_cv_rpath=done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 -$as_echo "$acl_cv_rpath" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" @@ -8386,20 +9000,22 @@ $as_echo "$acl_cv_rpath" >&6; } acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. -if test "${enable_rpath+set}" = set; then : +if test ${enable_rpath+y} +then : enableval=$enable_rpath; : -else +else $as_nop enable_rpath=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 -$as_echo_n "checking 32-bit host C ABI... " >&6; } -if ${gl_cv_host_cpu_c_abi_32bit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 +printf %s "checking 32-bit host C ABI... " >&6; } +if test ${gl_cv_host_cpu_c_abi_32bit+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) @@ -8433,12 +9049,13 @@ else #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; arm* | aarch64 ) @@ -8457,12 +9074,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) @@ -8477,12 +9095,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ia64* ) @@ -8497,12 +9116,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=yes -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; mips* ) @@ -8517,12 +9137,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; powerpc* ) @@ -8541,12 +9162,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; rs6000 ) @@ -8565,12 +9187,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; s390* ) @@ -8585,12 +9208,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc | sparc64 ) @@ -8605,12 +9229,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_host_cpu_c_abi_32bit=no -else +else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) @@ -8620,8 +9245,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 -$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 +printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" @@ -8631,11 +9256,12 @@ $as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; } case "$host_os" in solaris*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 -$as_echo_n "checking for 64-bit host... " >&6; } -if ${gl_cv_solaris_64bit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +printf %s "checking for 64-bit host... " >&6; } +if test ${gl_cv_solaris_64bit+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 @@ -8645,23 +9271,25 @@ else #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_solaris_64bit=yes -else +else $as_nop gl_cv_solaris_64bit=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 -$as_echo "$gl_cv_solaris_64bit" >&6; };; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +printf "%s\n" "$gl_cv_solaris_64bit" >&6; };; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 -$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } -if ${acl_cv_libdirstems+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 +printf %s "checking for the common suffixes of directories in the library search path... " >&6; } +if test ${acl_cv_libdirstems+y} +then : + printf %s "(cached) " >&6 +else $as_nop acl_libdirstem=lib acl_libdirstem2= case "$host_os" in @@ -8708,8 +9336,8 @@ else acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 -$as_echo "$acl_cv_libdirstems" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 +printf "%s\n" "$acl_cv_libdirstems" >&6; } # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` @@ -8722,31 +9350,34 @@ $as_echo "$acl_cv_libdirstems" >&6; } LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 -$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } -if ${gl_cv_have_weak+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +printf %s "checking whether imported symbols can be declared weak... " >&6; } +if test ${gl_cv_have_weak+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int -main () +main (void) { xyzzy(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gl_cv_have_weak=maybe fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ @@ -8755,15 +9386,16 @@ rm -f core conftest.err conftest.$ac_objext \ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + $EGREP "Extensible Linking Format" >/dev/null 2>&1 +then : gl_cv_have_weak="guessing yes" -else +else $as_nop gl_cv_have_weak="guessing no" fi -rm -f conftest* +rm -rf conftest* -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8774,9 +9406,10 @@ int main () return (fputs == NULL); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gl_cv_have_weak=yes -else +else $as_nop gl_cv_have_weak=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -8789,19 +9422,19 @@ fi esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 -$as_echo "$gl_cv_have_weak" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +printf "%s\n" "$gl_cv_have_weak" >&6; } if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. - ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes +then : gl_have_pthread_h=yes -else +else $as_nop gl_have_pthread_h=no fi - if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) @@ -8824,7 +9457,7 @@ fi pthread_mutexattr_t ma; int -main () +main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); @@ -8832,12 +9465,13 @@ pthread_mutex_lock (&m); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test -n "$gl_have_pthread" && break @@ -8848,11 +9482,12 @@ rm -f core conftest.err conftest.$ac_objext \ if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } -if ${ac_cv_lib_pthread_pthread_kill+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8861,30 +9496,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_kill (); int -main () +main (void) { return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_pthread_pthread_kill=yes -else +else $as_nop ac_cv_lib_pthread_pthread_kill=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +then : LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a @@ -8895,7 +9529,7 @@ if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) -$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h +printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac @@ -8903,11 +9537,12 @@ fi elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } -if ${ac_cv_lib_pthread_pthread_kill+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +printf %s "checking for pthread_kill in -lpthread... " >&6; } +if test ${ac_cv_lib_pthread_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8916,30 +9551,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_kill (); int -main () +main (void) { return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_pthread_pthread_kill=yes -else +else $as_nop ac_cv_lib_pthread_pthread_kill=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes +then : gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread @@ -8947,11 +9581,12 @@ fi if test -z "$gl_have_pthread"; then # For FreeBSD 4. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 -$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } -if ${ac_cv_lib_c_r_pthread_kill+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +printf %s "checking for pthread_kill in -lc_r... " >&6; } +if test ${ac_cv_lib_c_r_pthread_kill+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8960,30 +9595,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_kill (); int -main () +main (void) { return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_c_r_pthread_kill=yes -else +else $as_nop ac_cv_lib_c_r_pthread_kill=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 -$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } -if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes +then : gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r @@ -8994,12 +9628,12 @@ fi if test -n "$gl_have_pthread"; then gl_threads_api=posix -$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h +printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then -$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h +printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= @@ -9020,17 +9654,18 @@ $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h #include int -main () +main (void) { thr_self(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gl_have_solaristhread=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then @@ -9040,11 +9675,11 @@ rm -f core conftest.err conftest.$ac_objext \ LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" -$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h +printf "%s\n" "#define USE_SOLARIS_THREADS 1" >>confdefs.h if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then -$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h +printf "%s\n" "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= @@ -9059,11 +9694,12 @@ $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 -$as_echo_n "checking how to link with libpth... " >&6; } -if ${ac_cv_libpth_libs+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 +printf %s "checking how to link with libpth... " >&6; } +if test ${ac_cv_libpth_libs+y} +then : + printf %s "(cached) " >&6 +else $as_nop @@ -9086,7 +9722,8 @@ else # Check whether --with-libpth-prefix was given. -if test "${with_libpth_prefix+set}" = set; then : +if test ${with_libpth_prefix+y} +then : withval=$with_libpth_prefix; if test "X$withval" = "Xno"; then use_additional=no @@ -9530,8 +10167,8 @@ fi ac_cv_libpth_prefix="$LIBPTH_PREFIX" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 -$as_echo "$ac_cv_libpth_libs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 +printf "%s\n" "$ac_cv_libpth_libs" >&6; } LIBPTH="$ac_cv_libpth_libs" LTLIBPTH="$ac_cv_libpth_ltlibs" INCPTH="$ac_cv_libpth_cppflags" @@ -9573,17 +10210,18 @@ $as_echo "$ac_cv_libpth_libs" >&6; } /* end confdefs.h. */ #include int -main () +main (void) { pth_self(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gl_have_pth=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then @@ -9593,12 +10231,12 @@ rm -f core conftest.err conftest.$ac_objext \ LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" -$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h +printf "%s\n" "#define USE_PTH_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then -$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h +printf "%s\n" "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= @@ -9618,17 +10256,17 @@ $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h }; then gl_threads_api=windows -$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h +printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 -$as_echo_n "checking for multithread API to use... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 -$as_echo "$gl_threads_api" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +printf %s "checking for multithread API to use... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +printf "%s\n" "$gl_threads_api" >&6; } @@ -9646,26 +10284,29 @@ $as_echo "$gl_threads_api" >&6; } has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " -if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : +if test "x$ac_cv_type_pthread_rwlock_t" = xyes +then : has_rwlock=true -$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 -$as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } -if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 +printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } +if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9781,9 +10422,10 @@ main () } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes -else +else $as_nop gl_cv_pthread_rwlock_rdlock_prefer_writer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -9793,12 +10435,12 @@ fi LIBS="$save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 -$as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 +printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) -$as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac @@ -9810,7 +10452,7 @@ $as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h #include int -main () +main (void) { #if __FreeBSD__ == 4 @@ -9827,15 +10469,96 @@ return !x; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + @@ -9861,7 +10584,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Check whether --with-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then : +if test ${with_libiconv_prefix+y} +then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no @@ -10330,11 +11054,12 @@ fi done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 -$as_echo_n "checking for iconv... " >&6; } -if ${am_cv_func_iconv+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +printf %s "checking for iconv... " >&6; } +if test ${am_cv_func_iconv+y} +then : + printf %s "(cached) " >&6 +else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no @@ -10345,7 +11070,7 @@ else #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -10354,10 +11079,11 @@ iconv_t cd = iconv_open("",""); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : am_cv_func_iconv=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" @@ -10369,7 +11095,7 @@ rm -f core conftest.err conftest.$ac_objext \ #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -10378,24 +11104,26 @@ iconv_t cd = iconv_open("",""); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 -$as_echo "$am_cv_func_iconv" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 -$as_echo_n "checking for working iconv... " >&6; } -if ${am_cv_func_iconv_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +printf %s "checking for working iconv... " >&6; } +if test ${am_cv_func_iconv_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then @@ -10403,12 +11131,13 @@ else fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10420,7 +11149,7 @@ else #endif int -main () +main (void) { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful @@ -10532,7 +11261,8 @@ int result = 0; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -10544,8 +11274,8 @@ fi LIBS="$am_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 -$as_echo "$am_cv_func_iconv_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; @@ -10555,14 +11285,14 @@ $as_echo "$am_cv_func_iconv_works" >&6; } fi if test "$am_func_iconv" = yes; then -$as_echo "#define HAVE_ICONV 1" >>confdefs.h +printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 -$as_echo_n "checking how to link with libiconv... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 -$as_echo "$LIBICONV" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +printf %s "checking how to link with libiconv... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= @@ -10572,11 +11302,12 @@ $as_echo "$LIBICONV" >&6; } if test "$am_cv_func_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 -$as_echo_n "checking for iconv declaration... " >&6; } - if ${am_cv_proto_iconv+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +printf %s "checking for iconv declaration... " >&6; } + if test ${am_cv_proto_iconv+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10594,34 +11325,33 @@ size_t iconv(); #endif int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : am_cv_proto_iconv_arg1="" -else +else $as_nop am_cv_proto_iconv_arg1="const" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 -$as_echo " +printf "%s\n" " $am_cv_proto_iconv" >&6; } else am_cv_proto_iconv_arg1="" fi -cat >>confdefs.h <<_ACEOF -#define ICONV_CONST $am_cv_proto_iconv_arg1 -_ACEOF +printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h @@ -10632,83 +11362,177 @@ _ACEOF /* end confdefs.h. */ int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; } int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h +printf "%s\n" "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default" +if test "x$ac_cv_header_argz_h" = xyes +then : + printf "%s\n" "#define HAVE_ARGZ_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes +then : + printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes +then : + printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi -done - - for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \ - stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ - argz_next __fsetlocking -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" +if test "x$ac_cv_func_getcwd" = xyes +then : + printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h fi -done - - - for ac_func in localeconv -do : - ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv" -if test "x$ac_cv_func_localeconv" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LOCALECONV 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "getegid" "ac_cv_func_getegid" +if test "x$ac_cv_func_getegid" = xyes +then : + printf "%s\n" "#define HAVE_GETEGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid" +if test "x$ac_cv_func_geteuid" = xyes +then : + printf "%s\n" "#define HAVE_GETEUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgid" "ac_cv_func_getgid" +if test "x$ac_cv_func_getgid" = xyes +then : + printf "%s\n" "#define HAVE_GETGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getuid" "ac_cv_func_getuid" +if test "x$ac_cv_func_getuid" = xyes +then : + printf "%s\n" "#define HAVE_GETUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" +if test "x$ac_cv_func_mempcpy" = xyes +then : + printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" +if test "x$ac_cv_func_munmap" = xyes +then : + printf "%s\n" "#define HAVE_MUNMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy" +if test "x$ac_cv_func_stpcpy" = xyes +then : + printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = xyes +then : + printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" +if test "x$ac_cv_func_strdup" = xyes +then : + printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" +if test "x$ac_cv_func_strtoul" = xyes +then : + printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" +if test "x$ac_cv_func_tsearch" = xyes +then : + printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "argz_count" "ac_cv_func_argz_count" +if test "x$ac_cv_func_argz_count" = xyes +then : + printf "%s\n" "#define HAVE_ARGZ_COUNT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "argz_stringify" "ac_cv_func_argz_stringify" +if test "x$ac_cv_func_argz_stringify" = xyes +then : + printf "%s\n" "#define HAVE_ARGZ_STRINGIFY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "argz_next" "ac_cv_func_argz_next" +if test "x$ac_cv_func_argz_next" = xyes +then : + printf "%s\n" "#define HAVE_ARGZ_NEXT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "__fsetlocking" "ac_cv_func___fsetlocking" +if test "x$ac_cv_func___fsetlocking" = xyes +then : + printf "%s\n" "#define HAVE___FSETLOCKING 1" >>confdefs.h fi -done - ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include -" -if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : + ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv" +if test "x$ac_cv_func_localeconv" = xyes +then : + printf "%s\n" "#define HAVE_LOCALECONV 1" >>confdefs.h + +fi + + + ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_feof_unlocked" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include -" -if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : +printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fgets_unlocked" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h @@ -10717,11 +11541,12 @@ _ACEOF do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_INTLBISON+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_INTLBISON+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else @@ -10729,11 +11554,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_INTLBISON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -10744,11 +11573,11 @@ fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 -$as_echo "$INTLBISON" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 +printf "%s\n" "$INTLBISON" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -10758,8 +11587,8 @@ done if test -z "$INTLBISON"; then ac_verc_fail=yes else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 -$as_echo_n "checking version of bison... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 +printf %s "checking version of bison... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -10767,8 +11596,8 @@ $as_echo_n "checking version of bison... " >&6; } ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 -$as_echo "$ac_prog_version" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 +printf "%s\n" "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: @@ -10776,103 +11605,111 @@ $as_echo "$ac_prog_version" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 -$as_echo_n "checking for long long int... " >&6; } -if ${ac_cv_type_long_long_int+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +printf %s "checking for long long int... " >&6; } +if test ${ac_cv_type_long_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - if test "$cross_compiling" = yes; then : + case $ac_prog_cc_stdc in + no | c89) ;; + *) + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + if test "$cross_compiling" = yes +then : : -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include - #ifndef LLONG_MAX - # define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - # define LLONG_MAX (HALF - 1 + HALF) - #endif + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif int -main () +main (void) { long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : -else +else $as_nop ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi - fi + fi;; + esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 -$as_echo "$ac_cv_type_long_long_int" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +printf "%s\n" "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then -$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h +printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 -$as_echo_n "checking for wchar_t... " >&6; } -if ${gt_cv_c_wchar_t+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +printf %s "checking for wchar_t... " >&6; } +if test ${gt_cv_c_wchar_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gt_cv_c_wchar_t=yes -else +else $as_nop gt_cv_c_wchar_t=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 -$as_echo "$gt_cv_c_wchar_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +printf "%s\n" "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then -$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 -$as_echo_n "checking for wint_t... " >&6; } -if ${gt_cv_c_wint_t+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +printf %s "checking for wint_t... " >&6; } +if test ${gt_cv_c_wint_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10886,32 +11723,34 @@ else #include wint_t foo = (wchar_t)'\0'; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gt_cv_c_wint_t=yes -else +else $as_nop gt_cv_c_wint_t=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 -$as_echo "$gt_cv_c_wint_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +printf "%s\n" "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then -$as_echo "#define HAVE_WINT_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 -$as_echo_n "checking whether wint_t is too small... " >&6; } -if ${gl_cv_type_wint_t_too_small+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 +printf %s "checking whether wint_t is too small... " >&6; } +if test ${gl_cv_type_wint_t_too_small+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10928,22 +11767,23 @@ else int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gl_cv_type_wint_t_too_small=no -else +else $as_nop gl_cv_type_wint_t_too_small=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 -$as_echo "$gl_cv_type_wint_t_too_small" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 +printf "%s\n" "$gl_cv_type_wint_t_too_small" >&6; } if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else @@ -10957,11 +11797,12 @@ $as_echo "$gl_cv_type_wint_t_too_small" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 -$as_echo_n "checking for intmax_t... " >&6; } -if ${gt_cv_c_intmax_t+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 +printf %s "checking for intmax_t... " >&6; } +if test ${gt_cv_c_intmax_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10975,7 +11816,7 @@ else #endif int -main () +main (void) { intmax_t x = -1; return !x; @@ -10983,30 +11824,33 @@ intmax_t x = -1; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gt_cv_c_intmax_t=yes -else +else $as_nop gt_cv_c_intmax_t=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 -$as_echo "$gt_cv_c_intmax_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 +printf "%s\n" "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then -$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 -$as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; } -if ${gt_cv_func_printf_posix+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 +printf %s "checking whether printf() supports POSIX/XSI format strings... " >&6; } +if test ${gt_cv_func_printf_posix+y} +then : + printf %s "(cached) " >&6 +else $as_nop - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11017,15 +11861,16 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "notposix" >/dev/null 2>&1; then : + $EGREP "notposix" >/dev/null 2>&1 +then : gt_cv_func_printf_posix="guessing no" -else +else $as_nop gt_cv_func_printf_posix="guessing yes" fi -rm -f conftest* +rm -rf conftest* -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11041,9 +11886,10 @@ int main () return (strcmp (buf, "55 33") != 0); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gt_cv_func_printf_posix=yes -else +else $as_nop gt_cv_func_printf_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -11052,22 +11898,23 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 -$as_echo "$gt_cv_func_printf_posix" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 +printf "%s\n" "$gt_cv_func_printf_posix" >&6; } case $gt_cv_func_printf_posix in *yes) -$as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h +printf "%s\n" "#define HAVE_POSIX_PRINTF 1" >>confdefs.h ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 -$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } -if ${ac_cv_gnu_library_2_1+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 +printf %s "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } +if test ${ac_cv_gnu_library_2_1+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11083,40 +11930,37 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky" >/dev/null 2>&1; then : + $EGREP "Lucky" >/dev/null 2>&1 +then : ac_cv_gnu_library_2_1=yes -else +else $as_nop ac_cv_gnu_library_2_1=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 -$as_echo "$ac_cv_gnu_library_2_1" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 +printf "%s\n" "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" - for ac_header in stdint.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDINT_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes +then : + printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 -$as_echo_n "checking for SIZE_MAX... " >&6; } -if ${gl_cv_size_max+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 +printf %s "checking for SIZE_MAX... " >&6; } +if test ${gl_cv_size_max+y} +then : + printf %s "(cached) " >&6 +else $as_nop gl_cv_size_max= cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11132,22 +11976,25 @@ Found it _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Found it" >/dev/null 2>&1; then : + $EGREP "Found it" >/dev/null 2>&1 +then : gl_cv_size_max=yes fi -rm -f conftest* +rm -rf conftest* if test -z "$gl_cv_size_max"; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include -#include "; then : +#include " +then : -else +else $as_nop size_t_bits_minus_1= fi - if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include " +then : -else +else $as_nop fits_in_uint= fi @@ -11160,17 +12007,18 @@ fi extern unsigned long foo; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : fits_in_uint=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" @@ -11183,46 +12031,24 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 -$as_echo "$gl_cv_size_max" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 +printf "%s\n" "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then -cat >>confdefs.h <<_ACEOF -#define SIZE_MAX $gl_cv_size_max -_ACEOF +printf "%s\n" "#define SIZE_MAX $gl_cv_size_max" >>confdefs.h fi - for ac_header in stdint.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDINT_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes +then : + printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi -done - - - - - - for ac_func in $ac_func_list -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done @@ -11230,20 +12056,21 @@ done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 -$as_echo_n "checking for working fcntl.h... " >&6; } -if ${gl_cv_header_working_fcntl_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 +printf %s "checking for working fcntl.h... " >&6; } +if test ${gl_cv_header_working_fcntl_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11269,7 +12096,7 @@ else }; int -main () +main (void) { int result = !constants; @@ -11339,9 +12166,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gl_cv_header_working_fcntl_h=yes -else +else $as_nop case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( @@ -11355,17 +12183,15 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 -$as_echo "$gl_cv_header_working_fcntl_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 +printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac -cat >>confdefs.h <<_ACEOF -#define HAVE_WORKING_O_NOATIME $ac_val -_ACEOF +printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h case $gl_cv_header_working_fcntl_h in #( @@ -11373,11 +12199,7 @@ _ACEOF *) ac_val=1;; esac -cat >>confdefs.h <<_ACEOF -#define HAVE_WORKING_O_NOFOLLOW $ac_val -_ACEOF - - +printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h @@ -11394,19 +12216,21 @@ _ACEOF if test $ac_cv_func_uselocale = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5 -$as_echo_n "checking whether uselocale works... " >&6; } -if ${gt_cv_func_uselocale_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5 +printf %s "checking whether uselocale works... " >&6; } +if test ${gt_cv_func_uselocale_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : # Guess no on AIX, yes otherwise. case "$host_os" in aix*) gt_cv_func_uselocale_works="guessing no" ;; *) gt_cv_func_uselocale_works="guessing yes" ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11421,9 +12245,10 @@ int main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gt_cv_func_uselocale_works=yes -else +else $as_nop gt_cv_func_uselocale_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -11432,15 +12257,15 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5 -$as_echo "$gt_cv_func_uselocale_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5 +printf "%s\n" "$gt_cv_func_uselocale_works" >&6; } else gt_cv_func_uselocale_works=no fi case "$gt_cv_func_uselocale_works" in *yes) -$as_echo "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h +printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h ;; esac @@ -11449,18 +12274,20 @@ $as_echo "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h case "$gt_cv_func_uselocale_works" in *yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5 -$as_echo_n "checking for fake locale system (OpenBSD)... " >&6; } -if ${gt_cv_locale_fake+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5 +printf %s "checking for fake locale system (OpenBSD)... " >&6; } +if test ${gt_cv_locale_fake+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : case "$host_os" in openbsd*) gt_cv_locale_fake="guessing yes" ;; *) gt_cv_locale_fake="guessing no" ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11478,9 +12305,10 @@ int main () return !(loc1 == loc2); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : gt_cv_locale_fake=yes -else +else $as_nop gt_cv_locale_fake=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -11489,26 +12317,27 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5 -$as_echo "$gt_cv_locale_fake" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5 +printf "%s\n" "$gt_cv_locale_fake" >&6; } ;; *) gt_cv_locale_fake=no ;; esac case "$gt_cv_locale_fake" in *yes) -$as_echo "#define HAVE_FAKE_LOCALES 1" >>confdefs.h +printf "%s\n" "#define HAVE_FAKE_LOCALES 1" >>confdefs.h ;; esac case "$gt_cv_func_uselocale_works" in *yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5 -$as_echo_n "checking for Solaris 11.4 locale system... " >&6; } -if ${gt_cv_locale_solaris114+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5 +printf %s "checking for Solaris 11.4 locale system... " >&6; } +if test ${gt_cv_locale_solaris114+y} +then : + printf %s "(cached) " >&6 +else $as_nop case "$host_os" in solaris*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11519,47 +12348,44 @@ else locale_t y; int -main () +main (void) { *y = x; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : gt_cv_locale_solaris114=yes -else +else $as_nop gt_cv_locale_solaris114=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gt_cv_locale_solaris114=no ;; esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5 -$as_echo "$gt_cv_locale_solaris114" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5 +printf "%s\n" "$gt_cv_locale_solaris114" >&6; } ;; *) gt_cv_locale_solaris114=no ;; esac if test $gt_cv_locale_solaris114 = yes; then -$as_echo "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h +printf "%s\n" "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h fi case "$gt_cv_func_uselocale_works" in *yes) - for ac_func in getlocalename_l -do : - ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l" -if test "x$ac_cv_func_getlocalename_l" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETLOCALENAME_L 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l" +if test "x$ac_cv_func_getlocalename_l" = xyes +then : + printf "%s\n" "#define HAVE_GETLOCALENAME_L 1" >>confdefs.h fi -done ;; esac @@ -11568,111 +12394,117 @@ done if false; then gt_nameless_locales=yes -$as_echo "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h +printf "%s\n" "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 -$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } -if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +printf %s "checking for CFPreferencesCopyAppValue... " >&6; } +if test ${gt_cv_func_CFPreferencesCopyAppValue+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFPreferencesCopyAppValue=yes -else +else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } -if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +printf %s "checking for CFLocaleCopyCurrent... " >&6; } +if test ${gt_cv_func_CFLocaleCopyCurrent+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFLocaleCopyCurrent(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFLocaleCopyCurrent=yes -else +else $as_nop gt_cv_func_CFLocaleCopyCurrent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then -$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 -$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; } -if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 +printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } +if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes -else +else $as_nop gt_cv_func_CFLocaleCopyPreferredLanguages=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 +printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then -$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= @@ -11689,11 +12521,12 @@ $as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5 -$as_echo_n "checking for flexible array members... " >&6; } -if ${ac_cv_c_flexmember+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5 +printf %s "checking for flexible array members... " >&6; } +if test ${ac_cv_c_flexmember+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -11701,32 +12534,33 @@ else #include struct s { int n; double d[]; }; int -main () +main (void) { int m = getchar (); - struct s *p = malloc (offsetof (struct s, d) - + m * sizeof (double)); + struct s *p = (struct s *) malloc (offsetof (struct s, d) + + m * sizeof (double)); p->d[0] = 0.0; return p->d != (double *) NULL; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_flexmember=yes -else +else $as_nop ac_cv_c_flexmember=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 -$as_echo "$ac_cv_c_flexmember" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 +printf "%s\n" "$ac_cv_c_flexmember" >&6; } if test $ac_cv_c_flexmember = yes; then -$as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h +printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h else - $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h + printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h fi @@ -11740,11 +12574,12 @@ $as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -11752,11 +12587,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11767,11 +12606,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -11780,11 +12619,12 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -11792,11 +12632,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -11807,11 +12651,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AR" = x; then @@ -11819,8 +12663,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -11844,77 +12688,150 @@ fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -else +else $as_nop -$as_echo "#define ptrdiff_t long" >>confdefs.h +printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi - for ac_header in features.h stddef.h stdlib.h string.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "features.h" "ac_cv_header_features_h" "$ac_includes_default" +if test "x$ac_cv_header_features_h" = xyes +then : + printf "%s\n" "#define HAVE_FEATURES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" +if test "x$ac_cv_header_stddef_h" = xyes +then : + printf "%s\n" "#define HAVE_STDDEF_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes +then : + printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = xyes +then : + printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi -done - - for ac_func in asprintf fwprintf newlocale putenv setenv setlocale \ - snprintf strnlen uselocale wcslen wcsnlen mbrtowc wcrtomb -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" +if test "x$ac_cv_func_asprintf" = xyes +then : + printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fwprintf" "ac_cv_func_fwprintf" +if test "x$ac_cv_func_fwprintf" = xyes +then : + printf "%s\n" "#define HAVE_FWPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" +if test "x$ac_cv_func_newlocale" = xyes +then : + printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" +if test "x$ac_cv_func_putenv" = xyes +then : + printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" +if test "x$ac_cv_func_setenv" = xyes +then : + printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" +if test "x$ac_cv_func_setlocale" = xyes +then : + printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" +if test "x$ac_cv_func_snprintf" = xyes +then : + printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" +if test "x$ac_cv_func_strnlen" = xyes +then : + printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" +if test "x$ac_cv_func_uselocale" = xyes +then : + printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen" +if test "x$ac_cv_func_wcslen" = xyes +then : + printf "%s\n" "#define HAVE_WCSLEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcsnlen" "ac_cv_func_wcsnlen" +if test "x$ac_cv_func_wcsnlen" = xyes +then : + printf "%s\n" "#define HAVE_WCSNLEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc" +if test "x$ac_cv_func_mbrtowc" = xyes +then : + printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" +if test "x$ac_cv_func_wcrtomb" = xyes +then : + printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h fi -done - ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include -" -if test "x$ac_cv_have_decl__snprintf" = xyes; then : + ac_fn_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl__snprintf" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL__SNPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include -" -if test "x$ac_cv_have_decl__snwprintf" = xyes; then : +printf "%s\n" "#define HAVE_DECL__SNPRINTF $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl__snwprintf" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL__SNWPRINTF $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL__SNWPRINTF $ac_have_decl" >>confdefs.h - ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include -" -if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h case $gt_cv_func_printf_posix in @@ -11948,69 +12865,73 @@ _ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${am_cv_langinfo_codeset+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +printf %s "checking for nl_langinfo and CODESET... " >&6; } +if test ${am_cv_langinfo_codeset+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : am_cv_langinfo_codeset=yes -else +else $as_nop am_cv_langinfo_codeset=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 -$as_echo "$am_cv_langinfo_codeset" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +printf "%s\n" "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then -$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h +printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 -$as_echo_n "checking for LC_MESSAGES... " >&6; } -if ${gt_cv_val_LC_MESSAGES+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 +printf %s "checking for LC_MESSAGES... " >&6; } +if test ${gt_cv_val_LC_MESSAGES+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { return LC_MESSAGES ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_val_LC_MESSAGES=yes -else +else $as_nop gt_cv_val_LC_MESSAGES=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 -$as_echo "$gt_cv_val_LC_MESSAGES" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 +printf "%s\n" "$gt_cv_val_LC_MESSAGES" >&6; } if test $gt_cv_val_LC_MESSAGES = yes; then -$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h +printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi @@ -12043,11 +12964,12 @@ $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_WINDRES+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_WINDRES+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else @@ -12055,11 +12977,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -12070,11 +12996,11 @@ fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 -$as_echo "$WINDRES" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +printf "%s\n" "$WINDRES" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -12083,11 +13009,12 @@ if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_WINDRES+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else @@ -12095,11 +13022,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -12110,11 +13041,11 @@ fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 -$as_echo "$ac_ct_WINDRES" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 +printf "%s\n" "$ac_ct_WINDRES" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then @@ -12122,8 +13053,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES @@ -12158,107 +13089,112 @@ fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 -$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } -if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +printf %s "checking for CFPreferencesCopyAppValue... " >&6; } +if test ${gt_cv_func_CFPreferencesCopyAppValue+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFPreferencesCopyAppValue=yes -else +else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } -if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +printf %s "checking for CFLocaleCopyCurrent... " >&6; } +if test ${gt_cv_func_CFLocaleCopyCurrent+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFLocaleCopyCurrent(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFLocaleCopyCurrent=yes -else +else $as_nop gt_cv_func_CFLocaleCopyCurrent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then -$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 -$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; } -if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 +printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } +if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes -else +else $as_nop gt_cv_func_CFLocaleCopyPreferredLanguages=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 +printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then -$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h +printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= @@ -12291,18 +13227,19 @@ $as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 -$as_echo_n "checking whether included gettext is requested... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 +printf %s "checking whether included gettext is requested... " >&6; } # Check whether --with-included-gettext was given. -if test "${with_included_gettext+set}" = set; then : +if test ${with_included_gettext+y} +then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval -else +else $as_nop nls_cv_force_use_gnu_gettext=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 -$as_echo "$nls_cv_force_use_gnu_gettext" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 +printf "%s\n" "$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then @@ -12324,11 +13261,12 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; gt_expression_test_code= fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 -$as_echo_n "checking for GNU gettext in libc... " >&6; } -if eval \${$gt_func_gnugettext_libc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +printf %s "checking for GNU gettext in libc... " >&6; } +if eval test \${$gt_func_gnugettext_libc+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12343,7 +13281,7 @@ extern int *_nl_domain_bindings; $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12353,17 +13291,18 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$gt_func_gnugettext_libc=yes" -else +else $as_nop eval "$gt_func_gnugettext_libc=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then @@ -12388,7 +13327,8 @@ $as_echo "$ac_res" >&6; } # Check whether --with-libintl-prefix was given. -if test "${with_libintl_prefix+set}" = set; then : +if test ${with_libintl_prefix+y} +then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no @@ -12826,11 +13766,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 -$as_echo_n "checking for GNU gettext in libintl... " >&6; } -if eval \${$gt_func_gnugettext_libintl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +printf %s "checking for GNU gettext in libintl... " >&6; } +if eval test \${$gt_func_gnugettext_libintl+y} +then : + printf %s "(cached) " >&6 +else $as_nop gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" @@ -12853,7 +13794,7 @@ const char *_nl_expand_alias (const char *); $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12863,12 +13804,13 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$gt_func_gnugettext_libintl=yes" -else +else $as_nop eval "$gt_func_gnugettext_libintl=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" @@ -12890,7 +13832,7 @@ const char *_nl_expand_alias (const char *); $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12900,21 +13842,22 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ @@ -12960,20 +13903,20 @@ $as_echo "$ac_res" >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then -$as_echo "#define ENABLE_NLS 1" >>confdefs.h +printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 -$as_echo_n "checking whether to use NLS... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +printf %s "checking whether to use NLS... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 -$as_echo_n "checking where the gettext function comes from... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +printf %s "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" @@ -12983,18 +13926,18 @@ $as_echo_n "checking where the gettext function comes from... " >&6; } else gt_source="included intl directory" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 -$as_echo "$gt_source" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +printf "%s\n" "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 -$as_echo_n "checking how to link with libintl... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 -$as_echo "$LIBINTL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +printf %s "checking how to link with libintl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +printf "%s\n" "$LIBINTL" >&6; } for element in $INCINTL; do haveit= @@ -13021,10 +13964,10 @@ $as_echo "$LIBINTL" >&6; } fi -$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h -$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h +printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi @@ -13072,19 +14015,20 @@ $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if eval \${$as_ac_Header+:} false; then : - $as_echo_n "(cached) " >&6 -else + as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +printf %s "checking for $ac_hdr that defines DIR... " >&6; } +if eval test \${$as_ac_Header+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int -main () +main (void) { if ((DIR *) 0) return 0; @@ -13092,19 +14036,21 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$as_ac_Header=yes" -else +else $as_nop eval "$as_ac_Header=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -13113,11 +14059,12 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +printf %s "checking for library containing opendir... " >&6; } +if test ${ac_cv_search_opendir+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13125,56 +14072,59 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char opendir (); int -main () +main (void) { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' dir; do +for ac_lib in '' dir +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : + if test ${ac_cv_search_opendir+y} +then : break fi done -if ${ac_cv_search_opendir+:} false; then : +if test ${ac_cv_search_opendir+y} +then : -else +else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +printf %s "checking for library containing opendir... " >&6; } +if test ${ac_cv_search_opendir+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13182,197 +14132,316 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char opendir (); int -main () +main (void) { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' x; do +for ac_lib in '' x +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : + if test ${ac_cv_search_opendir+y} +then : break fi done -if ${ac_cv_search_opendir+:} false; then : +if test ${ac_cv_search_opendir+y} +then : -else +else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if ${ac_cv_header_time+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then +ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes +then : -$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h +printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 -$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } -if ${ac_cv_header_sys_types_h_makedev+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -return makedev(0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_header_sys_types_h_makedev=yes -else - ac_cv_header_sys_types_h_makedev=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes +then : + +printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 -$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } - -if test $ac_cv_header_sys_types_h_makedev = no; then -ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : - -$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi - if test $ac_cv_header_sys_mkdev_h = no; then - ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : - -$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes +then : + printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h fi - fi + +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + fi +ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes +then : + printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" +if test "x$ac_cv_header_stdarg_h" = xyes +then : + printf "%s\n" "#define HAVE_STDARG_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes +then : + printf "%s\n" "#define HAVE_VARARGS_H 1" >>confdefs.h - for ac_header in inttypes.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_INTTYPES_H 1 -_ACEOF +fi +ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes +then : + printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = xyes +then : + printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default" +if test "x$ac_cv_header_memory_h" = xyes +then : + printf "%s\n" "#define HAVE_MEMORY_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" +if test "x$ac_cv_header_locale_h" = xyes +then : + printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "termcap.h" "ac_cv_header_termcap_h" "$ac_includes_default" +if test "x$ac_cv_header_termcap_h" = xyes +then : + printf "%s\n" "#define HAVE_TERMCAP_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "termio.h" "ac_cv_header_termio_h" "$ac_includes_default" +if test "x$ac_cv_header_termio_h" = xyes +then : + printf "%s\n" "#define HAVE_TERMIO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" +if test "x$ac_cv_header_termios_h" = xyes +then : + printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default" +if test "x$ac_cv_header_stdbool_h" = xyes +then : + printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" +if test "x$ac_cv_header_stddef_h" = xyes +then : + printf "%s\n" "#define HAVE_STDDEF_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes +then : + printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default" +if test "x$ac_cv_header_pwd_h" = xyes +then : + printf "%s\n" "#define HAVE_PWD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" +if test "x$ac_cv_header_grp_h" = xyes +then : + printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" +if test "x$ac_cv_header_strings_h" = xyes +then : + printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default" +if test "x$ac_cv_header_regex_h" = xyes +then : + printf "%s\n" "#define HAVE_REGEX_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" +if test "x$ac_cv_header_syslog_h" = xyes +then : + printf "%s\n" "#define HAVE_SYSLOG_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "ulimit.h" "ac_cv_header_ulimit_h" "$ac_includes_default" +if test "x$ac_cv_header_ulimit_h" = xyes +then : + printf "%s\n" "#define HAVE_ULIMIT_H 1" >>confdefs.h fi -done +ac_fn_c_check_header_compile "$LINENO" "sys/pte.h" "ac_cv_header_sys_pte_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_pte_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PTE_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "sys/stream.h" "ac_cv_header_sys_stream_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_stream_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_STREAM_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_select_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h -for ac_header in unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \ - memory.h locale.h termcap.h termio.h termios.h dlfcn.h \ - stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \ - regex.h syslog.h ulimit.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_file_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_random_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_stat_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_times_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_wait_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi -done - -for ac_header in sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \ - sys/mman.h sys/param.h sys/random.h sys/socket.h sys/stat.h \ - sys/time.h sys/times.h sys/types.h sys/wait.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi - -done - -for ac_header in netinet/in.h arpa/inet.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi -done - ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" " #if HAVE_SYS_STREAM_H @@ -13380,37 +14449,38 @@ ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" " #endif " -if test "x$ac_cv_header_sys_ptem_h" = xyes; then : +if test "x$ac_cv_header_sys_ptem_h" = xyes +then : fi - ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" " #if HAVE_SYS_TIME_H # include #endif " -if test "x$ac_cv_header_sys_resource_h" = xyes; then : - $as_echo "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h +if test "x$ac_cv_header_sys_resource_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h fi - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +printf %s "checking for working alloca.h... " >&6; } +if test ${ac_cv_working_alloca_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; @@ -13418,52 +14488,52 @@ char *p = (char *) alloca (2 * sizeof (int)); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_working_alloca_h=yes -else +else $as_nop ac_cv_working_alloca_h=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +printf "%s\n" "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +printf %s "checking for alloca... " >&6; } +if test ${ac_cv_func_alloca_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test $ac_cv_working_alloca_h = yes; then + ac_cv_func_alloca_works=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER +#include +#include +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _MSC_VER # include # define alloca _alloca # else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif +# ifdef __cplusplus +extern "C" # endif +void *alloca (size_t); # endif #endif int -main () +main (void) { char *p = (char *) alloca (1); if (p) return 0; @@ -13471,20 +14541,22 @@ char *p = (char *) alloca (1); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_func_alloca_works=yes -else +else $as_nop ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +printf "%s\n" "$ac_cv_func_alloca_works" >&6; } +fi if test $ac_cv_func_alloca_works = yes; then -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h +printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions @@ -13494,58 +14566,19 @@ else ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -$as_echo "#define C_ALLOCA 1" >>confdefs.h +printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +printf %s "checking stack direction for C alloca... " >&6; } +if test ${ac_cv_c_stack_direction+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_c_stack_direction=0 -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -13566,9 +14599,10 @@ main (int argc, char **argv) return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_stack_direction=1 -else +else $as_nop ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13576,72 +14610,67 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +printf "%s\n" "$ac_cv_c_stack_direction" >&6; } +printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -$as_echo_n "checking for uid_t in sys/types.h... " >&6; } -if ${ac_cv_type_uid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +printf %s "checking for uid_t in sys/types.h... " >&6; } +if test ${ac_cv_type_uid_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1; then : + $EGREP "uid_t" >/dev/null 2>&1 +then : ac_cv_type_uid_t=yes -else +else $as_nop ac_cv_type_uid_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -$as_echo "$ac_cv_type_uid_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +printf "%s\n" "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then -$as_echo "#define uid_t int" >>confdefs.h +printf "%s\n" "#define uid_t int" >>confdefs.h -$as_echo "#define gid_t int" >>confdefs.h +printf "%s\n" "#define gid_t int" >>confdefs.h fi -for ac_header in unistd.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_UNISTD_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 -$as_echo_n "checking for working chown... " >&6; } -if ${ac_cv_func_chown_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_chown_works=no -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 +printf %s "checking for working chown... " >&6; } +if test ${ac_cv_func_chown_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on glibc systems. + *-gnu*) ac_cv_func_chown_works=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_chown_works=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include int -main () +main (void) { char *f = "conftest.chown"; struct stat before, after; @@ -13660,9 +14689,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_func_chown_works=yes -else +else $as_nop ac_cv_func_chown_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13672,86 +14702,82 @@ fi rm -f conftest.chown fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 -$as_echo "$ac_cv_func_chown_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 +printf "%s\n" "$ac_cv_func_chown_works" >&6; } if test $ac_cv_func_chown_works = yes; then -$as_echo "#define HAVE_CHOWN 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5 -$as_echo_n "checking whether getpgrp requires zero arguments... " >&6; } -if ${ac_cv_func_getpgrp_void+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5 +printf %s "checking whether getpgrp requires zero arguments... " >&6; } +if test ${ac_cv_func_getpgrp_void+y} +then : + printf %s "(cached) " >&6 +else $as_nop # Use it with a single arg. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { getpgrp (0); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_getpgrp_void=no -else +else $as_nop ac_cv_func_getpgrp_void=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5 -$as_echo "$ac_cv_func_getpgrp_void" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5 +printf "%s\n" "$ac_cv_func_getpgrp_void" >&6; } if test $ac_cv_func_getpgrp_void = yes; then -$as_echo "#define GETPGRP_VOID 1" >>confdefs.h +printf "%s\n" "#define GETPGRP_VOID 1" >>confdefs.h fi -if ${ac_cv_func_setvbuf_reversed+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_func_setvbuf_reversed=no -fi -for ac_func in vprintf -do : - ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" -if test "x$ac_cv_func_vprintf" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VPRINTF 1 -_ACEOF +if test "x$ac_cv_func_vprintf" = xno +then : + ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes +then : -ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" -if test "x$ac_cv_func__doprnt" = xyes; then : - -$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h +printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h fi fi -done - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5 -$as_echo_n "checking for working strcoll... " >&6; } -if ${ac_cv_func_strcoll_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_strcoll_works=no -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5 +printf %s "checking for working strcoll... " >&6; } +if test ${ac_cv_func_strcoll_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on glibc systems. + *-gnu*) ac_cv_func_strcoll_works=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_strcoll_works=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { return (strcoll ("abc", "def") >= 0 || strcoll ("ABC", "DEF") >= 0 || @@ -13760,9 +14786,10 @@ return (strcoll ("abc", "def") >= 0 || return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_func_strcoll_works=yes -else +else $as_nop ac_cv_func_strcoll_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13770,11 +14797,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5 -$as_echo "$ac_cv_func_strcoll_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5 +printf "%s\n" "$ac_cv_func_strcoll_works" >&6; } if test $ac_cv_func_strcoll_works = yes; then -$as_echo "#define HAVE_STRCOLL 1" >>confdefs.h +printf "%s\n" "#define HAVE_STRCOLL 1" >>confdefs.h fi @@ -13791,23 +14818,24 @@ if test "$ac_cv_func_alloca_works" = "no" && test "$opt_bash_malloc" = "no"; the fi if test "$ac_cv_func_vprintf" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of vprintf in stdio.h" >&5 -$as_echo_n "checking for declaration of vprintf in stdio.h... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declaration of vprintf in stdio.h" >&5 +printf %s "checking for declaration of vprintf in stdio.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "[int[ ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1; then : + $EGREP "[int[ ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1 +then : ac_cv_func_vprintf=yes fi -rm -f conftest* +rm -rf conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vprintf" >&5 -$as_echo "$ac_cv_func_vprintf" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vprintf" >&5 +printf "%s\n" "$ac_cv_func_vprintf" >&6; } if test $ac_cv_func_vprintf = yes; then - $as_echo "#define HAVE_VPRINTF 1" >>confdefs.h + printf "%s\n" "#define HAVE_VPRINTF 1" >>confdefs.h fi fi @@ -13821,83 +14849,189 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if ${ac_cv_type_signal+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - - ac_fn_c_check_func "$LINENO" "__setostype" "ac_cv_func___setostype" -if test "x$ac_cv_func___setostype" = xyes; then : - $as_echo "#define HAVE_SETOSTYPE 1" >>confdefs.h +if test "x$ac_cv_func___setostype" = xyes +then : + printf "%s\n" "#define HAVE_SETOSTYPE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3" -if test "x$ac_cv_func_wait3" = xyes; then : - $as_echo "#define HAVE_WAIT3 1" >>confdefs.h +if test "x$ac_cv_func_wait3" = xyes +then : + printf "%s\n" "#define HAVE_WAIT3 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo" -if test "x$ac_cv_func_mkfifo" = xyes; then : - $as_echo "#define HAVE_MKFIFO 1" >>confdefs.h +if test "x$ac_cv_func_mkfifo" = xyes +then : + printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h -else - $as_echo "#define MKFIFO_MISSING 1" >>confdefs.h +else $as_nop + printf "%s\n" "#define MKFIFO_MISSING 1" >>confdefs.h fi -for ac_func in dup2 eaccess fcntl getdtablesize getentropy getgroups \ - gethostname getpagesize getpeername getrandom getrlimit \ - getrusage gettimeofday kill killpg lstat pselect readlink \ - select setdtablesize setitimer tcgetpgrp uname ulimit waitpid -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2" +if test "x$ac_cv_func_dup2" = xyes +then : + printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" +if test "x$ac_cv_func_eaccess" = xyes +then : + printf "%s\n" "#define HAVE_EACCESS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" +if test "x$ac_cv_func_fcntl" = xyes +then : + printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getdtablesize" "ac_cv_func_getdtablesize" +if test "x$ac_cv_func_getdtablesize" = xyes +then : + printf "%s\n" "#define HAVE_GETDTABLESIZE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" +if test "x$ac_cv_func_getentropy" = xyes +then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" +if test "x$ac_cv_func_getgroups" = xyes +then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" +if test "x$ac_cv_func_gethostname" = xyes +then : + printf "%s\n" "#define HAVE_GETHOSTNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes +then : + printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpeername" "ac_cv_func_getpeername" +if test "x$ac_cv_func_getpeername" = xyes +then : + printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom" +if test "x$ac_cv_func_getrandom" = xyes +then : + printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getrlimit" "ac_cv_func_getrlimit" +if test "x$ac_cv_func_getrlimit" = xyes +then : + printf "%s\n" "#define HAVE_GETRLIMIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" +if test "x$ac_cv_func_getrusage" = xyes +then : + printf "%s\n" "#define HAVE_GETRUSAGE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = xyes +then : + printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "kill" "ac_cv_func_kill" +if test "x$ac_cv_func_kill" = xyes +then : + printf "%s\n" "#define HAVE_KILL 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg" +if test "x$ac_cv_func_killpg" = xyes +then : + printf "%s\n" "#define HAVE_KILLPG 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" +if test "x$ac_cv_func_lstat" = xyes +then : + printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pselect" "ac_cv_func_pselect" +if test "x$ac_cv_func_pselect" = xyes +then : + printf "%s\n" "#define HAVE_PSELECT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" +if test "x$ac_cv_func_readlink" = xyes +then : + printf "%s\n" "#define HAVE_READLINK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" +if test "x$ac_cv_func_select" = xyes +then : + printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" +if test "x$ac_cv_func_setdtablesize" = xyes +then : + printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer" +if test "x$ac_cv_func_setitimer" = xyes +then : + printf "%s\n" "#define HAVE_SETITIMER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tcgetpgrp" "ac_cv_func_tcgetpgrp" +if test "x$ac_cv_func_tcgetpgrp" = xyes +then : + printf "%s\n" "#define HAVE_TCGETPGRP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" +if test "x$ac_cv_func_uname" = xyes +then : + printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ulimit" "ac_cv_func_ulimit" +if test "x$ac_cv_func_ulimit" = xyes +then : + printf "%s\n" "#define HAVE_ULIMIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" +if test "x$ac_cv_func_waitpid" = xyes +then : + printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h fi -done ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" -if test "x$ac_cv_func_rename" = xyes; then : - $as_echo "#define HAVE_RENAME 1" >>confdefs.h +if test "x$ac_cv_func_rename" = xyes +then : + printf "%s\n" "#define HAVE_RENAME 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" rename.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS rename.$ac_objext" @@ -13907,89 +15041,290 @@ esac fi - -for ac_func in bcopy bzero confstr faccessat fnmatch \ - getaddrinfo gethostbyname getservbyname getservent inet_aton \ - imaxdiv memmove pathconf putenv raise random regcomp regexec \ - setenv setlinebuf setlocale setvbuf siginterrupt strchr \ - sysconf syslog tcgetattr times ttyname tzset unsetenv -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "bcopy" "ac_cv_func_bcopy" +if test "x$ac_cv_func_bcopy" = xyes +then : + printf "%s\n" "#define HAVE_BCOPY 1" >>confdefs.h fi -done - - -for ac_func in vasprintf asprintf -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "bzero" "ac_cv_func_bzero" +if test "x$ac_cv_func_bzero" = xyes +then : + printf "%s\n" "#define HAVE_BZERO 1" >>confdefs.h fi -done - -for ac_func in isascii isblank isgraph isprint isspace isxdigit -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr" +if test "x$ac_cv_func_confstr" = xyes +then : + printf "%s\n" "#define HAVE_CONFSTR 1" >>confdefs.h fi -done - -for ac_func in getpwent getpwnam getpwuid -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" +if test "x$ac_cv_func_faccessat" = xyes +then : + printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h fi -done - -for ac_func in mkstemp mkdtemp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch" +if test "x$ac_cv_func_fnmatch" = xyes +then : + printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h fi -done - -for ac_func in arc4random -do : - ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random" -if test "x$ac_cv_func_arc4random" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARC4RANDOM 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" +if test "x$ac_cv_func_getaddrinfo" = xyes +then : + printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes +then : + printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getservbyname" "ac_cv_func_getservbyname" +if test "x$ac_cv_func_getservbyname" = xyes +then : + printf "%s\n" "#define HAVE_GETSERVBYNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getservent" "ac_cv_func_getservent" +if test "x$ac_cv_func_getservent" = xyes +then : + printf "%s\n" "#define HAVE_GETSERVENT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" +if test "x$ac_cv_func_inet_aton" = xyes +then : + printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "imaxdiv" "ac_cv_func_imaxdiv" +if test "x$ac_cv_func_imaxdiv" = xyes +then : + printf "%s\n" "#define HAVE_IMAXDIV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" +if test "x$ac_cv_func_memmove" = xyes +then : + printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pathconf" "ac_cv_func_pathconf" +if test "x$ac_cv_func_pathconf" = xyes +then : + printf "%s\n" "#define HAVE_PATHCONF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" +if test "x$ac_cv_func_putenv" = xyes +then : + printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise" +if test "x$ac_cv_func_raise" = xyes +then : + printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "random" "ac_cv_func_random" +if test "x$ac_cv_func_random" = xyes +then : + printf "%s\n" "#define HAVE_RANDOM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" +if test "x$ac_cv_func_regcomp" = xyes +then : + printf "%s\n" "#define HAVE_REGCOMP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "regexec" "ac_cv_func_regexec" +if test "x$ac_cv_func_regexec" = xyes +then : + printf "%s\n" "#define HAVE_REGEXEC 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" +if test "x$ac_cv_func_setenv" = xyes +then : + printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setlinebuf" "ac_cv_func_setlinebuf" +if test "x$ac_cv_func_setlinebuf" = xyes +then : + printf "%s\n" "#define HAVE_SETLINEBUF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" +if test "x$ac_cv_func_setlocale" = xyes +then : + printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setvbuf" "ac_cv_func_setvbuf" +if test "x$ac_cv_func_setvbuf" = xyes +then : + printf "%s\n" "#define HAVE_SETVBUF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "siginterrupt" "ac_cv_func_siginterrupt" +if test "x$ac_cv_func_siginterrupt" = xyes +then : + printf "%s\n" "#define HAVE_SIGINTERRUPT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" +if test "x$ac_cv_func_strchr" = xyes +then : + printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" +if test "x$ac_cv_func_sysconf" = xyes +then : + printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" +if test "x$ac_cv_func_syslog" = xyes +then : + printf "%s\n" "#define HAVE_SYSLOG 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tcgetattr" "ac_cv_func_tcgetattr" +if test "x$ac_cv_func_tcgetattr" = xyes +then : + printf "%s\n" "#define HAVE_TCGETATTR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" +if test "x$ac_cv_func_times" = xyes +then : + printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "ttyname" "ac_cv_func_ttyname" +if test "x$ac_cv_func_ttyname" = xyes +then : + printf "%s\n" "#define HAVE_TTYNAME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "tzset" "ac_cv_func_tzset" +if test "x$ac_cv_func_tzset" = xyes +then : + printf "%s\n" "#define HAVE_TZSET 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" +if test "x$ac_cv_func_unsetenv" = xyes +then : + printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h + +fi + + +ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" +if test "x$ac_cv_func_vasprintf" = xyes +then : + printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" +if test "x$ac_cv_func_asprintf" = xyes +then : + printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "isascii" "ac_cv_func_isascii" +if test "x$ac_cv_func_isascii" = xyes +then : + printf "%s\n" "#define HAVE_ISASCII 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank" +if test "x$ac_cv_func_isblank" = xyes +then : + printf "%s\n" "#define HAVE_ISBLANK 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isgraph" "ac_cv_func_isgraph" +if test "x$ac_cv_func_isgraph" = xyes +then : + printf "%s\n" "#define HAVE_ISGRAPH 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isprint" "ac_cv_func_isprint" +if test "x$ac_cv_func_isprint" = xyes +then : + printf "%s\n" "#define HAVE_ISPRINT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isspace" "ac_cv_func_isspace" +if test "x$ac_cv_func_isspace" = xyes +then : + printf "%s\n" "#define HAVE_ISSPACE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isxdigit" "ac_cv_func_isxdigit" +if test "x$ac_cv_func_isxdigit" = xyes +then : + printf "%s\n" "#define HAVE_ISXDIGIT 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "getpwent" "ac_cv_func_getpwent" +if test "x$ac_cv_func_getpwent" = xyes +then : + printf "%s\n" "#define HAVE_GETPWENT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpwnam" "ac_cv_func_getpwnam" +if test "x$ac_cv_func_getpwnam" = xyes +then : + printf "%s\n" "#define HAVE_GETPWNAM 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getpwuid" "ac_cv_func_getpwuid" +if test "x$ac_cv_func_getpwuid" = xyes +then : + printf "%s\n" "#define HAVE_GETPWUID 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" +if test "x$ac_cv_func_mkstemp" = xyes +then : + printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp" +if test "x$ac_cv_func_mkdtemp" = xyes +then : + printf "%s\n" "#define HAVE_MKDTEMP 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random" +if test "x$ac_cv_func_arc4random" = xyes +then : + printf "%s\n" "#define HAVE_ARC4RANDOM 1" >>confdefs.h fi -done ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" -if test "x$ac_cv_func_getcwd" = xyes; then : - $as_echo "#define HAVE_GETCWD 1" >>confdefs.h +if test "x$ac_cv_func_getcwd" = xyes +then : + printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" getcwd.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getcwd.$ac_objext" @@ -13997,12 +15332,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - $as_echo "#define HAVE_MEMSET 1" >>confdefs.h +if test "x$ac_cv_func_memset" = xyes +then : + printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" memset.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memset.$ac_objext" @@ -14011,12 +15346,12 @@ esac fi - ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" -if test "x$ac_cv_func_strcasecmp" = xyes; then : - $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h +if test "x$ac_cv_func_strcasecmp" = xyes +then : + printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strcasecmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext" @@ -14024,12 +15359,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" -if test "x$ac_cv_func_strcasestr" = xyes; then : - $as_echo "#define HAVE_STRCASESTR 1" >>confdefs.h +if test "x$ac_cv_func_strcasestr" = xyes +then : + printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strcasestr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext" @@ -14037,12 +15372,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes; then : - $as_echo "#define HAVE_STRERROR 1" >>confdefs.h +if test "x$ac_cv_func_strerror" = xyes +then : + printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strerror.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strerror.$ac_objext" @@ -14050,12 +15385,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = xyes; then : - $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h +if test "x$ac_cv_func_strftime" = xyes +then : + printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strftime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strftime.$ac_objext" @@ -14063,12 +15398,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" -if test "x$ac_cv_func_strnlen" = xyes; then : - $as_echo "#define HAVE_STRNLEN 1" >>confdefs.h +if test "x$ac_cv_func_strnlen" = xyes +then : + printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strnlen.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strnlen.$ac_objext" @@ -14076,12 +15411,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strpbrk" "ac_cv_func_strpbrk" -if test "x$ac_cv_func_strpbrk" = xyes; then : - $as_echo "#define HAVE_STRPBRK 1" >>confdefs.h +if test "x$ac_cv_func_strpbrk" = xyes +then : + printf "%s\n" "#define HAVE_STRPBRK 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strpbrk.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strpbrk.$ac_objext" @@ -14089,12 +15424,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" -if test "x$ac_cv_func_strstr" = xyes; then : - $as_echo "#define HAVE_STRSTR 1" >>confdefs.h +if test "x$ac_cv_func_strstr" = xyes +then : + printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strstr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strstr.$ac_objext" @@ -14103,12 +15438,12 @@ esac fi - ac_fn_c_check_func "$LINENO" "strtod" "ac_cv_func_strtod" -if test "x$ac_cv_func_strtod" = xyes; then : - $as_echo "#define HAVE_STRTOD 1" >>confdefs.h +if test "x$ac_cv_func_strtod" = xyes +then : + printf "%s\n" "#define HAVE_STRTOD 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtod.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtod.$ac_objext" @@ -14116,12 +15451,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" -if test "x$ac_cv_func_strtol" = xyes; then : - $as_echo "#define HAVE_STRTOL 1" >>confdefs.h +if test "x$ac_cv_func_strtol" = xyes +then : + printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtol.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtol.$ac_objext" @@ -14129,12 +15464,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul" -if test "x$ac_cv_func_strtoul" = xyes; then : - $as_echo "#define HAVE_STRTOUL 1" >>confdefs.h +if test "x$ac_cv_func_strtoul" = xyes +then : + printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoul.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoul.$ac_objext" @@ -14142,12 +15477,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" -if test "x$ac_cv_func_strtoll" = xyes; then : - $as_echo "#define HAVE_STRTOLL 1" >>confdefs.h +if test "x$ac_cv_func_strtoll" = xyes +then : + printf "%s\n" "#define HAVE_STRTOLL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoll.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoll.$ac_objext" @@ -14155,12 +15490,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull" -if test "x$ac_cv_func_strtoull" = xyes; then : - $as_echo "#define HAVE_STRTOULL 1" >>confdefs.h +if test "x$ac_cv_func_strtoull" = xyes +then : + printf "%s\n" "#define HAVE_STRTOULL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoull.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoull.$ac_objext" @@ -14168,12 +15503,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax" -if test "x$ac_cv_func_strtoimax" = xyes; then : - $as_echo "#define HAVE_STRTOIMAX 1" >>confdefs.h +if test "x$ac_cv_func_strtoimax" = xyes +then : + printf "%s\n" "#define HAVE_STRTOIMAX 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoimax.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext" @@ -14181,12 +15516,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strtoumax" "ac_cv_func_strtoumax" -if test "x$ac_cv_func_strtoumax" = xyes; then : - $as_echo "#define HAVE_STRTOUMAX 1" >>confdefs.h +if test "x$ac_cv_func_strtoumax" = xyes +then : + printf "%s\n" "#define HAVE_STRTOUMAX 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoumax.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoumax.$ac_objext" @@ -14195,12 +15530,12 @@ esac fi - ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf" -if test "x$ac_cv_func_dprintf" = xyes; then : - $as_echo "#define HAVE_DPRINTF 1" >>confdefs.h +if test "x$ac_cv_func_dprintf" = xyes +then : + printf "%s\n" "#define HAVE_DPRINTF 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" dprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dprintf.$ac_objext" @@ -14209,12 +15544,12 @@ esac fi - ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" -if test "x$ac_cv_func_strchrnul" = xyes; then : - $as_echo "#define HAVE_STRCHRNUL 1" >>confdefs.h +if test "x$ac_cv_func_strchrnul" = xyes +then : + printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strchrnul.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strchrnul.$ac_objext" @@ -14223,12 +15558,12 @@ esac fi - ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" -if test "x$ac_cv_func_strdup" = xyes; then : - $as_echo "#define HAVE_STRDUP 1" >>confdefs.h +if test "x$ac_cv_func_strdup" = xyes +then : + printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" @@ -14238,481 +15573,218 @@ esac fi - -for ac_header in libaudit.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default" -if test "x$ac_cv_header_libaudit_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBAUDIT_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default" +if test "x$ac_cv_header_libaudit_h" = xyes +then : + printf "%s\n" "#define HAVE_LIBAUDIT_H 1" >>confdefs.h fi -done - -ac_fn_c_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include -" -if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes; then : +ac_fn_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl" >>confdefs.h -ac_fn_c_check_decl "$LINENO" "confstr" "ac_cv_have_decl_confstr" "$ac_includes_default" -if test "x$ac_cv_have_decl_confstr" = xyes; then : +ac_fn_check_decl "$LINENO" "confstr" "ac_cv_have_decl_confstr" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_confstr" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_CONFSTR $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_CONFSTR $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "printf" "ac_cv_have_decl_printf" "$ac_includes_default" -if test "x$ac_cv_have_decl_printf" = xyes; then : +ac_fn_check_decl "$LINENO" "printf" "ac_cv_have_decl_printf" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_printf" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_PRINTF $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_PRINTF $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" -if test "x$ac_cv_have_decl_sbrk" = xyes; then : +ac_fn_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_sbrk" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_SBRK $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SBRK $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "setregid" "ac_cv_have_decl_setregid" "$ac_includes_default" -if test "x$ac_cv_have_decl_setregid" = xyes; then : +ac_fn_check_decl "$LINENO" "setregid" "ac_cv_have_decl_setregid" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_setregid" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_SETREGID $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SETREGID $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "strcpy" "ac_cv_have_decl_strcpy" "$ac_includes_default" -if test "x$ac_cv_have_decl_strcpy" = xyes; then : +ac_fn_check_decl "$LINENO" "strcpy" "ac_cv_have_decl_strcpy" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strcpy" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_STRCPY $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRCPY $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes_default" -if test "x$ac_cv_have_decl_strsignal" = xyes; then : +ac_fn_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strsignal" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSIGNAL $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_STRSIGNAL $ac_have_decl" >>confdefs.h -for ac_func in setresuid setresgid -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid" +if test "x$ac_cv_func_setresuid" = xyes +then : + printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "setresgid" "ac_cv_func_setresgid" +if test "x$ac_cv_func_setresgid" = xyes +then : + printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h fi -done -ac_fn_c_check_decl "$LINENO" "strtold" "ac_cv_have_decl_strtold" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtold" = xyes; then : +ac_fn_check_decl "$LINENO" "strtold" "ac_cv_have_decl_strtold" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtold" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_STRTOLD $ac_have_decl" >>confdefs.h +if test $ac_have_decl = 1 +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOLD $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken strtold" >&5 -$as_echo_n "checking for broken strtold... " >&6; } - if ${bash_cv_strtold_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken strtold" >&5 +printf %s "checking for broken strtold... " >&6; } + if test ${bash_cv_strtold_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { long double r; char *foo, bar; r = strtold(foo, &bar); + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_strtold_broken=no -else +else $as_nop bash_cv_strtold_broken=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_strtold_broken" >&5 -$as_echo "$bash_cv_strtold_broken" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_strtold_broken" >&5 +printf "%s\n" "$bash_cv_strtold_broken" >&6; } if test "$bash_cv_strtold_broken" = "yes" ; then - $as_echo "#define STRTOLD_BROKEN 1" >>confdefs.h + printf "%s\n" "#define STRTOLD_BROKEN 1" >>confdefs.h fi fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoimax" >&5 -$as_echo_n "checking for declaration of strtoimax... " >&6; } -if ${bash_cv_decl_strtoimax+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtoimax; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtoimax=yes -else - bash_cv_decl_strtoimax=no +ac_fn_check_decl "$LINENO" "strtoimax" "ac_cv_have_decl_strtoimax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoimax" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +printf "%s\n" "#define HAVE_DECL_STRTOIMAX $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtol" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoimax" >&5 -$as_echo "$bash_cv_decl_strtoimax" >&6; } -bash_tr_func=HAVE_DECL_`echo strtoimax | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtoimax = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF +printf "%s\n" "#define HAVE_DECL_STRTOL $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoll" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_STRTOLL $ac_have_decl" >>confdefs.h - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtol" >&5 -$as_echo_n "checking for declaration of strtol... " >&6; } -if ${bash_cv_decl_strtol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtol; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtol=yes -else - bash_cv_decl_strtol=no +ac_fn_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoul" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +printf "%s\n" "#define HAVE_DECL_STRTOUL $ac_have_decl" >>confdefs.h + +ac_fn_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoull" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtol" >&5 -$as_echo "$bash_cv_decl_strtol" >&6; } -bash_tr_func=HAVE_DECL_`echo strtol | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtol = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoll" >&5 -$as_echo_n "checking for declaration of strtoll... " >&6; } -if ${bash_cv_decl_strtoll+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtoll; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtoll=yes -else - bash_cv_decl_strtoll=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoll" >&5 -$as_echo "$bash_cv_decl_strtoll" >&6; } -bash_tr_func=HAVE_DECL_`echo strtoll | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtoll = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoul" >&5 -$as_echo_n "checking for declaration of strtoul... " >&6; } -if ${bash_cv_decl_strtoul+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtoul; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtoul=yes -else - bash_cv_decl_strtoul=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoul" >&5 -$as_echo "$bash_cv_decl_strtoul" >&6; } -bash_tr_func=HAVE_DECL_`echo strtoul | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtoul = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoull" >&5 -$as_echo_n "checking for declaration of strtoull... " >&6; } -if ${bash_cv_decl_strtoull+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtoull; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtoull=yes -else - bash_cv_decl_strtoull=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoull" >&5 -$as_echo "$bash_cv_decl_strtoull" >&6; } -bash_tr_func=HAVE_DECL_`echo strtoull | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtoull = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoumax" >&5 -$as_echo_n "checking for declaration of strtoumax... " >&6; } -if ${bash_cv_decl_strtoumax+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if STDC_HEADERS -# include -#endif -#if HAVE_INTTYPES_H -# include -#endif - -int -main () -{ -return !strtoumax; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_decl_strtoumax=yes -else - bash_cv_decl_strtoumax=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoumax" >&5 -$as_echo "$bash_cv_decl_strtoumax" >&6; } -bash_tr_func=HAVE_DECL_`echo strtoumax | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -if test $bash_cv_decl_strtoumax = yes; then - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define $bash_tr_func 0 -_ACEOF +printf "%s\n" "#define HAVE_DECL_STRTOULL $ac_have_decl" >>confdefs.h +ac_fn_check_decl "$LINENO" "strtoumax" "ac_cv_have_decl_strtoumax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_strtoumax" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_STRTOUMAX $ac_have_decl" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 -$as_echo_n "checking for working mktime... " >&6; } -if ${ac_cv_func_working_mktime+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 +printf %s "checking for working mktime... " >&6; } +if test ${ac_cv_func_working_mktime+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_func_working_mktime=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ -#ifdef TIME_WITH_SYS_TIME +#include +#ifdef HAVE_SYS_TIME_H # include -# include -#else -# ifdef HAVE_SYS_TIME_H -# include -# else -# include -# endif #endif #include @@ -14851,7 +15923,7 @@ year_2050_test () } int -main () +main (void) { time_t t, delta; int i, j; @@ -14895,9 +15967,10 @@ main () return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ()); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_func_working_mktime=yes -else +else $as_nop ac_cv_func_working_mktime=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14905,8 +15978,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5 -$as_echo "$ac_cv_func_working_mktime" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5 +printf "%s\n" "$ac_cv_func_working_mktime" >&6; } if test $ac_cv_func_working_mktime = no; then case " $LIBOBJS " in *" mktime.$ac_objext "* ) ;; @@ -14918,40 +15991,55 @@ fi -for ac_header in argz.h errno.h fcntl.h malloc.h stdio_ext.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default" +if test "x$ac_cv_header_argz_h" = xyes +then : + printf "%s\n" "#define HAVE_ARGZ_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" +if test "x$ac_cv_header_errno_h" = xyes +then : + printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" +if test "x$ac_cv_header_fcntl_h" = xyes +then : + printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" +if test "x$ac_cv_header_malloc_h" = xyes +then : + printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdio_ext.h" "ac_cv_header_stdio_ext_h" "$ac_includes_default" +if test "x$ac_cv_header_stdio_ext_h" = xyes +then : + printf "%s\n" "#define HAVE_STDIO_EXT_H 1" >>confdefs.h fi -done -for ac_func in getpagesize -do : - ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" -if test "x$ac_cv_func_getpagesize" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETPAGESIZE 1 -_ACEOF - -fi -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 -$as_echo_n "checking for working mmap... " >&6; } -if ${ac_cv_func_mmap_fixed_mapped+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_mmap_fixed_mapped=no -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +printf %s "checking for working mmap... " >&6; } +if test ${ac_cv_func_mmap_fixed_mapped+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + case "$host_os" in # (( + # Guess yes on platforms where we know the result. + linux*) ac_cv_func_mmap_fixed_mapped=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_mmap_fixed_mapped=no ;; + esac +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -14983,10 +16071,6 @@ $ac_includes_default #include #include -#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H -char *malloc (); -#endif - /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE @@ -15020,7 +16104,7 @@ char *malloc (); #endif /* no HAVE_GETPAGESIZE */ int -main () +main (void) { char *data, *data2, *data3; const char *cdata2; @@ -15088,12 +16172,15 @@ main () if (*(data + i) != *(data3 + i)) return 14; close (fd); + free (data); + free (data3); return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_func_mmap_fixed_mapped=yes -else +else $as_nop ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15101,27 +16188,69 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 -$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then -$as_echo "#define HAVE_MMAP 1" >>confdefs.h +printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt -for ac_func in __argz_count __argz_next __argz_stringify dcgettext mempcpy \ - munmap mremap stpcpy strcspn -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "__argz_count" "ac_cv_func___argz_count" +if test "x$ac_cv_func___argz_count" = xyes +then : + printf "%s\n" "#define HAVE___ARGZ_COUNT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "__argz_next" "ac_cv_func___argz_next" +if test "x$ac_cv_func___argz_next" = xyes +then : + printf "%s\n" "#define HAVE___ARGZ_NEXT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "__argz_stringify" "ac_cv_func___argz_stringify" +if test "x$ac_cv_func___argz_stringify" = xyes +then : + printf "%s\n" "#define HAVE___ARGZ_STRINGIFY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" +if test "x$ac_cv_func_dcgettext" = xyes +then : + printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" +if test "x$ac_cv_func_mempcpy" = xyes +then : + printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" +if test "x$ac_cv_func_munmap" = xyes +then : + printf "%s\n" "#define HAVE_MUNMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "mremap" "ac_cv_func_mremap" +if test "x$ac_cv_func_mremap" = xyes +then : + printf "%s\n" "#define HAVE_MREMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy" +if test "x$ac_cv_func_stpcpy" = xyes +then : + printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "strcspn" "ac_cv_func_strcspn" +if test "x$ac_cv_func_strcspn" = xyes +then : + printf "%s\n" "#define HAVE_STRCSPN 1" >>confdefs.h fi -done INTL_DEP= INTL_INC= LIBINTL_H= @@ -15136,92 +16265,78 @@ fi -for ac_header in wctype.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" -if test "x$ac_cv_header_wctype_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WCTYPE_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" +if test "x$ac_cv_header_wctype_h" = xyes +then : + printf "%s\n" "#define HAVE_WCTYPE_H 1" >>confdefs.h fi -done - -for ac_header in wchar.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" -if test "x$ac_cv_header_wchar_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WCHAR_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" +if test "x$ac_cv_header_wchar_h" = xyes +then : + printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h fi -done - -for ac_header in langinfo.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" -if test "x$ac_cv_header_langinfo_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LANGINFO_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" +if test "x$ac_cv_header_langinfo_h" = xyes +then : + printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h fi -done - -for ac_header in mbstr.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "mbstr.h" "ac_cv_header_mbstr_h" "$ac_includes_default" -if test "x$ac_cv_header_mbstr_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MBSTR_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "mbstr.h" "ac_cv_header_mbstr_h" "$ac_includes_default" +if test "x$ac_cv_header_mbstr_h" = xyes +then : + printf "%s\n" "#define HAVE_MBSTR_H 1" >>confdefs.h fi -done - ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen" -if test "x$ac_cv_func_mbrlen" = xyes; then : - $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h +if test "x$ac_cv_func_mbrlen" = xyes +then : + printf "%s\n" "#define HAVE_MBRLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp" -if test "x$ac_cv_func_mbscasecmp" = xyes; then : - $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h +if test "x$ac_cv_func_mbscasecmp" = xyes +then : + printf "%s\n" "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscmp" "ac_cv_func_mbscmp" -if test "x$ac_cv_func_mbscmp" = xyes; then : - $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h +if test "x$ac_cv_func_mbscmp" = xyes +then : + printf "%s\n" "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs" -if test "x$ac_cv_func_mbsnrtowcs" = xyes; then : - $as_echo "#define HAVE_MBSNRTOWCS 1" >>confdefs.h +if test "x$ac_cv_func_mbsnrtowcs" = xyes +then : + printf "%s\n" "#define HAVE_MBSNRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsrtowcs" "ac_cv_func_mbsrtowcs" -if test "x$ac_cv_func_mbsrtowcs" = xyes; then : - $as_echo "#define HAVE_MBSRTOWCS 1" >>confdefs.h +if test "x$ac_cv_func_mbsrtowcs" = xyes +then : + printf "%s\n" "#define HAVE_MBSRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbschr" "ac_cv_func_mbschr" -if test "x$ac_cv_func_mbschr" = xyes; then : - $as_echo "#define HAVE_MBSCHR 1" >>confdefs.h +if test "x$ac_cv_func_mbschr" = xyes +then : + printf "%s\n" "#define HAVE_MBSCHR 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" mbschr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mbschr.$ac_objext" @@ -15231,43 +16346,48 @@ esac fi - ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" -if test "x$ac_cv_func_wcrtomb" = xyes; then : - $as_echo "#define HAVE_WCRTOMB 1" >>confdefs.h +if test "x$ac_cv_func_wcrtomb" = xyes +then : + printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" -if test "x$ac_cv_func_wcscoll" = xyes; then : - $as_echo "#define HAVE_WCSCOLL 1" >>confdefs.h +if test "x$ac_cv_func_wcscoll" = xyes +then : + printf "%s\n" "#define HAVE_WCSCOLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup" -if test "x$ac_cv_func_wcsdup" = xyes; then : - $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h +if test "x$ac_cv_func_wcsdup" = xyes +then : + printf "%s\n" "#define HAVE_WCSDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" -if test "x$ac_cv_func_wcwidth" = xyes; then : - $as_echo "#define HAVE_WCWIDTH 1" >>confdefs.h +if test "x$ac_cv_func_wcwidth" = xyes +then : + printf "%s\n" "#define HAVE_WCWIDTH 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wctype" "ac_cv_func_wctype" -if test "x$ac_cv_func_wctype" = xyes; then : - $as_echo "#define HAVE_WCTYPE 1" >>confdefs.h +if test "x$ac_cv_func_wctype" = xyes +then : + printf "%s\n" "#define HAVE_WCTYPE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" -if test "x$ac_cv_func_wcswidth" = xyes; then : - $as_echo "#define HAVE_WCSWIDTH 1" >>confdefs.h +if test "x$ac_cv_func_wcswidth" = xyes +then : + printf "%s\n" "#define HAVE_WCSWIDTH 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" wcswidth.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS wcswidth.$ac_objext" @@ -15278,17 +16398,17 @@ fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 -$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } -if ${ac_cv_func_mbrtowc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 +printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } +if test ${ac_cv_func_mbrtowc+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { wchar_t wc; char const s[] = ""; @@ -15299,82 +16419,74 @@ wchar_t wc; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_func_mbrtowc=yes -else +else $as_nop ac_cv_func_mbrtowc=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 -$as_echo "$ac_cv_func_mbrtowc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 +printf "%s\n" "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then -$as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h +printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbrtowc = yes; then - $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h fi -for ac_func in iswlower iswupper towlower towupper iswctype -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "iswlower" "ac_cv_func_iswlower" +if test "x$ac_cv_func_iswlower" = xyes +then : + printf "%s\n" "#define HAVE_ISWLOWER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "iswupper" "ac_cv_func_iswupper" +if test "x$ac_cv_func_iswupper" = xyes +then : + printf "%s\n" "#define HAVE_ISWUPPER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" +if test "x$ac_cv_func_towlower" = xyes +then : + printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "towupper" "ac_cv_func_towupper" +if test "x$ac_cv_func_towupper" = xyes +then : + printf "%s\n" "#define HAVE_TOWUPPER 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "iswctype" "ac_cv_func_iswctype" +if test "x$ac_cv_func_iswctype" = xyes +then : + printf "%s\n" "#define HAVE_ISWCTYPE 1" >>confdefs.h fi -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${bash_cv_langinfo_codeset+:} false; then : - $as_echo_n "(cached) " >&6 -else + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5 +printf %s "checking for wchar_t in wchar.h... " >&6; } +if test ${bash_cv_type_wchar_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -int -main () -{ -char* cs = nl_langinfo(CODESET); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_langinfo_codeset=yes -else - bash_cv_langinfo_codeset=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_langinfo_codeset" >&5 -$as_echo "$bash_cv_langinfo_codeset" >&6; } -if test $bash_cv_langinfo_codeset = yes; then - $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5 -$as_echo_n "checking for wchar_t in wchar.h... " >&6; } -if ${bash_cv_type_wchar_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ #include - int -main () +main (void) { wchar_t foo; @@ -15384,31 +16496,35 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_type_wchar_t=yes -else +else $as_nop bash_cv_type_wchar_t=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 -$as_echo "$bash_cv_type_wchar_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 +printf "%s\n" "$bash_cv_type_wchar_t" >&6; } if test $bash_cv_type_wchar_t = yes; then -$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5 -$as_echo_n "checking for wctype_t in wctype.h... " >&6; } -if ${bash_cv_type_wctype_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5 +printf %s "checking for wctype_t in wctype.h... " >&6; } +if test ${bash_cv_type_wctype_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include int -main () +main (void) { wctype_t foo; @@ -15418,31 +16534,35 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_type_wctype_t=yes -else +else $as_nop bash_cv_type_wctype_t=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 -$as_echo "$bash_cv_type_wctype_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 +printf "%s\n" "$bash_cv_type_wctype_t" >&6; } if test $bash_cv_type_wctype_t = yes; then -$as_echo "#define HAVE_WCTYPE_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_WCTYPE_T 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5 -$as_echo_n "checking for wint_t in wctype.h... " >&6; } -if ${bash_cv_type_wint_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5 +printf %s "checking for wint_t in wctype.h... " >&6; } +if test ${bash_cv_type_wint_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include int -main () +main (void) { wint_t foo; @@ -15452,29 +16572,34 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_type_wint_t=yes -else +else $as_nop bash_cv_type_wint_t=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 -$as_echo "$bash_cv_type_wint_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 +printf "%s\n" "$bash_cv_type_wint_t" >&6; } if test $bash_cv_type_wint_t = yes; then -$as_echo "#define HAVE_WINT_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5 -$as_echo_n "checking for wcwidth broken with unicode combining characters... " >&6; } -if ${bash_cv_wcwidth_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5 +printf %s "checking for wcwidth broken with unicode combining characters... " >&6; } +if test ${bash_cv_wcwidth_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : bash_cv_wcwidth_broken=no -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15498,9 +16623,10 @@ char **v; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_wcwidth_broken=yes -else +else $as_nop bash_cv_wcwidth_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15508,27 +16634,23 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5 -$as_echo "$bash_cv_wcwidth_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5 +printf "%s\n" "$bash_cv_wcwidth_broken" >&6; } if test "$bash_cv_wcwidth_broken" = yes; then -$as_echo "#define WCWIDTH_BROKEN 1" >>confdefs.h +printf "%s\n" "#define WCWIDTH_BROKEN 1" >>confdefs.h fi if test "$am_cv_func_iconv" = yes; then OLDLIBS="$LIBS" LIBS="$LIBS $LIBINTL $LIBICONV" - for ac_func in locale_charset -do : - ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" -if test "x$ac_cv_func_locale_charset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LOCALE_CHARSET 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" +if test "x$ac_cv_func_locale_charset" = xyes +then : + printf "%s\n" "#define HAVE_LOCALE_CHARSET 1" >>confdefs.h fi -done LIBS="$OLDLIBS" fi @@ -15537,17 +16659,19 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 -$as_echo_n "checking size of wchar_t... " >&6; } -if ${ac_cv_sizeof_wchar_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5 +printf %s "checking size of wchar_t... " >&6; } +if test ${ac_cv_sizeof_wchar_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_wchar_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (wchar_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -15556,25 +16680,24 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 -$as_echo "$ac_cv_sizeof_wchar_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5 +printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t -_ACEOF +printf "%s\n" "#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t" >>confdefs.h if test "$opt_static_link" != yes; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15583,78 +16706,64 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + printf "%s\n" "#define HAVE_LIBDL 1" >>confdefs.h LIBS="-ldl $LIBS" fi -for ac_func in dlopen dlclose dlsym -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : + printf "%s\n" "#define HAVE_DLOPEN 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "dlclose" "ac_cv_func_dlclose" +if test "x$ac_cv_func_dlclose" = xyes +then : + printf "%s\n" "#define HAVE_DLCLOSE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "dlsym" "ac_cv_func_dlsym" +if test "x$ac_cv_func_dlsym" = xyes +then : + printf "%s\n" "#define HAVE_DLSYM 1" >>confdefs.h fi -ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include -/* NetBSD declares sys_siglist in unistd.h. */ -#ifdef HAVE_UNISTD_H -# include -#endif - -" -if test "x$ac_cv_have_decl_sys_siglist" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_SIGLIST $ac_have_decl -_ACEOF - - - if test "$ac_cv_func_inet_aton" != 'yes'; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 -$as_echo_n "checking for inet_aton... " >&6; } -if ${bash_cv_func_inet_aton+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5 +printf %s "checking for inet_aton... " >&6; } +if test ${bash_cv_func_inet_aton+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15663,25 +16772,26 @@ else #include struct in_addr ap; int -main () +main (void) { inet_aton("127.0.0.1", &ap); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_func_inet_aton=yes -else +else $as_nop bash_cv_func_inet_aton=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_inet_aton" >&5 -$as_echo "$bash_cv_func_inet_aton" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_inet_aton" >&5 +printf "%s\n" "$bash_cv_func_inet_aton" >&6; } if test $bash_cv_func_inet_aton = yes; then - $as_echo "#define HAVE_INET_ATON 1" >>confdefs.h + printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h else case " $LIBOBJS " in @@ -15695,11 +16805,12 @@ fi fi case "$host_os" in -irix4*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpwent in -lsun" >&5 -$as_echo_n "checking for getpwent in -lsun... " >&6; } -if ${ac_cv_lib_sun_getpwent+:} false; then : - $as_echo_n "(cached) " >&6 -else +irix4*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwent in -lsun" >&5 +printf %s "checking for getpwent in -lsun... " >&6; } +if test ${ac_cv_lib_sun_getpwent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsun $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15708,33 +16819,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char getpwent (); int -main () +main (void) { return getpwent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_sun_getpwent=yes -else +else $as_nop ac_cv_lib_sun_getpwent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwent" >&5 -$as_echo "$ac_cv_lib_sun_getpwent" >&6; } -if test "x$ac_cv_lib_sun_getpwent" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSUN 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwent" >&5 +printf "%s\n" "$ac_cv_lib_sun_getpwent" >&6; } +if test "x$ac_cv_lib_sun_getpwent" = xyes +then : + printf "%s\n" "#define HAVE_LIBSUN 1" >>confdefs.h LIBS="-lsun $LIBS" @@ -15747,18 +16855,20 @@ if test "$ac_cv_func_getpeername" = no; then if test "X$bash_cv_have_socklib" = "X"; then _bash_needmsg= else -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket library" >&5 -$as_echo_n "checking for socket library... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket library" >&5 +printf %s "checking for socket library... " >&6; } _bash_needmsg=yes fi -if ${bash_cv_have_socklib+:} false; then : - $as_echo_n "(cached) " >&6 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5 -$as_echo_n "checking for getpeername in -lsocket... " >&6; } -if ${ac_cv_lib_socket_getpeername+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${bash_cv_have_socklib+y} +then : + printf %s "(cached) " >&6 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5 +printf %s "checking for getpeername in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_getpeername+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15767,40 +16877,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char getpeername (); int -main () +main (void) { return getpeername (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_socket_getpeername=yes -else +else $as_nop ac_cv_lib_socket_getpeername=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5 -$as_echo "$ac_cv_lib_socket_getpeername" >&6; } -if test "x$ac_cv_lib_socket_getpeername" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5 +printf "%s\n" "$ac_cv_lib_socket_getpeername" >&6; } +if test "x$ac_cv_lib_socket_getpeername" = xyes +then : bash_cv_have_socklib=yes -else +else $as_nop bash_cv_have_socklib=no fi fi if test "X$_bash_needmsg" = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_socklib" >&5 -$as_echo "$bash_cv_have_socklib" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_socklib" >&5 +printf "%s\n" "$bash_cv_have_socklib" >&6; } _bash_needmsg= fi if test $bash_cv_have_socklib = yes; then @@ -15808,18 +16917,20 @@ if test $bash_cv_have_socklib = yes; then if test "X$bash_cv_have_libnsl" = "X"; then _bash_needmsg= else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnsl" >&5 -$as_echo_n "checking for libnsl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libnsl" >&5 +printf %s "checking for libnsl... " >&6; } _bash_needmsg=yes fi - if ${bash_cv_have_libnsl+:} false; then : - $as_echo_n "(cached) " >&6 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 -$as_echo_n "checking for t_open in -lnsl... " >&6; } -if ${ac_cv_lib_nsl_t_open+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${bash_cv_have_libnsl+y} +then : + printf %s "(cached) " >&6 +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5 +printf %s "checking for t_open in -lnsl... " >&6; } +if test ${ac_cv_lib_nsl_t_open+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15828,40 +16939,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char t_open (); int -main () +main (void) { return t_open (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_nsl_t_open=yes -else +else $as_nop ac_cv_lib_nsl_t_open=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 -$as_echo "$ac_cv_lib_nsl_t_open" >&6; } -if test "x$ac_cv_lib_nsl_t_open" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5 +printf "%s\n" "$ac_cv_lib_nsl_t_open" >&6; } +if test "x$ac_cv_lib_nsl_t_open" = xyes +then : bash_cv_have_libnsl=yes -else +else $as_nop bash_cv_have_libnsl=no fi fi if test "X$_bash_needmsg" = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_libnsl" >&5 -$as_echo "$bash_cv_have_libnsl" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_libnsl" >&5 +printf "%s\n" "$bash_cv_have_libnsl" >&6; } _bash_needmsg= fi if test $bash_cv_have_libnsl = yes; then @@ -15869,9 +16979,9 @@ $as_echo "$bash_cv_have_libnsl" >&6; } else LIBS="-lsocket $LIBS" fi - $as_echo "#define HAVE_LIBSOCKET 1" >>confdefs.h + printf "%s\n" "#define HAVE_LIBSOCKET 1" >>confdefs.h - $as_echo "#define HAVE_GETPEERNAME 1" >>confdefs.h + printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h fi @@ -15880,57 +16990,64 @@ if test "$ac_cv_func_gethostbyname" = no; then if test "X$bash_cv_have_gethostbyname" = "X"; then _bash_needmsg=yes else -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5 -$as_echo_n "checking for gethostbyname in socket library... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5 +printf %s "checking for gethostbyname in socket library... " >&6; } _bash_needmsg= fi -if ${bash_cv_have_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${bash_cv_have_gethostbyname+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include + int -main () +main (void) { - struct hostent *hp; - hp = gethostbyname("localhost"); + +struct hostent *hp; +hp = gethostbyname("localhost"); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_have_gethostbyname=yes -else +else $as_nop bash_cv_have_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi if test "X$_bash_needmsg" = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5 -$as_echo_n "checking for gethostbyname in socket library... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5 +printf %s "checking for gethostbyname in socket library... " >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_gethostbyname" >&5 -$as_echo "$bash_cv_have_gethostbyname" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_gethostbyname" >&5 +printf "%s\n" "$bash_cv_have_gethostbyname" >&6; } if test "$bash_cv_have_gethostbyname" = yes; then -$as_echo "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 -$as_echo_n "checking type of array argument to getgroups... " >&6; } -if ${ac_cv_type_getgroups+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 +printf %s "checking type of array argument to getgroups... " >&6; } +if test ${ac_cv_type_getgroups+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_type_getgroups=cross -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Mike Rendell for this test. */ @@ -15940,7 +17057,7 @@ $ac_includes_default #define MAX(x, y) ((x) > (y) ? (x) : (y)) int -main () +main (void) { gid_t gidset[NGID]; int i, n; @@ -15957,9 +17074,10 @@ main () return n > 0 && gidset[n] != val.gval; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_type_getgroups=gid_t -else +else $as_nop ac_cv_type_getgroups=int fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -15973,111 +17091,136 @@ if test $ac_cv_type_getgroups = cross; then _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then : + $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1 +then : ac_cv_type_getgroups=gid_t -else +else $as_nop ac_cv_type_getgroups=int fi -rm -f conftest* +rm -rf conftest* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 -$as_echo "$ac_cv_type_getgroups" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 +printf "%s\n" "$ac_cv_type_getgroups" >&6; } -cat >>confdefs.h <<_ACEOF -#define GETGROUPS_T $ac_cv_type_getgroups -_ACEOF +printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = xyes; then : +if test "x$ac_cv_type_off_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define off_t long int -_ACEOF +printf "%s\n" "#define off_t long int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" -if test "x$ac_cv_type_mode_t" = xyes; then : +if test "x$ac_cv_type_mode_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define mode_t int -_ACEOF +printf "%s\n" "#define mode_t int" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -$as_echo_n "checking for uid_t in sys/types.h... " >&6; } -if ${ac_cv_type_uid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +printf %s "checking for uid_t in sys/types.h... " >&6; } +if test ${ac_cv_type_uid_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1; then : + $EGREP "uid_t" >/dev/null 2>&1 +then : ac_cv_type_uid_t=yes -else +else $as_nop ac_cv_type_uid_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -$as_echo "$ac_cv_type_uid_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +printf "%s\n" "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then -$as_echo "#define uid_t int" >>confdefs.h +printf "%s\n" "#define uid_t int" >>confdefs.h -$as_echo "#define gid_t int" >>confdefs.h +printf "%s\n" "#define gid_t int" >>confdefs.h fi -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : -else + ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default +" +if test "x$ac_cv_type_pid_t" = xyes +then : + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined _WIN64 && !defined __CYGWIN__ + LLP64 + #endif + +int +main (void) +{ + + ; + return 0; +} -cat >>confdefs.h <<_ACEOF -#define pid_t int _ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_pid_type='int' +else $as_nop + ac_pid_type='__int64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h + fi + ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : +if test "x$ac_cv_type_size_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF +printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" -if test "x$ac_cv_type_uintptr_t" = xyes; then : +if test "x$ac_cv_type_uintptr_t" = xyes +then : -$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h -else +else $as_nop for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; @@ -16087,15 +17230,14 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -cat >>confdefs.h <<_ACEOF -#define uintptr_t $ac_type -_ACEOF +printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h ac_type= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break done fi @@ -16103,172 +17245,225 @@ fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : +if test "x$ac_cv_type_ssize_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ssize_t int -_ACEOF +printf "%s\n" "#define ssize_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default" -if test "x$ac_cv_type_time_t" = xyes; then : +if test "x$ac_cv_type_time_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define time_t long -_ACEOF +printf "%s\n" "#define time_t long" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long" >&5 -$as_echo_n "checking for long long... " >&6; } -if ${bash_cv_type_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +printf %s "checking for long long int... " >&6; } +if test ${ac_cv_type_long_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_type_long_long_int=yes + case $ac_prog_cc_stdc in + no | c89) ;; + *) + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + if test "$cross_compiling" = yes +then : + : +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -long long ll = 1; int i = 63; +#include + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif int -main () +main (void) { - -long long llm = (long long) -1; -return ll << i | ll >> i | llm / ll | llm % ll; - +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_type_long_long='long long' -else - bash_cv_type_long_long='long' -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_long_long" >&5 -$as_echo "$bash_cv_type_long_long" >&6; } -if test "$bash_cv_type_long_long" = 'long long'; then - $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h +if ac_fn_c_try_run "$LINENO" +then : +else $as_nop + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi;; + esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +printf "%s\n" "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5 -$as_echo_n "checking for unsigned long long... " >&6; } -if ${bash_cv_type_unsigned_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +printf %s "checking for unsigned long long int... " >&6; } +if test ${ac_cv_type_unsigned_long_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_type_unsigned_long_long_int=yes + case $ac_prog_cc_stdc in + no | c89) ;; + *) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -unsigned long long ull = 1; int i = 63; + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; int -main () +main (void) { - -unsigned long long ullmax = (unsigned long long) -1; -return ull << i | ull >> i | ullmax / ull | ullmax % ull; - +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); ; return 0; } + _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_type_unsigned_long_long='unsigned long long' -else - bash_cv_type_unsigned_long_long='unsigned long' -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_unsigned_long_long" >&5 -$as_echo "$bash_cv_type_unsigned_long_long" >&6; } -if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then - $as_echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>confdefs.h +if ac_fn_c_try_link "$LINENO" +then : +else $as_nop + ac_cv_type_unsigned_long_long_int=no fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext;; + esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if ${ac_cv_type_signal+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 +printf %s "checking for sig_atomic_t in signal.h... " >&6; } +if test ${ac_cv_have_sig_atomic_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include - + #include int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 -$as_echo_n "checking for sig_atomic_t in signal.h... " >&6; } -if ${ac_cv_have_sig_atomic_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include - -int -main () +main (void) { sig_atomic_t x; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_have_sig_atomic_t=yes -else +else $as_nop ac_cv_have_sig_atomic_t=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 -$as_echo "$ac_cv_have_sig_atomic_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 +printf "%s\n" "$ac_cv_have_sig_atomic_t" >&6; } if test "$ac_cv_have_sig_atomic_t" = "no" then - ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default" -if test "x$ac_cv_type_sig_atomic_t" = xyes; then : -else -cat >>confdefs.h <<_ACEOF -#define sig_atomic_t int +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t" >&5 +printf %s "checking for sig_atomic_t... " >&6; } +if test ${bash_cv_type_sig_atomic_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#if HAVE_STDLIB_H +#include +#endif +#if HAVE_STDDEF_H +#include +#endif +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#endif +#include + _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sig_atomic_t" >/dev/null 2>&1 +then : + bash_cv_type_sig_atomic_t=yes +else $as_nop + bash_cv_type_sig_atomic_t=no +fi +rm -rf conftest* + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5 +printf "%s\n" "$bash_cv_type_sig_atomic_t" >&6; } + +if test $bash_cv_type_sig_atomic_t = no; then + printf "%s\n" "#define sig_atomic_t int" >>confdefs.h fi @@ -16279,17 +17474,19 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 -$as_echo_n "checking size of char... " >&6; } -if ${ac_cv_sizeof_char+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 +printf %s "checking size of char... " >&6; } +if test ${ac_cv_sizeof_char+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_char" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else @@ -16298,31 +17495,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 -$as_echo "$ac_cv_sizeof_char" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 +printf "%s\n" "$ac_cv_sizeof_char" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR $ac_cv_sizeof_char -_ACEOF +printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if ${ac_cv_sizeof_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +printf %s "checking size of short... " >&6; } +if test ${ac_cv_sizeof_short+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else @@ -16331,31 +17528,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +printf "%s\n" "$ac_cv_sizeof_short" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF +printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if ${ac_cv_sizeof_int+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +printf %s "checking size of int... " >&6; } +if test ${ac_cv_sizeof_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else @@ -16364,31 +17561,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +printf "%s\n" "$ac_cv_sizeof_int" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF +printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if ${ac_cv_sizeof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +printf %s "checking size of long... " >&6; } +if test ${ac_cv_sizeof_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else @@ -16397,31 +17594,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char *" >&5 -$as_echo_n "checking size of char *... " >&6; } -if ${ac_cv_sizeof_char_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char *" >&5 +printf %s "checking size of char *... " >&6; } +if test ${ac_cv_sizeof_char_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_char_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char *) See \`config.log' for more details" "$LINENO" 5; } else @@ -16430,31 +17627,64 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char_p" >&5 -$as_echo "$ac_cv_sizeof_char_p" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char_p" >&5 +printf "%s\n" "$ac_cv_sizeof_char_p" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p -_ACEOF +printf "%s\n" "#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 -$as_echo_n "checking size of double... " >&6; } -if ${ac_cv_sizeof_double+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +printf %s "checking size of size_t... " >&6; } +if test ${ac_cv_sizeof_size_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" +then : -else +else $as_nop + if test "$ac_cv_type_size_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (size_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_size_t=0 + fi +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } + + + +printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +printf %s "checking size of double... " >&6; } +if test ${ac_cv_sizeof_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else @@ -16463,31 +17693,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 -$as_echo "$ac_cv_sizeof_double" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +printf "%s\n" "$ac_cv_sizeof_double" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double -_ACEOF +printf "%s\n" "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +printf %s "checking size of long long... " >&6; } +if test ${ac_cv_sizeof_long_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else @@ -16496,36 +17726,32 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h ac_fn_c_check_type "$LINENO" "u_int" "ac_cv_type_u_int" "$ac_includes_default" -if test "x$ac_cv_type_u_int" = xyes; then : +if test "x$ac_cv_type_u_int" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_int unsigned int -_ACEOF +printf "%s\n" "#define u_int unsigned int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "u_long" "ac_cv_type_u_long" "$ac_includes_default" -if test "x$ac_cv_type_u_long" = xyes; then : +if test "x$ac_cv_type_u_long" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_long unsigned long -_ACEOF +printf "%s\n" "#define u_long unsigned long" >>confdefs.h fi @@ -16533,37 +17759,34 @@ fi if test "$ac_cv_sizeof_short" = 2; then ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_bits16_t" = xyes; then : +if test "x$ac_cv_type_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits16_t short -_ACEOF +printf "%s\n" "#define bits16_t short" >>confdefs.h fi elif test "$ac_cv_sizeof_char" = 2; then ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_bits16_t" = xyes; then : +if test "x$ac_cv_type_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits16_t char -_ACEOF +printf "%s\n" "#define bits16_t char" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_bits16_t" = xyes; then : +if test "x$ac_cv_type_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits16_t short -_ACEOF +printf "%s\n" "#define bits16_t short" >>confdefs.h fi @@ -16572,37 +17795,34 @@ fi if test "$ac_cv_sizeof_short" = 2; then ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits16_t" = xyes; then : +if test "x$ac_cv_type_u_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits16_t unsigned short -_ACEOF +printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h fi elif test "$ac_cv_sizeof_char" = 2; then ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits16_t" = xyes; then : +if test "x$ac_cv_type_u_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits16_t unsigned char -_ACEOF +printf "%s\n" "#define u_bits16_t unsigned char" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits16_t" = xyes; then : +if test "x$ac_cv_type_u_bits16_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits16_t unsigned short -_ACEOF +printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h fi @@ -16611,37 +17831,34 @@ fi if test "$ac_cv_sizeof_int" = 4; then ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_bits32_t" = xyes; then : +if test "x$ac_cv_type_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits32_t int -_ACEOF +printf "%s\n" "#define bits32_t int" >>confdefs.h fi elif test "$ac_cv_sizeof_long" = 4; then ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_bits32_t" = xyes; then : +if test "x$ac_cv_type_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits32_t long -_ACEOF +printf "%s\n" "#define bits32_t long" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_bits32_t" = xyes; then : +if test "x$ac_cv_type_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits32_t int -_ACEOF +printf "%s\n" "#define bits32_t int" >>confdefs.h fi @@ -16650,37 +17867,34 @@ fi if test "$ac_cv_sizeof_int" = 4; then ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits32_t" = xyes; then : +if test "x$ac_cv_type_u_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits32_t unsigned int -_ACEOF +printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h fi elif test "$ac_cv_sizeof_long" = 4; then ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits32_t" = xyes; then : +if test "x$ac_cv_type_u_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits32_t unsigned long -_ACEOF +printf "%s\n" "#define u_bits32_t unsigned long" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default" -if test "x$ac_cv_type_u_bits32_t" = xyes; then : +if test "x$ac_cv_type_u_bits32_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define u_bits32_t unsigned int -_ACEOF +printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h fi @@ -16689,61 +17903,56 @@ fi if test "$ac_cv_sizeof_char_p" = 8; then ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default" -if test "x$ac_cv_type_bits64_t" = xyes; then : +if test "x$ac_cv_type_bits64_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits64_t char * -_ACEOF +printf "%s\n" "#define bits64_t char *" >>confdefs.h fi elif test "$ac_cv_sizeof_double" = 8; then ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default" -if test "x$ac_cv_type_bits64_t" = xyes; then : +if test "x$ac_cv_type_bits64_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits64_t double -_ACEOF +printf "%s\n" "#define bits64_t double" >>confdefs.h fi elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default" -if test "x$ac_cv_type_bits64_t" = xyes; then : +if test "x$ac_cv_type_bits64_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits64_t long long -_ACEOF +printf "%s\n" "#define bits64_t long long" >>confdefs.h fi elif test "$ac_cv_sizeof_long" = 8; then ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default" -if test "x$ac_cv_type_bits64_t" = xyes; then : +if test "x$ac_cv_type_bits64_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits64_t long -_ACEOF +printf "%s\n" "#define bits64_t long" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default" -if test "x$ac_cv_type_bits64_t" = xyes; then : +if test "x$ac_cv_type_bits64_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define bits64_t double -_ACEOF +printf "%s\n" "#define bits64_t double" >>confdefs.h fi @@ -16753,60 +17962,57 @@ fi if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ptrdiff_t int -_ACEOF +printf "%s\n" "#define ptrdiff_t int" >>confdefs.h fi elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ptrdiff_t long -_ACEOF +printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ptrdiff_t long long -_ACEOF +printf "%s\n" "#define ptrdiff_t long long" >>confdefs.h fi else ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : +if test "x$ac_cv_type_ptrdiff_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define ptrdiff_t int -_ACEOF +printf "%s\n" "#define ptrdiff_t int" >>confdefs.h fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 -$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } -if ${ac_cv_header_stat_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 +printf %s "checking whether stat file-mode macros are broken... " >&6; } +if test ${ac_cv_header_stat_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -16829,27 +18035,29 @@ extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_header_stat_broken=no -else +else $as_nop ac_cv_header_stat_broken=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 -$as_echo "$ac_cv_header_stat_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 +printf "%s\n" "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then -$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h +printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 -$as_echo_n "checking whether #! works in shell scripts... " >&6; } -if ${ac_cv_sys_interpreter+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 +printf %s "checking whether #! works in shell scripts... " >&6; } +if test ${ac_cv_sys_interpreter+y} +then : + printf %s "(cached) " >&6 +else $as_nop echo '#! /bin/cat exit 69 ' >conftest @@ -16862,128 +18070,67 @@ else fi rm -f conftest fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 -$as_echo "$ac_cv_sys_interpreter" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 +printf "%s\n" "$ac_cv_sys_interpreter" >&6; } interpval=$ac_cv_sys_interpreter if test $ac_cv_sys_interpreter = yes; then -$as_echo "#define HAVE_HASH_BANG_EXEC 1" >>confdefs.h +printf "%s\n" "#define HAVE_HASH_BANG_EXEC 1" >>confdefs.h fi if test "$ac_cv_func_lstat" = "no"; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5 -$as_echo_n "checking for lstat... " >&6; } -if ${bash_cv_func_lstat+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5 +printf %s "checking for lstat... " >&6; } +if test ${bash_cv_func_lstat+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include + #include + #include int -main () +main (void) { lstat(".",(struct stat *)0); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_func_lstat=yes -else +else $as_nop bash_cv_func_lstat=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5 -$as_echo "$bash_cv_func_lstat" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5 +printf "%s\n" "$bash_cv_func_lstat" >&6; } if test $bash_cv_func_lstat = yes; then - $as_echo "#define HAVE_LSTAT 1" >>confdefs.h + printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h fi fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the ctype macros accept non-ascii characters" >&5 -$as_echo_n "checking whether the ctype macros accept non-ascii characters... " >&6; } -if ${bash_cv_func_ctype_nonascii+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&2;} - bash_cv_func_ctype_nonascii=no - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef HAVE_LOCALE_H -#include -#endif -#include -#include -#include - -int -main(c, v) -int c; -char *v[]; -{ - char *deflocale; - unsigned char x; - int r1, r2; - -#ifdef HAVE_SETLOCALE - /* We take a shot here. If that locale is not known, try the - system default. We try this one because '\342' (226) is - known to be a printable character in that locale. */ - deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); - if (deflocale == 0) - deflocale = setlocale(LC_ALL, ""); -#endif - - x = '\342'; - r1 = isprint(x); - x -= 128; - r2 = isprint(x); - exit (r1 == 0 || r2 == 0); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - bash_cv_func_ctype_nonascii=yes -else - bash_cv_func_ctype_nonascii=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_ctype_nonascii" >&5 -$as_echo "$bash_cv_func_ctype_nonascii" >&6; } -if test $bash_cv_func_ctype_nonascii = yes; then -$as_echo "#define CTYPE_NON_ASCII 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if dup2 fails to clear the close-on-exec flag" >&5 -$as_echo_n "checking if dup2 fails to clear the close-on-exec flag... " >&6; } -if ${bash_cv_dup2_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if dup2 fails to clear the close-on-exec flag" >&5 +printf %s "checking if dup2 fails to clear the close-on-exec flag... " >&6; } +if test ${bash_cv_dup2_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&2;} bash_cv_dup2_broken=no -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17006,36 +18153,39 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_dup2_broken=yes -else +else $as_nop bash_cv_dup2_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dup2_broken" >&5 -$as_echo "$bash_cv_dup2_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dup2_broken" >&5 +printf "%s\n" "$bash_cv_dup2_broken" >&6; } if test $bash_cv_dup2_broken = yes; then -$as_echo "#define DUP2_BROKEN 1" >>confdefs.h +printf "%s\n" "#define DUP2_BROKEN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pgrps need synchronization" >&5 -$as_echo_n "checking whether pgrps need synchronization... " >&6; } -if ${bash_cv_pgrp_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pgrps need synchronization" >&5 +printf %s "checking whether pgrps need synchronization... " >&6; } +if test ${bash_cv_pgrp_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&2;} bash_cv_pgrp_pipe=no -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17093,37 +18243,43 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_pgrp_pipe=no -else +else $as_nop bash_cv_pgrp_pipe=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_pgrp_pipe" >&5 -$as_echo "$bash_cv_pgrp_pipe" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_pgrp_pipe" >&5 +printf "%s\n" "$bash_cv_pgrp_pipe" >&6; } if test $bash_cv_pgrp_pipe = yes; then -$as_echo "#define PGRP_PIPE 1" >>confdefs.h +printf "%s\n" "#define PGRP_PIPE 1" >>confdefs.h fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5 +printf %s "checking for type of signal functions... " >&6; } +if test ${bash_cv_signal_vintage+y} +then : + printf %s "(cached) " >&6 +else $as_nop -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5 -$as_echo_n "checking for type of signal functions... " >&6; } -if ${bash_cv_signal_vintage+:} false; then : - $as_echo_n "(cached) " >&6 -else - +if test ${bash_cv_posix_signals+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include + int -main () +main (void) { sigset_t ss; @@ -17136,122 +18292,185 @@ main () return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : + bash_cv_posix_signals=yes +else $as_nop + bash_cv_posix_signals=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + + +if test $bash_cv_posix_signals = yes; then bash_cv_signal_vintage=posix else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int mask = sigmask(SIGINT); - sigsetmask(mask); sigblock(mask); sigpause(mask); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_signal_vintage=4.2bsd -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - RETSIGTYPE foo() { } -int -main () -{ - - int mask = sigmask(SIGINT); - sigset(SIGINT, foo); sigrelse(SIGINT); - sighold(SIGINT); sigpause(SIGINT); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_signal_vintage=svr3 -else - bash_cv_signal_vintage=v7 - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5 -$as_echo "$bash_cv_signal_vintage" >&6; } -if test "$bash_cv_signal_vintage" = posix; then -$as_echo "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h - -elif test "$bash_cv_signal_vintage" = "4.2bsd"; then -$as_echo "#define HAVE_BSD_SIGNALS 1" >>confdefs.h - -elif test "$bash_cv_signal_vintage" = svr3; then -$as_echo "#define HAVE_USG_SIGHOLD 1" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist and sys_nerr" >&5 -$as_echo_n "checking for sys_errlist and sys_nerr... " >&6; } -if ${bash_cv_sys_errlist+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${bash_cv_bsd_signals+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + +#include + int -main () +main (void) { -extern char *sys_errlist[]; - extern int sys_nerr; - char *msg = sys_errlist[sys_nerr - 1]; + +int mask = sigmask(SIGINT); +sigsetmask(mask); sigblock(mask); sigpause(mask); + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - bash_cv_sys_errlist=yes -else - bash_cv_sys_errlist=no +if ac_fn_c_try_link "$LINENO" +then : + bash_cv_bsd_signals=yes +else $as_nop + bash_cv_bsd_signals=no + fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_errlist" >&5 -$as_echo "$bash_cv_sys_errlist" >&6; } -if test $bash_cv_sys_errlist = yes; then -$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h + + + if test $bash_cv_bsd_signals = yes; then + bash_cv_signal_vintage=4.2bsd + else + if test ${bash_cv_sysv_signals+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +void foo() { } + +int +main (void) +{ + +int mask = sigmask(SIGINT); +sigset(SIGINT, foo); sigrelse(SIGINT); +sighold(SIGINT); sigpause(SIGINT); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + bash_cv_sysv_signals=yes +else $as_nop + bash_cv_sysv_signals=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + + + if test $bash_cv_sysv_signals = yes; then + bash_cv_signal_vintage=svr3 + else + bash_cv_signal_vintage=v7 + fi + fi +fi + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5 +printf "%s\n" "$bash_cv_signal_vintage" >&6; } +if test "$bash_cv_signal_vintage" = posix; then +printf "%s\n" "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h + +elif test "$bash_cv_signal_vintage" = "4.2bsd"; then +printf "%s\n" "#define HAVE_BSD_SIGNALS 1" >>confdefs.h + +elif test "$bash_cv_signal_vintage" = svr3; then +printf "%s\n" "#define HAVE_USG_SIGHOLD 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_siglist in system C library" >&5 -$as_echo_n "checking for sys_siglist in system C library... " >&6; } -if ${bash_cv_sys_siglist+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys_errlist and sys_nerr" >&5 +printf %s "checking for sys_errlist and sys_nerr... " >&6; } +if test ${bash_cv_sys_errlist+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main (void) +{ + +extern char *sys_errlist[]; +extern int sys_nerr; +char *msg = sys_errlist[sys_nerr - 1]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + bash_cv_sys_errlist=yes +else $as_nop + bash_cv_sys_errlist=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_errlist" >&5 +printf "%s\n" "$bash_cv_sys_errlist" >&6; } +if test $bash_cv_sys_errlist = yes; then +printf "%s\n" "#define HAVE_SYS_ERRLIST 1" >>confdefs.h + +fi + +ac_fn_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +# include +#endif + +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_sys_siglist" = xyes +then : + ac_have_decl=1 +else $as_nop + ac_have_decl=0 +fi +printf "%s\n" "#define HAVE_DECL_SYS_SIGLIST $ac_have_decl" >>confdefs.h + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys_siglist in system C library" >&5 +printf %s "checking for sys_siglist in system C library... " >&6; } +if test ${bash_cv_sys_siglist+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&2;} bash_cv_sys_siglist=no -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17270,10 +18489,12 @@ main() char *msg = sys_siglist[2]; exit(msg == 0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_sys_siglist=yes -else +else $as_nop bash_cv_sys_siglist=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17282,18 +18503,19 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_siglist" >&5 -$as_echo "$bash_cv_sys_siglist" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_siglist" >&5 +printf "%s\n" "$bash_cv_sys_siglist" >&6; } if test $bash_cv_sys_siglist = yes; then -$as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h +printf "%s\n" "#define HAVE_SYS_SIGLIST 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in signal.h or unistd.h" >&5 -$as_echo_n "checking for _sys_siglist in signal.h or unistd.h... " >&6; } -if ${bash_cv_decl_under_sys_siglist+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in signal.h or unistd.h" >&5 +printf %s "checking for _sys_siglist in signal.h or unistd.h... " >&6; } +if test ${bash_cv_decl_under_sys_siglist+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17303,38 +18525,42 @@ else #include #endif int -main () +main (void) { char *msg = _sys_siglist[2]; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_decl_under_sys_siglist=yes -else +else $as_nop bash_cv_decl_under_sys_siglist=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_under_sys_siglist" >&5 -$as_echo "$bash_cv_decl_under_sys_siglist" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_under_sys_siglist" >&5 +printf "%s\n" "$bash_cv_decl_under_sys_siglist" >&6; } if test $bash_cv_decl_under_sys_siglist = yes; then -$as_echo "#define UNDER_SYS_SIGLIST_DECLARED 1" >>confdefs.h +printf "%s\n" "#define UNDER_SYS_SIGLIST_DECLARED 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in system C library" >&5 -$as_echo_n "checking for _sys_siglist in system C library... " >&6; } -if ${bash_cv_under_sys_siglist+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in system C library" >&5 +printf %s "checking for _sys_siglist in system C library... " >&6; } +if test ${bash_cv_under_sys_siglist+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&2;} bash_cv_under_sys_siglist=no -else + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17353,10 +18579,12 @@ main() char *msg = (char *)_sys_siglist[2]; exit(msg == 0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_under_sys_siglist=yes -else +else $as_nop bash_cv_under_sys_siglist=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -17365,64 +18593,29 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_under_sys_siglist" >&5 -$as_echo "$bash_cv_under_sys_siglist" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_under_sys_siglist" >&5 +printf "%s\n" "$bash_cv_under_sys_siglist" >&6; } if test $bash_cv_under_sys_siglist = yes; then -$as_echo "#define HAVE_UNDER_SYS_SIGLIST 1" >>confdefs.h +printf "%s\n" "#define HAVE_UNDER_SYS_SIGLIST 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether signal handlers are of type void" >&5 -$as_echo_n "checking whether signal handlers are of type void... " >&6; } -if ${bash_cv_void_sighandler+:} false; then : - $as_echo_n "(cached) " >&6 -else + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_t" >&5 +printf %s "checking for clock_t... " >&6; } +if test ${bash_cv_type_clock_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include -#ifdef signal -#undef signal -#endif -#ifdef __cplusplus -extern "C" -#endif -void (*signal ()) (); -int -main () -{ -int i; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_void_sighandler=yes -else - bash_cv_void_sighandler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_void_sighandler" >&5 -$as_echo "$bash_cv_void_sighandler" >&6; } -if test $bash_cv_void_sighandler = yes; then -$as_echo "#define VOID_SIGHANDLER 1" >>confdefs.h - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_t" >&5 -$as_echo_n "checking for clock_t... " >&6; } -if ${bash_cv_type_clock_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17435,37 +18628,39 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "clock_t" >/dev/null 2>&1; then : + $EGREP "clock_t" >/dev/null 2>&1 +then : bash_cv_type_clock_t=yes -else +else $as_nop bash_cv_type_clock_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_clock_t" >&5 -$as_echo "$bash_cv_type_clock_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_clock_t" >&5 +printf "%s\n" "$bash_cv_type_clock_t" >&6; } if test $bash_cv_type_clock_t = no; then - cat >>confdefs.h <<_ACEOF -#define clock_t long -_ACEOF + printf "%s\n" "#define clock_t long" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigset_t" >&5 -$as_echo_n "checking for sigset_t... " >&6; } -if ${bash_cv_type_sigset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sigset_t" >&5 +printf %s "checking for sigset_t... " >&6; } +if test ${bash_cv_type_sigset_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17478,213 +18673,40 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sigset_t" >/dev/null 2>&1; then : + $EGREP "sigset_t" >/dev/null 2>&1 +then : bash_cv_type_sigset_t=yes -else +else $as_nop bash_cv_type_sigset_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sigset_t" >&5 -$as_echo "$bash_cv_type_sigset_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sigset_t" >&5 +printf "%s\n" "$bash_cv_type_sigset_t" >&6; } if test $bash_cv_type_sigset_t = no; then - cat >>confdefs.h <<_ACEOF -#define sigset_t int -_ACEOF - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t" >&5 -$as_echo_n "checking for sig_atomic_t... " >&6; } -if ${bash_cv_type_sig_atomic_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sig_atomic_t" >/dev/null 2>&1; then : - bash_cv_type_sig_atomic_t=yes -else - bash_cv_type_sig_atomic_t=no -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5 -$as_echo "$bash_cv_type_sig_atomic_t" >&6; } - -if test $bash_cv_type_sig_atomic_t = no; then - cat >>confdefs.h <<_ACEOF -#define sig_atomic_t int -_ACEOF - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for quad_t" >&5 -$as_echo_n "checking for quad_t... " >&6; } -if ${bash_cv_type_quad_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif - - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "quad_t" >/dev/null 2>&1; then : - bash_cv_type_quad_t=yes -else - bash_cv_type_quad_t=no -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_quad_t" >&5 -$as_echo "$bash_cv_type_quad_t" >&6; } -if test $bash_cv_type_quad_t = yes; then - $as_echo "#define HAVE_QUAD_T 1" >>confdefs.h - - fi -if test $bash_cv_type_quad_t = no; then - cat >>confdefs.h <<_ACEOF -#define quad_t long -_ACEOF - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 -$as_echo_n "checking for intmax_t... " >&6; } -if ${bash_cv_type_intmax_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif - - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "intmax_t" >/dev/null 2>&1; then : - bash_cv_type_intmax_t=yes -else - bash_cv_type_intmax_t=no -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_intmax_t" >&5 -$as_echo "$bash_cv_type_intmax_t" >&6; } - -if test $bash_cv_type_intmax_t = no; then - cat >>confdefs.h <<_ACEOF -#define intmax_t $bash_cv_type_long_long -_ACEOF - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uintmax_t" >&5 -$as_echo_n "checking for uintmax_t... " >&6; } -if ${bash_cv_type_uintmax_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif - - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uintmax_t" >/dev/null 2>&1; then : - bash_cv_type_uintmax_t=yes -else - bash_cv_type_uintmax_t=no -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_uintmax_t" >&5 -$as_echo "$bash_cv_type_uintmax_t" >&6; } - -if test $bash_cv_type_uintmax_t = no; then - cat >>confdefs.h <<_ACEOF -#define uintmax_t $bash_cv_type_unsigned_long_long -_ACEOF + printf "%s\n" "#define sigset_t int" >>confdefs.h fi if test "$ac_cv_header_sys_socket_h" = "yes"; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 -$as_echo_n "checking for socklen_t... " >&6; } -if ${bash_cv_type_socklen_t+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 +printf %s "checking for socklen_t... " >&6; } +if test ${bash_cv_type_socklen_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17697,113 +18719,232 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "socklen_t" >/dev/null 2>&1; then : + $EGREP "socklen_t" >/dev/null 2>&1 +then : bash_cv_type_socklen_t=yes -else +else $as_nop bash_cv_type_socklen_t=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_socklen_t" >&5 -$as_echo "$bash_cv_type_socklen_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_socklen_t" >&5 +printf "%s\n" "$bash_cv_type_socklen_t" >&6; } if test $bash_cv_type_socklen_t = yes; then - $as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h + printf "%s\n" "#define HAVE_SOCKLEN_T 1" >>confdefs.h fi if test $bash_cv_type_socklen_t = no; then - cat >>confdefs.h <<_ACEOF -#define socklen_t unsigned int -_ACEOF + printf "%s\n" "#define socklen_t unsigned int" >>confdefs.h fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size and type of struct rlimit fields" >&5 -$as_echo_n "checking for size and type of struct rlimit fields... " >&6; } -if ${bash_cv_type_rlimit+:} false; then : - $as_echo_n "(cached) " >&6 -else + +ac_fn_c_check_type "$LINENO" "quad_t" "ac_cv_type_quad_t" "$ac_includes_default" +if test "x$ac_cv_type_quad_t" = xyes +then : + printf "%s\n" "#define HAVE_QUAD_T 1" >>confdefs.h + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for type of struct rlimit fields" >&5 +printf %s "checking for type of struct rlimit fields... " >&6; } +if test ${bash_cv_type_rlimit+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include int -main () +main (void) { rlim_t xxx; + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_type_rlimit=rlim_t -else +else $as_nop -if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check quad_t if cross compiling -- defaulting to long" >&5 -$as_echo "$as_me: WARNING: cannot check quad_t if cross compiling -- defaulting to long" >&2;} - bash_cv_type_rlimit=long -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for size of struct rlimit fields" >&5 +printf %s "checking for size of struct rlimit fields... " >&6; } +if test ${bash_cv_sizeof_rlim_cur+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&5 +printf "%s\n" "$as_me: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&2;} + bash_cv_sizeof_rlim_cur=$ac_cv_sizeof_long + +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef HAVE_SYS_TIME_H #include -#include +#endif #include -int +#include main() { -#ifdef HAVE_QUAD_T - struct rlimit rl; - if (sizeof(rl.rlim_cur) == sizeof(quad_t)) - exit(0); -#endif - exit(1); +struct rlimit r; +exit(sizeof (r.rlim_cur)); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - bash_cv_type_rlimit=quad_t -else - bash_cv_type_rlimit=long +if ac_fn_c_try_run "$LINENO" +then : + bash_cv_sizeof_rlim_cur=$? +else $as_nop + bash_cv_sizeof_rlim_cur=$? fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_rlim_cur" >&5 +printf "%s\n" "$bash_cv_sizeof_rlim_cur" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for size of quad_t" >&5 +printf %s "checking for size of quad_t... " >&6; } +if test ${bash_cv_sizeof_quad_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&5 +printf "%s\n" "$as_me: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&2;} + bash_cv_sizeof_quad_t=0 + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#endif + +main() +{ +#if HAVE_QUAD_T +quad_t x; +exit(sizeof (x)); +#else +exit (0); +#endif +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + bash_cv_sizeof_quad_t=$? +else $as_nop + bash_cv_sizeof_quad_t=$? +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_rlimit" >&5 -$as_echo "$bash_cv_type_rlimit" >&6; } -if test $bash_cv_type_rlimit = quad_t; then -$as_echo "#define RLIMTYPE quad_t" >>confdefs.h +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_quad_t" >&5 +printf "%s\n" "$bash_cv_sizeof_quad_t" >&6; } + +if test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long; then + bash_cv_type_rlimit='unsigned long' +elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long_long; then + bash_cv_type_rlimit='unsigned long long' +elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_int; then + bash_cv_type_rlimit='unsigned int' +elif test $bash_cv_sizeof_rlim_cur = $bash_cv_sizeof_quad_t; then + bash_cv_type_rlimit='quad_t' +else + bash_cv_type_rlimit='unsigned long' +fi -elif test $bash_cv_type_rlimit = rlim_t; then -$as_echo "#define RLIMTYPE rlim_t" >>confdefs.h fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_rlimit" >&5 +printf "%s\n" "$bash_cv_type_rlimit" >&6; } +printf "%s\n" "#define RLIMTYPE $bash_cv_type_rlimit" >>confdefs.h + + + + + + ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default" +if test "x$ac_cv_type_intmax_t" = xyes +then : + +printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h + +else $as_nop + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long int' \ + || ac_type='long int' + +printf "%s\n" "#define intmax_t $ac_type" >>confdefs.h + +fi + + + + + ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default" +if test "x$ac_cv_type_uintmax_t" = xyes +then : + +printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h + +else $as_nop + test $ac_cv_type_unsigned_long_long_int = yes \ + && ac_type='unsigned long long int' \ + || ac_type='unsigned long int' + +printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h + +fi + # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of intmax_t" >&5 -$as_echo_n "checking size of intmax_t... " >&6; } -if ${ac_cv_sizeof_intmax_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t" "$ac_includes_default"; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of intmax_t" >&5 +printf %s "checking size of intmax_t... " >&6; } +if test ${ac_cv_sizeof_intmax_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t" "$ac_includes_default" +then : -else +else $as_nop if test "$ac_cv_type_intmax_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (intmax_t) See \`config.log' for more details" "$LINENO" 5; } else @@ -17812,14 +18953,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intmax_t" >&5 -$as_echo "$ac_cv_sizeof_intmax_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intmax_t" >&5 +printf "%s\n" "$ac_cv_sizeof_intmax_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INTMAX_T $ac_cv_sizeof_intmax_t -_ACEOF +printf "%s\n" "#define SIZEOF_INTMAX_T $ac_cv_sizeof_intmax_t" >>confdefs.h @@ -17829,8 +18968,9 @@ ac_fn_c_check_member "$LINENO" "struct termios" "c_line" "ac_cv_member_struct_te #include " -if test "x$ac_cv_member_struct_termios_c_line" = xyes; then : - $as_echo "#define TERMIOS_LDISC 1" >>confdefs.h +if test "x$ac_cv_member_struct_termios_c_line" = xyes +then : + printf "%s\n" "#define TERMIOS_LDISC 1" >>confdefs.h fi @@ -17841,21 +18981,23 @@ ac_fn_c_check_member "$LINENO" "struct termio" "c_line" "ac_cv_member_struct_ter #include " -if test "x$ac_cv_member_struct_termio_c_line" = xyes; then : - $as_echo "#define TERMIO_LDISC 1" >>confdefs.h +if test "x$ac_cv_member_struct_termio_c_line" = xyes +then : + printf "%s\n" "#define TERMIO_LDISC 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5 -$as_echo_n "checking for struct dirent.d_ino... " >&6; } -if ${bash_cv_dirent_has_dino+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5 +printf %s "checking for struct dirent.d_ino... " >&6; } +if test ${bash_cv_dirent_has_d_ino+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +ac_fn_c_check_member "$LINENO" "struct dirent" "d_ino" "ac_cv_member_struct_dirent_d_ino" " #include #include #ifdef HAVE_UNISTD_H @@ -17876,40 +19018,37 @@ else # endif #endif /* HAVE_DIRENT_H */ -int -main () -{ +" +if test "x$ac_cv_member_struct_dirent_d_ino" = xyes +then : -struct dirent d; int z; z = d.d_ino; +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_dirent_has_dino=yes -else - bash_cv_dirent_has_dino=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +bash_cv_dirent_has_d_ino=yes +else $as_nop + bash_cv_dirent_has_d_ino=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_dino" >&5 -$as_echo "$bash_cv_dirent_has_dino" >&6; } -if test $bash_cv_dirent_has_dino = yes; then -$as_echo "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_ino" >&5 +printf "%s\n" "$bash_cv_dirent_has_d_ino" >&6; } +if test $bash_cv_dirent_has_d_ino = yes; then +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5 -$as_echo_n "checking for struct dirent.d_fileno... " >&6; } -if ${bash_cv_dirent_has_d_fileno+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5 +printf %s "checking for struct dirent.d_fileno... " >&6; } +if test ${bash_cv_dirent_has_d_fileno+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +ac_fn_c_check_member "$LINENO" "struct dirent" "d_fileno" "ac_cv_member_struct_dirent_d_fileno" " #include #include #ifdef HAVE_UNISTD_H @@ -17930,40 +19069,37 @@ else # endif #endif /* HAVE_DIRENT_H */ -int -main () -{ +" +if test "x$ac_cv_member_struct_dirent_d_fileno" = xyes +then : -struct dirent d; int z; z = d.d_fileno; +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_dirent_has_d_fileno=yes -else +bash_cv_dirent_has_d_fileno=yes +else $as_nop bash_cv_dirent_has_d_fileno=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5 -$as_echo "$bash_cv_dirent_has_d_fileno" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5 +printf "%s\n" "$bash_cv_dirent_has_d_fileno" >&6; } if test $bash_cv_dirent_has_d_fileno = yes; then -$as_echo "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_namlen" >&5 -$as_echo_n "checking for struct dirent.d_namlen... " >&6; } -if ${bash_cv_dirent_has_d_namlen+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_namlen" >&5 +printf %s "checking for struct dirent.d_namlen... " >&6; } +if test ${bash_cv_dirent_has_d_namlen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +ac_fn_c_check_member "$LINENO" "struct dirent" "d_namlen" "ac_cv_member_struct_dirent_d_namlen" " #include #include #ifdef HAVE_UNISTD_H @@ -17984,94 +19120,130 @@ else # endif #endif /* HAVE_DIRENT_H */ -int -main () -{ +" +if test "x$ac_cv_member_struct_dirent_d_namlen" = xyes +then : -struct dirent d; int z; z = d.d_namlen; +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_dirent_has_d_namlen=yes -else +bash_cv_dirent_has_d_namlen=yes +else $as_nop bash_cv_dirent_has_d_namlen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_namlen" >&5 -$as_echo "$bash_cv_dirent_has_d_namlen" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_namlen" >&5 +printf "%s\n" "$bash_cv_dirent_has_d_namlen" >&6; } if test $bash_cv_dirent_has_d_namlen = yes; then -$as_echo "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h +printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5 -$as_echo_n "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; } -if ${bash_cv_struct_winsize_header+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5 +printf %s "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; } +if test ${bash_cv_struct_winsize_header+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +if test ${bash_cv_struct_winsize_ioctl+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include + int -main () +main (void) { + struct winsize x; +if (sizeof (x) > 0) return (0); + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_struct_winsize_header=ioctl_h -else +if ac_fn_c_try_compile "$LINENO" +then : + bash_cv_struct_winsize_ioctl=yes +else $as_nop + bash_cv_struct_winsize_ioctl=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + + +if test ${bash_cv_struct_winsize_termios+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include -#include +#include + int -main () +main (void) { + struct winsize x; +if (sizeof (x) > 0) return (0); + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : + bash_cv_struct_winsize_termios=yes +else $as_nop + bash_cv_struct_winsize_termios=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + + + +if test $bash_cv_struct_winsize_ioctl = yes; then + bash_cv_struct_winsize_header=ioctl_h +elif test $bash_cv_struct_winsize_termios = yes; then bash_cv_struct_winsize_header=termios_h else bash_cv_struct_winsize_header=other fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bash_cv_struct_winsize_header = ioctl_h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5 -$as_echo "sys/ioctl.h" >&6; } - $as_echo "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5 +printf "%s\n" "sys/ioctl.h" >&6; } + printf "%s\n" "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h elif test $bash_cv_struct_winsize_header = termios_h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5 -$as_echo "termios.h" >&6; } - $as_echo "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5 +printf "%s\n" "termios.h" >&6; } + printf "%s\n" "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval in sys/time.h and time.h" >&5 -$as_echo_n "checking for struct timeval in sys/time.h and time.h... " >&6; } -if ${bash_cv_struct_timeval+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval in sys/time.h and time.h" >&5 +printf %s "checking for struct timeval in sys/time.h and time.h... " >&6; } +if test ${bash_cv_struct_timeval+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H @@ -18080,7 +19252,7 @@ else #include int -main () +main (void) { static struct timeval x; x.tv_sec = x.tv_usec; @@ -18088,44 +19260,45 @@ static struct timeval x; x.tv_sec = x.tv_usec; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_struct_timeval=yes -else +else $as_nop bash_cv_struct_timeval=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timeval" >&5 -$as_echo "$bash_cv_struct_timeval" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timeval" >&5 +printf "%s\n" "$bash_cv_struct_timeval" >&6; } if test $bash_cv_struct_timeval = yes; then - $as_echo "#define HAVE_TIMEVAL 1" >>confdefs.h + printf "%s\n" "#define HAVE_TIMEVAL 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test ${ac_cv_struct_tm+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct tm tm; int *p = &tm.tm_sec; @@ -18134,18 +19307,19 @@ struct tm tm; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_tm=time.h -else +else $as_nop ac_cv_struct_tm=sys/time.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h +printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi @@ -18153,37 +19327,35 @@ ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_ #include <$ac_cv_struct_tm> " -if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TM_TM_ZONE 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then -$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h +printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else - ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include -" -if test "x$ac_cv_have_decl_tzname" = xyes; then : + ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_tzname" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi +printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_TZNAME $ac_have_decl -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 -$as_echo_n "checking for tzname... " >&6; } -if ${ac_cv_var_tzname+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 +printf %s "checking for tzname... " >&6; } +if test ${ac_cv_var_tzname+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -18192,35 +19364,37 @@ extern char *tzname[]; #endif int -main () +main (void) { return tzname[0][0]; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_var_tzname=yes -else +else $as_nop ac_cv_var_tzname=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 -$as_echo "$ac_cv_var_tzname" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 +printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then -$as_echo "#define HAVE_TZNAME 1" >>confdefs.h +printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timezone in sys/time.h and time.h" >&5 -$as_echo_n "checking for struct timezone in sys/time.h and time.h... " >&6; } -if ${bash_cv_struct_timezone+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timezone in sys/time.h and time.h" >&5 +printf %s "checking for struct timezone in sys/time.h and time.h... " >&6; } +if test ${bash_cv_struct_timezone+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18228,47 +19402,51 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "struct timezone" >/dev/null 2>&1; then : + $EGREP "struct timezone" >/dev/null 2>&1 +then : bash_cv_struct_timezone=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "struct timezone" >/dev/null 2>&1; then : + $EGREP "struct timezone" >/dev/null 2>&1 +then : bash_cv_struct_timezone=yes -else +else $as_nop bash_cv_struct_timezone=no fi -rm -f conftest* +rm -rf conftest* fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timezone" >&5 -$as_echo "$bash_cv_struct_timezone" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timezone" >&5 +printf "%s\n" "$bash_cv_struct_timezone" >&6; } if test $bash_cv_struct_timezone = yes; then - $as_echo "#define HAVE_STRUCT_TIMEZONE 1" >>confdefs.h + printf "%s\n" "#define HAVE_STRUCT_TIMEZONE 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for offset of exit status in return status from wait" >&5 -$as_echo_n "checking for offset of exit status in return status from wait... " >&6; } -if ${bash_cv_wexitstatus_offset+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&5 -$as_echo "$as_me: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for offset of exit status in return status from wait" >&5 +printf %s "checking for offset of exit status in return status from wait... " >&6; } +if test ${bash_cv_wexitstatus_offset+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&5 +printf "%s\n" "$as_me: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&2;} bash_cv_wexitstatus_offset=0 -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18307,9 +19485,10 @@ main(c, v) } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_wexitstatus_offset=0 -else +else $as_nop bash_cv_wexitstatus_offset=$? fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18319,123 +19498,127 @@ fi fi if test "$bash_cv_wexitstatus_offset" -gt 32 ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bad exit status from test program -- defaulting to 0" >&5 -$as_echo "$as_me: WARNING: bad exit status from test program -- defaulting to 0" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: bad exit status from test program -- defaulting to 0" >&5 +printf "%s\n" "$as_me: WARNING: bad exit status from test program -- defaulting to 0" >&2;} bash_cv_wexitstatus_offset=0 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wexitstatus_offset" >&5 -$as_echo "$bash_cv_wexitstatus_offset" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wexitstatus_offset" >&5 +printf "%s\n" "$bash_cv_wexitstatus_offset" >&6; } -cat >>confdefs.h <<_ACEOF -#define WEXITSTATUS_OFFSET $bash_cv_wexitstatus_offset -_ACEOF +printf "%s\n" "#define WEXITSTATUS_OFFSET $bash_cv_wexitstatus_offset" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 -$as_echo_n "checking for struct timespec in ... " >&6; } -if ${bash_cv_sys_struct_timespec_in_time_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 +printf %s "checking for struct timespec in ... " >&6; } +if test ${bash_cv_sys_struct_timespec_in_time_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_sys_struct_timespec_in_time_h=yes -else +else $as_nop bash_cv_sys_struct_timespec_in_time_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_time_h" >&5 -$as_echo "$bash_cv_sys_struct_timespec_in_time_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_time_h" >&5 +printf "%s\n" "$bash_cv_sys_struct_timespec_in_time_h" >&6; } HAVE_STRUCT_TIMESPEC=0 TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 if test $bash_cv_sys_struct_timespec_in_time_h = yes; then - $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h - $as_echo "#define TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h TIME_H_DEFINES_STRUCT_TIMESPEC=1 else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 -$as_echo_n "checking for struct timespec in ... " >&6; } -if ${bash_cv_sys_struct_timespec_in_sys_time_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 +printf %s "checking for struct timespec in ... " >&6; } +if test ${bash_cv_sys_struct_timespec_in_sys_time_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_sys_struct_timespec_in_sys_time_h=yes -else +else $as_nop bash_cv_sys_struct_timespec_in_sys_time_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_sys_time_h" >&5 -$as_echo "$bash_cv_sys_struct_timespec_in_sys_time_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_sys_time_h" >&5 +printf "%s\n" "$bash_cv_sys_struct_timespec_in_sys_time_h" >&6; } if test $bash_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 - $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h - $as_echo "#define SYS_TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define SYS_TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 -$as_echo_n "checking for struct timespec in ... " >&6; } -if ${bash_cv_sys_struct_timespec_in_pthread_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 +printf %s "checking for struct timespec in ... " >&6; } +if test ${bash_cv_sys_struct_timespec_in_pthread_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_sys_struct_timespec_in_pthread_h=yes -else +else $as_nop bash_cv_sys_struct_timespec_in_pthread_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_pthread_h" >&5 -$as_echo "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_pthread_h" >&5 +printf "%s\n" "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; } if test $bash_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 - $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h - $as_echo "#define PTHREAD_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h + printf "%s\n" "#define PTHREAD_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h fi fi @@ -18452,17 +19635,17 @@ $as_echo "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; } ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include #include " -if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 -$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; } -if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 +printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; } +if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18476,7 +19659,7 @@ else struct stat st; int -main () +main (void) { st.st_atim = ts; @@ -18485,51 +19668,49 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes -else +else $as_nop ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 -$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 +printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then -$as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h +printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi -else +else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include #include " -if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h -else +else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include #include " -if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h -else +else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include #include " -if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h fi @@ -18543,45 +19724,49 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5 -$as_echo_n "checking for sbrk... " >&6; } - if ${ac_cv_func_sbrk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5 +printf %s "checking for sbrk... " >&6; } + if test ${ac_cv_func_sbrk+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { void *x = sbrk (4096); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_func_sbrk=yes -else +else $as_nop ac_cv_func_sbrk=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5 -$as_echo "$ac_cv_func_sbrk" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5 +printf "%s\n" "$ac_cv_func_sbrk" >&6; } if test X$ac_cv_func_sbrk = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5 -$as_echo_n "checking for working sbrk... " >&6; } -if ${bash_cv_func_sbrk+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5 -$as_echo "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5 +printf %s "checking for working sbrk... " >&6; } +if test ${bash_cv_func_sbrk+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5 +printf "%s\n" "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;} bash_cv_func_sbrk=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18598,74 +19783,79 @@ main(int c, char **v) } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_func_sbrk=yes -else - bash_cv_func_snprintf=sbrk +else $as_nop + bash_cv_func_sbrk=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5 -$as_echo "$bash_cv_func_sbrk" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5 +printf "%s\n" "$bash_cv_func_sbrk" >&6; } if test $bash_cv_func_sbrk = no; then ac_cv_func_sbrk=no fi fi if test $ac_cv_func_sbrk = yes; then -$as_echo "#define HAVE_SBRK 1" >>confdefs.h +printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the existence of strsignal" >&5 -$as_echo_n "checking for the existence of strsignal... " >&6; } -if ${bash_cv_have_strsignal+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the existence of strsignal" >&5 +printf %s "checking for the existence of strsignal... " >&6; } +if test ${bash_cv_have_strsignal+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int -main () +main (void) { char *s = (char *)strsignal(2); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_have_strsignal=yes -else +else $as_nop bash_cv_have_strsignal=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_strsignal" >&5 -$as_echo "$bash_cv_have_strsignal" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_strsignal" >&5 +printf "%s\n" "$bash_cv_have_strsignal" >&6; } if test $bash_cv_have_strsignal = yes; then -$as_echo "#define HAVE_STRSIGNAL 1" >>confdefs.h +printf "%s\n" "#define HAVE_STRSIGNAL 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if opendir() opens non-directories" >&5 -$as_echo_n "checking if opendir() opens non-directories... " >&6; } -if ${bash_cv_opendir_not_robust+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if opendir() opens non-directories" >&5 +printf %s "checking if opendir() opens non-directories... " >&6; } +if test ${bash_cv_opendir_not_robust+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&2;} bash_cv_opendir_not_robust=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18712,10 +19902,12 @@ unlink("bash-aclocal/not_a_directory"); rmdir("bash-aclocal"); exit (dir == 0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_opendir_not_robust=yes -else +else $as_nop bash_cv_opendir_not_robust=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18724,24 +19916,26 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_opendir_not_robust" >&5 -$as_echo "$bash_cv_opendir_not_robust" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_opendir_not_robust" >&5 +printf "%s\n" "$bash_cv_opendir_not_robust" >&6; } if test $bash_cv_opendir_not_robust = yes; then -$as_echo "#define OPENDIR_NOT_ROBUST 1" >>confdefs.h +printf "%s\n" "#define OPENDIR_NOT_ROBUST 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ulimit can substitute for getdtablesize" >&5 -$as_echo_n "checking whether ulimit can substitute for getdtablesize... " >&6; } -if ${bash_cv_ulimit_maxfds+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ulimit can substitute for getdtablesize" >&5 +printf %s "checking whether ulimit can substitute for getdtablesize... " >&6; } +if test ${bash_cv_ulimit_maxfds+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&2;} bash_cv_ulimit_maxfds=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18757,9 +19951,10 @@ exit (maxfds == -1L); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_ulimit_maxfds=yes -else +else $as_nop bash_cv_ulimit_maxfds=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18768,10 +19963,10 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_ulimit_maxfds" >&5 -$as_echo "$bash_cv_ulimit_maxfds" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_ulimit_maxfds" >&5 +printf "%s\n" "$bash_cv_ulimit_maxfds" >&6; } if test $bash_cv_ulimit_maxfds = yes; then -$as_echo "#define ULIMIT_MAXFDS 1" >>confdefs.h +printf "%s\n" "#define ULIMIT_MAXFDS 1" >>confdefs.h fi @@ -18780,32 +19975,30 @@ fi - - - ac_fn_c_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include -" -if test "x$ac_cv_have_decl_fpurge" = xyes; then : + ac_fn_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_fpurge" = xyes +then : ac_have_decl=1 -else +else $as_nop ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FPURGE $ac_have_decl -_ACEOF +printf "%s\n" "#define HAVE_DECL_FPURGE $ac_have_decl" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if getenv can be redefined" >&5 -$as_echo_n "checking to see if getenv can be redefined... " >&6; } -if ${bash_cv_getenv_redef+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&5 -$as_echo "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if getenv can be redefined" >&5 +printf %s "checking to see if getenv can be redefined... " >&6; } +if test ${bash_cv_getenv_redef+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&5 +printf "%s\n" "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&2;} bash_cv_getenv_redef=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18843,9 +20036,10 @@ exit(s == 0); /* force optimizer to leave getenv in */ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_getenv_redef=yes -else +else $as_nop bash_cv_getenv_redef=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18854,25 +20048,27 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getenv_redef" >&5 -$as_echo "$bash_cv_getenv_redef" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getenv_redef" >&5 +printf "%s\n" "$bash_cv_getenv_redef" >&6; } if test $bash_cv_getenv_redef = yes; then -$as_echo "#define CAN_REDEFINE_GETENV 1" >>confdefs.h +printf "%s\n" "#define CAN_REDEFINE_GETENV 1" >>confdefs.h fi if test "$ac_cv_func_getcwd" = "yes"; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if getcwd() will dynamically allocate memory with 0 size" >&5 -$as_echo_n "checking if getcwd() will dynamically allocate memory with 0 size... " >&6; } -if ${bash_cv_getcwd_malloc+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getcwd() will dynamically allocate memory with 0 size" >&5 +printf %s "checking if getcwd() will dynamically allocate memory with 0 size... " >&6; } +if test ${bash_cv_getcwd_malloc+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&2;} bash_cv_getcwd_malloc=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18891,9 +20087,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_getcwd_malloc=yes -else +else $as_nop bash_cv_getcwd_malloc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18902,10 +20099,10 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getcwd_malloc" >&5 -$as_echo "$bash_cv_getcwd_malloc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getcwd_malloc" >&5 +printf "%s\n" "$bash_cv_getcwd_malloc" >&6; } if test $bash_cv_getcwd_malloc = no; then -$as_echo "#define GETCWD_BROKEN 1" >>confdefs.h +printf "%s\n" "#define GETCWD_BROKEN 1" >>confdefs.h case " $LIBOBJS " in *" getcwd.$ac_objext "* ) ;; @@ -18917,17 +20114,23 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 -$as_echo_n "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; } -if ${bash_cv_func_sigsetjmp+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5 -$as_echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;} - bash_cv_func_sigsetjmp=missing +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 +printf %s "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; } +if test ${bash_cv_func_sigsetjmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&5 +printf "%s\n" "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&2;} + if test "$bash_cv_posix_signals" = "yes" ; then + bash_cv_func_sigsetjmp=present + else + bash_cv_func_sigsetjmp=missing + fi -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18947,21 +20150,30 @@ exit (1); #else int code; -sigset_t set, oset; +sigset_t set, oset, nset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); -sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); + sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); +/* paranoia -- make sure SIGINT is not blocked */ +sigdelset (&oset, SIGINT); +sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL); /* save it */ code = sigsetjmp(xx, 1); if (code) - exit(0); /* could get sigmask and compare to oset here. */ +{ + sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &nset); + /* could compare nset to oset here, but we just look for SIGINT */ + if (sigismember (&nset, SIGINT)) + exit(1); + exit(0); +} -/* change it */ +/* change it so that SIGINT is blocked */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); @@ -18970,10 +20182,12 @@ siglongjmp(xx, 10); exit(1); #endif } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_func_sigsetjmp=present -else +else $as_nop bash_cv_func_sigsetjmp=missing fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -18982,25 +20196,26 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5 -$as_echo "$bash_cv_func_sigsetjmp" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5 +printf "%s\n" "$bash_cv_func_sigsetjmp" >&6; } if test $bash_cv_func_sigsetjmp = present; then -$as_echo "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h +printf "%s\n" "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5 -$as_echo_n "checking whether or not strcoll and strcmp differ... " >&6; } -if ${bash_cv_func_strcoll_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5 +printf %s "checking whether or not strcoll and strcmp differ... " >&6; } +if test ${bash_cv_func_strcoll_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;} bash_cv_func_strcoll_broken=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19043,9 +20258,10 @@ char *v[]; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_func_strcoll_broken=yes -else +else $as_nop bash_cv_func_strcoll_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19054,29 +20270,30 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5 -$as_echo "$bash_cv_func_strcoll_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5 +printf "%s\n" "$bash_cv_func_strcoll_broken" >&6; } if test $bash_cv_func_strcoll_broken = yes; then -$as_echo "#define STRCOLL_BROKEN 1" >>confdefs.h +printf "%s\n" "#define STRCOLL_BROKEN 1" >>confdefs.h fi - if test X$ac_cv_func_snprintf = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant snprintf" >&5 -$as_echo_n "checking for standard-conformant snprintf... " >&6; } -if ${bash_cv_func_snprintf+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard snprintf if cross-compiling" >&5 -$as_echo "$as_me: WARNING: cannot check standard snprintf if cross-compiling" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant snprintf" >&5 +printf %s "checking for standard-conformant snprintf... " >&6; } +if test ${bash_cv_func_snprintf+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard snprintf if cross-compiling" >&5 +printf "%s\n" "$as_me: WARNING: cannot check standard snprintf if cross-compiling" >&2;} bash_cv_func_snprintf=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19092,9 +20309,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_func_snprintf=yes -else +else $as_nop bash_cv_func_snprintf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19102,34 +20320,35 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_snprintf" >&5 -$as_echo "$bash_cv_func_snprintf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_snprintf" >&5 +printf "%s\n" "$bash_cv_func_snprintf" >&6; } if test $bash_cv_func_snprintf = no; then ac_cv_func_snprintf=no fi fi if test $ac_cv_func_snprintf = no; then -$as_echo "#define HAVE_SNPRINTF 0" >>confdefs.h +printf "%s\n" "#define HAVE_SNPRINTF 0" >>confdefs.h fi - if test X$ac_cv_func_vsnprintf = Xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant vsnprintf" >&5 -$as_echo_n "checking for standard-conformant vsnprintf... " >&6; } -if ${bash_cv_func_vsnprintf+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard vsnprintf if cross-compiling" >&5 -$as_echo "$as_me: WARNING: cannot check standard vsnprintf if cross-compiling" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant vsnprintf" >&5 +printf %s "checking for standard-conformant vsnprintf... " >&6; } +if test ${bash_cv_func_vsnprintf+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard vsnprintf if cross-compiling" >&5 +printf "%s\n" "$as_me: WARNING: cannot check standard vsnprintf if cross-compiling" >&2;} bash_cv_func_vsnprintf=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19172,9 +20391,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_func_vsnprintf=yes -else +else $as_nop bash_cv_func_vsnprintf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19182,15 +20402,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5 -$as_echo "$bash_cv_func_vsnprintf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5 +printf "%s\n" "$bash_cv_func_vsnprintf" >&6; } if test $bash_cv_func_vsnprintf = no; then ac_cv_func_vsnprintf=no fi fi if test $ac_cv_func_vsnprintf = no; then -$as_echo "#define HAVE_VSNPRINTF 0" >>confdefs.h +printf "%s\n" "#define HAVE_VSNPRINTF 0" >>confdefs.h fi @@ -19199,17 +20419,19 @@ $as_echo "#define HAVE_VSNPRINTF 0" >>confdefs.h if test "$ac_cv_func_putenv" = "yes"; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant putenv declaration" >&5 -$as_echo_n "checking for standard-conformant putenv declaration... " >&6; } -if ${bash_cv_std_putenv+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant putenv declaration" >&5 +printf %s "checking for standard-conformant putenv declaration... " >&6; } +if test ${bash_cv_std_putenv+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -19224,47 +20446,50 @@ extern int putenv (); #endif int -main () +main (void) { return (putenv == 0); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_std_putenv=yes -else +else $as_nop bash_cv_std_putenv=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_putenv" >&5 -$as_echo "$bash_cv_std_putenv" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_putenv" >&5 +printf "%s\n" "$bash_cv_std_putenv" >&6; } if test $bash_cv_std_putenv = yes; then -$as_echo "#define HAVE_STD_PUTENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_STD_PUTENV 1" >>confdefs.h fi else -$as_echo "#define HAVE_STD_PUTENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_STD_PUTENV 1" >>confdefs.h fi if test "$ac_cv_func_unsetenv" = "yes"; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant unsetenv declaration" >&5 -$as_echo_n "checking for standard-conformant unsetenv declaration... " >&6; } -if ${bash_cv_std_unsetenv+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant unsetenv declaration" >&5 +printf %s "checking for standard-conformant unsetenv declaration... " >&6; } +if test ${bash_cv_std_unsetenv+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -19279,45 +20504,48 @@ extern int unsetenv (); #endif int -main () +main (void) { return (unsetenv == 0); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : bash_cv_std_unsetenv=yes -else +else $as_nop bash_cv_std_unsetenv=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_unsetenv" >&5 -$as_echo "$bash_cv_std_unsetenv" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_unsetenv" >&5 +printf "%s\n" "$bash_cv_std_unsetenv" >&6; } if test $bash_cv_std_unsetenv = yes; then -$as_echo "#define HAVE_STD_UNSETENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_STD_UNSETENV 1" >>confdefs.h fi else -$as_echo "#define HAVE_STD_UNSETENV 1" >>confdefs.h +printf "%s\n" "#define HAVE_STD_UNSETENV 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf floating point output in hex notation" >&5 -$as_echo_n "checking for printf floating point output in hex notation... " >&6; } -if ${bash_cv_printf_a_format+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check printf if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for printf floating point output in hex notation" >&5 +printf %s "checking for printf floating point output in hex notation... " >&6; } +if test ${bash_cv_printf_a_format+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check printf if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to no" >&2;} bash_cv_printf_a_format=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19336,9 +20564,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_printf_a_format=yes -else +else $as_nop bash_cv_printf_a_format=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19347,25 +20576,27 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_printf_a_format" >&5 -$as_echo "$bash_cv_printf_a_format" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_printf_a_format" >&5 +printf "%s\n" "$bash_cv_printf_a_format" >&6; } if test $bash_cv_printf_a_format = yes; then -$as_echo "#define HAVE_PRINTF_A_FORMAT 1" >>confdefs.h +printf "%s\n" "#define HAVE_PRINTF_A_FORMAT 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fnmatch can be used to check bracket equivalence classes" >&5 -$as_echo_n "checking whether fnmatch can be used to check bracket equivalence classes... " >&6; } -if ${bash_cv_fnmatch_equiv_fallback+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fnmatch can be used to check bracket equivalence classes" >&5 +printf %s "checking whether fnmatch can be used to check bracket equivalence classes... " >&6; } +if test ${bash_cv_fnmatch_equiv_fallback+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&2;} bash_cv_fnmatch_equiv_fallback=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19389,11 +20620,11 @@ main (int c, char **v) exit (1); } - _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_fnmatch_equiv_fallback=yes -else +else $as_nop bash_cv_fnmatch_equiv_fallback=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19402,33 +20633,32 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fnmatch_equiv_fallback" >&5 -$as_echo "$bash_cv_fnmatch_equiv_fallback" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fnmatch_equiv_fallback" >&5 +printf "%s\n" "$bash_cv_fnmatch_equiv_fallback" >&6; } if test "$bash_cv_fnmatch_equiv_fallback" = "yes" ; then bash_cv_fnmatch_equiv_value=1 else bash_cv_fnmatch_equiv_value=0 fi -cat >>confdefs.h <<_ACEOF -#define FNMATCH_EQUIV_FALLBACK $bash_cv_fnmatch_equiv_value -_ACEOF +printf "%s\n" "#define FNMATCH_EQUIV_FALLBACK $bash_cv_fnmatch_equiv_value" >>confdefs.h - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5 -$as_echo_n "checking if signal handlers must be reinstalled when invoked... " >&6; } -if ${bash_cv_must_reinstall_sighandlers+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5 +printf %s "checking if signal handlers must be reinstalled when invoked... " >&6; } +if test ${bash_cv_must_reinstall_sighandlers+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;} bash_cv_must_reinstall_sighandlers=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19438,7 +20668,7 @@ else #endif #include -typedef RETSIGTYPE sigfunc(); +typedef void sigfunc(); volatile int nsigint; @@ -19460,7 +20690,7 @@ set_signal_handler(sig, handler) #define set_signal_handler(s, h) signal(s, h) #endif -RETSIGTYPE +void sigint(s) int s; { @@ -19478,9 +20708,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_must_reinstall_sighandlers=no -else +else $as_nop bash_cv_must_reinstall_sighandlers=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19489,19 +20720,20 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5 -$as_echo "$bash_cv_must_reinstall_sighandlers" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5 +printf "%s\n" "$bash_cv_must_reinstall_sighandlers" >&6; } if test $bash_cv_must_reinstall_sighandlers = yes; then -$as_echo "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h +printf "%s\n" "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of necessary job control definitions" >&5 -$as_echo_n "checking for presence of necessary job control definitions... " >&6; } -if ${bash_cv_job_control_missing+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of necessary job control definitions" >&5 +printf %s "checking for presence of necessary job control definitions... " >&6; } +if test ${bash_cv_job_control_missing+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19547,40 +20779,43 @@ else int -main () +main (void) { - + int x; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_job_control_missing=present -else +else $as_nop bash_cv_job_control_missing=missing fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_job_control_missing" >&5 -$as_echo "$bash_cv_job_control_missing" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_job_control_missing" >&5 +printf "%s\n" "$bash_cv_job_control_missing" >&6; } if test $bash_cv_job_control_missing = missing; then -$as_echo "#define JOB_CONTROL_MISSING 1" >>confdefs.h +printf "%s\n" "#define JOB_CONTROL_MISSING 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of named pipes" >&5 -$as_echo_n "checking for presence of named pipes... " >&6; } -if ${bash_cv_sys_named_pipes+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&5 -$as_echo "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of named pipes" >&5 +printf %s "checking for presence of named pipes... " >&6; } +if test ${bash_cv_sys_named_pipes+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&5 +printf "%s\n" "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&2;} bash_cv_sys_named_pipes=missing -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19624,10 +20859,12 @@ unlink ("bash-aclocal/sh-np-autoconf"); rmdir ("bash-aclocal"); exit(0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_sys_named_pipes=present -else +else $as_nop bash_cv_sys_named_pipes=missing fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19636,19 +20873,20 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_named_pipes" >&5 -$as_echo "$bash_cv_sys_named_pipes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_named_pipes" >&5 +printf "%s\n" "$bash_cv_sys_named_pipes" >&6; } if test $bash_cv_sys_named_pipes = missing; then -$as_echo "#define NAMED_PIPES_MISSING 1" >>confdefs.h +printf "%s\n" "#define NAMED_PIPES_MISSING 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 -$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } -if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 +printf %s "checking whether termios.h defines TIOCGWINSZ... " >&6; } +if test ${ac_cv_sys_tiocgwinsz_in_termios_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19659,23 +20897,25 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ac_cv_sys_tiocgwinsz_in_termios_h=yes -else +else $as_nop ac_cv_sys_tiocgwinsz_in_termios_h=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 -$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 +printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 -$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } -if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 +printf %s "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } +if test ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19686,101 +20926,112 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes -else +else $as_nop ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 -$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 +printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then -$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h +printf "%s\n" "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5 -$as_echo_n "checking for TIOCSTAT in sys/ioctl.h... " >&6; } -if ${bash_cv_tiocstat_in_ioctl+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5 +printf %s "checking for TIOCSTAT in sys/ioctl.h... " >&6; } +if test ${bash_cv_tiocstat_in_ioctl+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include int -main () +main (void) { int x = TIOCSTAT; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_tiocstat_in_ioctl=yes -else +else $as_nop bash_cv_tiocstat_in_ioctl=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5 -$as_echo "$bash_cv_tiocstat_in_ioctl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5 +printf "%s\n" "$bash_cv_tiocstat_in_ioctl" >&6; } if test $bash_cv_tiocstat_in_ioctl = yes; then -$as_echo "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h +printf "%s\n" "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5 -$as_echo_n "checking for FIONREAD in sys/ioctl.h... " >&6; } -if ${bash_cv_fionread_in_ioctl+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5 +printf %s "checking for FIONREAD in sys/ioctl.h... " >&6; } +if test ${bash_cv_fionread_in_ioctl+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include int -main () +main (void) { int x = FIONREAD; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_fionread_in_ioctl=yes -else +else $as_nop bash_cv_fionread_in_ioctl=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5 -$as_echo "$bash_cv_fionread_in_ioctl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5 +printf "%s\n" "$bash_cv_fionread_in_ioctl" >&6; } if test $bash_cv_fionread_in_ioctl = yes; then -$as_echo "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h +printf "%s\n" "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether WCONTINUED flag to waitpid is unavailable or available but broken" >&5 -$as_echo_n "checking whether WCONTINUED flag to waitpid is unavailable or available but broken... " >&6; } -if ${bash_cv_wcontinued_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5 -$as_echo "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether WCONTINUED flag to waitpid is unavailable or available but broken" >&5 +printf %s "checking whether WCONTINUED flag to waitpid is unavailable or available but broken... " >&6; } +if test ${bash_cv_wcontinued_broken+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5 +printf "%s\n" "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;} bash_cv_wcontinued_broken=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19806,9 +21057,10 @@ main() } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_wcontinued_broken=no -else +else $as_nop bash_cv_wcontinued_broken=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19817,50 +21069,53 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcontinued_broken" >&5 -$as_echo "$bash_cv_wcontinued_broken" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcontinued_broken" >&5 +printf "%s\n" "$bash_cv_wcontinued_broken" >&6; } if test $bash_cv_wcontinued_broken = yes; then -$as_echo "#define WCONTINUED_BROKEN 1" >>confdefs.h +printf "%s\n" "#define WCONTINUED_BROKEN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5 -$as_echo_n "checking for speed_t in sys/types.h... " >&6; } -if ${bash_cv_speed_t_in_sys_types+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5 +printf %s "checking for speed_t in sys/types.h... " >&6; } +if test ${bash_cv_speed_t_in_sys_types+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { speed_t x; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_speed_t_in_sys_types=yes -else +else $as_nop bash_cv_speed_t_in_sys_types=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5 -$as_echo "$bash_cv_speed_t_in_sys_types" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5 +printf "%s\n" "$bash_cv_speed_t_in_sys_types" >&6; } if test $bash_cv_speed_t_in_sys_types = yes; then -$as_echo "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h +printf "%s\n" "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5 -$as_echo_n "checking whether getpw functions are declared in pwd.h... " >&6; } -if ${bash_cv_getpw_declared+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5 +printf %s "checking whether getpw functions are declared in pwd.h... " >&6; } +if test ${bash_cv_getpw_declared+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19872,33 +21127,36 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getpwuid" >/dev/null 2>&1; then : + $EGREP "getpwuid" >/dev/null 2>&1 +then : bash_cv_getpw_declared=yes -else +else $as_nop bash_cv_getpw_declared=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5 -$as_echo "$bash_cv_getpw_declared" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5 +printf "%s\n" "$bash_cv_getpw_declared" >&6; } if test $bash_cv_getpw_declared = yes; then -$as_echo "#define HAVE_GETPW_DECLS 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETPW_DECLS 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unusable real-time signals due to large values" >&5 -$as_echo_n "checking for unusable real-time signals due to large values... " >&6; } -if ${bash_cv_unusable_rtsigs+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&5 -$as_echo "$as_me: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unusable real-time signals due to large values" >&5 +printf %s "checking for unusable real-time signals due to large values... " >&6; } +if test ${bash_cv_unusable_rtsigs+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&5 +printf "%s\n" "$as_me: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&2;} bash_cv_unusable_rtsigs=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19922,10 +21180,12 @@ main () exit(rtmin < n_sigs); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : bash_cv_unusable_rtsigs=yes -else +else $as_nop bash_cv_unusable_rtsigs=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -19934,10 +21194,10 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_unusable_rtsigs" >&5 -$as_echo "$bash_cv_unusable_rtsigs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_unusable_rtsigs" >&5 +printf "%s\n" "$bash_cv_unusable_rtsigs" >&6; } if test $bash_cv_unusable_rtsigs = yes; then -$as_echo "#define UNUSABLE_RT_SIGNALS 1" >>confdefs.h +printf "%s\n" "#define UNUSABLE_RT_SIGNALS 1" >>confdefs.h fi @@ -19954,11 +21214,16 @@ fi case "$host_os" in -hpux*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $host_os needs _KERNEL for RLIMIT defines" >&5 -$as_echo_n "checking whether $host_os needs _KERNEL for RLIMIT defines... " >&6; } -if ${bash_cv_kernel_rlimit+:} false; then : - $as_echo_n "(cached) " >&6 -else +hpux*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $host_os needs _KERNEL for RLIMIT defines" >&5 +printf %s "checking whether $host_os needs _KERNEL for RLIMIT defines... " >&6; } +if test ${bash_cv_kernel_rlimit+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test ${bash_cv_rlimit+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19966,7 +21231,7 @@ else #include int -main () +main (void) { int f; @@ -19976,10 +21241,19 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bash_cv_kernel_rlimit=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if ac_fn_c_try_compile "$LINENO" +then : + bash_cv_rlimit=yes +else $as_nop + bash_cv_rlimit=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +if test $bash_cv_rlimit = no; then +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19988,31 +21262,31 @@ else #undef _KERNEL int -main () +main (void) { - int f; - f = RLIMIT_DATA; + int f; + f = RLIMIT_DATA; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : bash_cv_kernel_rlimit=yes -else +else $as_nop bash_cv_kernel_rlimit=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_kernel_rlimit" >&5 -$as_echo "$bash_cv_kernel_rlimit" >&6; } +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_kernel_rlimit" >&5 +printf "%s\n" "$bash_cv_kernel_rlimit" >&6; } if test $bash_cv_kernel_rlimit = yes; then -$as_echo "#define RLIMIT_NEEDS_KERNEL 1" >>confdefs.h +printf "%s\n" "#define RLIMIT_NEEDS_KERNEL 1" >>confdefs.h fi ;; @@ -20026,22 +21300,25 @@ esac if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 -$as_echo_n "checking which library has the termcap functions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 +printf %s "checking which library has the termcap functions... " >&6; } _bash_needmsg= fi -if ${bash_cv_termcap_lib+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${bash_cv_termcap_lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" -if test "x$ac_cv_func_tgetent" = xyes; then : +if test "x$ac_cv_func_tgetent" = xyes +then : bash_cv_termcap_lib=libc -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 -$as_echo_n "checking for tgetent in -ltermcap... " >&6; } -if ${ac_cv_lib_termcap_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 +printf %s "checking for tgetent in -ltermcap... " >&6; } +if test ${ac_cv_lib_termcap_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20050,37 +21327,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_termcap_tgetent=yes -else +else $as_nop ac_cv_lib_termcap_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 -$as_echo "$ac_cv_lib_termcap_tgetent" >&6; } -if test "x$ac_cv_lib_termcap_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; } +if test "x$ac_cv_lib_termcap_tgetent" = xyes +then : bash_cv_termcap_lib=libtermcap -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 -$as_echo_n "checking for tgetent in -ltinfo... " >&6; } -if ${ac_cv_lib_tinfo_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 +printf %s "checking for tgetent in -ltinfo... " >&6; } +if test ${ac_cv_lib_tinfo_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ltinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20089,37 +21366,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_tinfo_tgetent=yes -else +else $as_nop ac_cv_lib_tinfo_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 -$as_echo "$ac_cv_lib_tinfo_tgetent" >&6; } -if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; } +if test "x$ac_cv_lib_tinfo_tgetent" = xyes +then : bash_cv_termcap_lib=libtinfo -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 -$as_echo_n "checking for tgetent in -lcurses... " >&6; } -if ${ac_cv_lib_curses_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 +printf %s "checking for tgetent in -lcurses... " >&6; } +if test ${ac_cv_lib_curses_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20128,37 +21405,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_curses_tgetent=yes -else +else $as_nop ac_cv_lib_curses_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 -$as_echo "$ac_cv_lib_curses_tgetent" >&6; } -if test "x$ac_cv_lib_curses_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; } +if test "x$ac_cv_lib_curses_tgetent" = xyes +then : bash_cv_termcap_lib=libcurses -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 -$as_echo_n "checking for tgetent in -lncurses... " >&6; } -if ${ac_cv_lib_ncurses_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 +printf %s "checking for tgetent in -lncurses... " >&6; } +if test ${ac_cv_lib_ncurses_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20167,37 +21444,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_ncurses_tgetent=yes -else +else $as_nop ac_cv_lib_ncurses_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 -$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; } -if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; } +if test "x$ac_cv_lib_ncurses_tgetent" = xyes +then : bash_cv_termcap_lib=libncurses -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 -$as_echo_n "checking for tgetent in -lncursesw... " >&6; } -if ${ac_cv_lib_ncursesw_tgetent+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5 +printf %s "checking for tgetent in -lncursesw... " >&6; } +if test ${ac_cv_lib_ncursesw_tgetent+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lncursesw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20206,32 +21483,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char tgetent (); int -main () +main (void) { return tgetent (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_ncursesw_tgetent=yes -else +else $as_nop ac_cv_lib_ncursesw_tgetent=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 -$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; } -if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5 +printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; } +if test "x$ac_cv_lib_ncursesw_tgetent" = xyes +then : bash_cv_termcap_lib=libncursesw -else +else $as_nop bash_cv_termcap_lib=gnutermcap fi @@ -20248,11 +21524,11 @@ fi fi if test "X$_bash_needmsg" = "Xyes"; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 -$as_echo_n "checking which library has the termcap functions... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 +printf %s "checking which library has the termcap functions... " >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 -$as_echo "using $bash_cv_termcap_lib" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 +printf "%s\n" "using $bash_cv_termcap_lib" >&6; } if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" @@ -20278,11 +21554,12 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/fd is available" >&5 -$as_echo_n "checking whether /dev/fd is available... " >&6; } -if ${bash_cv_dev_fd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /dev/fd is available" >&5 +printf %s "checking whether /dev/fd is available... " >&6; } +if test ${bash_cv_dev_fd+y} +then : + printf %s "(cached) " >&6 +else $as_nop bash_cv_dev_fd="" if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then # check for systems like FreeBSD 5 that only provide /dev/fd/[012] @@ -20302,25 +21579,26 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_fd" >&5 -$as_echo "$bash_cv_dev_fd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_fd" >&5 +printf "%s\n" "$bash_cv_dev_fd" >&6; } if test $bash_cv_dev_fd = "standard"; then - $as_echo "#define HAVE_DEV_FD 1" >>confdefs.h + printf "%s\n" "#define HAVE_DEV_FD 1" >>confdefs.h - $as_echo "#define DEV_FD_PREFIX \"/dev/fd/\"" >>confdefs.h + printf "%s\n" "#define DEV_FD_PREFIX \"/dev/fd/\"" >>confdefs.h elif test $bash_cv_dev_fd = "whacky"; then - $as_echo "#define HAVE_DEV_FD 1" >>confdefs.h + printf "%s\n" "#define HAVE_DEV_FD 1" >>confdefs.h - $as_echo "#define DEV_FD_PREFIX \"/proc/self/fd/\"" >>confdefs.h + printf "%s\n" "#define DEV_FD_PREFIX \"/proc/self/fd/\"" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/stdin stdout stderr are available" >&5 -$as_echo_n "checking whether /dev/stdin stdout stderr are available... " >&6; } -if ${bash_cv_dev_stdin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /dev/stdin stdout stderr are available" >&5 +printf %s "checking whether /dev/stdin stdout stderr are available... " >&6; } +if test ${bash_cv_dev_stdin+y} +then : + printf %s "(cached) " >&6 +else $as_nop if (exec test -r /dev/stdin < /dev/null) ; then bash_cv_dev_stdin=present else @@ -20329,18 +21607,19 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_stdin" >&5 -$as_echo "$bash_cv_dev_stdin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_stdin" >&5 +printf "%s\n" "$bash_cv_dev_stdin" >&6; } if test $bash_cv_dev_stdin = "present"; then - $as_echo "#define HAVE_DEV_STDIN 1" >>confdefs.h + printf "%s\n" "#define HAVE_DEV_STDIN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default mail directory" >&5 -$as_echo_n "checking for default mail directory... " >&6; } -if ${bash_cv_mail_dir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for default mail directory" >&5 +printf %s "checking for default mail directory... " >&6; } +if test ${bash_cv_mail_dir+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -d /var/mail; then bash_cv_mail_dir=/var/mail elif test -d /var/spool/mail; then @@ -20355,11 +21634,9 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_mail_dir" >&5 -$as_echo "$bash_cv_mail_dir" >&6; } -cat >>confdefs.h <<_ACEOF -#define DEFAULT_MAIL_DIRECTORY "$bash_cv_mail_dir" -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_mail_dir" >&5 +printf "%s\n" "$bash_cv_mail_dir" >&6; } +printf "%s\n" "#define DEFAULT_MAIL_DIRECTORY \"$bash_cv_mail_dir\"" >>confdefs.h @@ -20368,7 +21645,7 @@ if test "$bash_cv_job_control_missing" = missing; then fi if test "$opt_job_control" = yes; then -$as_echo "#define JOB_CONTROL 1" >>confdefs.h +printf "%s\n" "#define JOB_CONTROL 1" >>confdefs.h JOBS_O=jobs.o else @@ -20382,13 +21659,13 @@ LOCAL_DEFS=-DSHELL case "${host_os}" in -sysv4.2*) $as_echo "#define SVR4_2 1" >>confdefs.h +sysv4.2*) printf "%s\n" "#define SVR4_2 1" >>confdefs.h - $as_echo "#define SVR4 1" >>confdefs.h + printf "%s\n" "#define SVR4 1" >>confdefs.h ;; -sysv4*) $as_echo "#define SVR4 1" >>confdefs.h +sysv4*) printf "%s\n" "#define SVR4 1" >>confdefs.h ;; -sysv5*) $as_echo "#define SVR5 1" >>confdefs.h +sysv5*) printf "%s\n" "#define SVR5 1" >>confdefs.h ;; hpux9*) LOCAL_CFLAGS="-DHPUX9 -DHPUX -DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;; hpux*) LOCAL_CFLAGS="-DHPUX -DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;; @@ -20409,11 +21686,11 @@ lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading case "`uname -r`" in 1.*|2.[0123]*) : ;; - *) $as_echo "#define PGRP_PIPE 1" >>confdefs.h + *) printf "%s\n" "#define PGRP_PIPE 1" >>confdefs.h ;; esac ;; netbsd*|openbsd*) LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;; -freebsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; +freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; *qnx[67]*) LOCAL_LIBS="-lncurses" ;; *qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; powerux*) LOCAL_LIBS="-lgen" ;; @@ -20437,6 +21714,7 @@ freebsd[3-9]*) fi ;; freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +midnightbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading esac case "$host_cpu" in @@ -20453,7 +21731,7 @@ mips-pyramid-sysv4) LOCAL_CFLAGS=-Xa ;; esac # turn off paren warnings in gcc -CFLAGS="$CFLAGS ${STYLE_CFLAGS}" +#CFLAGS="$CFLAGS ${STYLE_CFLAGS}" # # Shared object configuration section. These values are generated by @@ -20461,8 +21739,8 @@ CFLAGS="$CFLAGS ${STYLE_CFLAGS}" # if test "$ac_cv_func_dlopen" = "yes" && test -f ${srcdir}/support/shobj-conf then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking shared object configuration for loadable builtins" >&5 -$as_echo_n "checking shared object configuration for loadable builtins... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking shared object configuration for loadable builtins" >&5 +printf %s "checking shared object configuration for loadable builtins... " >&6; } eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"` @@ -20471,8 +21749,8 @@ $as_echo_n "checking shared object configuration for loadable builtins... " >&6; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHOBJ_STATUS" >&5 -$as_echo "$SHOBJ_STATUS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHOBJ_STATUS" >&5 +printf "%s\n" "$SHOBJ_STATUS" >&6; } else SHOBJ_STATUS=unsupported @@ -20548,7 +21826,9 @@ fi ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile lib/intl/Makefile lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in examples/loadables/Makefile examples/loadables/Makefile.inc examples/loadables/perl/Makefile support/bash.pc support/bashbug.sh" -ac_config_commands="$ac_config_commands default" + +ac_config_commands="$ac_config_commands stamp-h" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -20577,8 +21857,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -20608,15 +21888,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -20630,8 +21910,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20648,7 +21928,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -20665,8 +21945,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -20689,14 +21969,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -20706,46 +21988,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -20754,13 +22036,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -20769,8 +22044,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -20782,30 +22061,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -20818,13 +22077,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -20851,18 +22111,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -20874,12 +22136,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -20910,7 +22173,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -20932,6 +22195,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -20945,6 +22212,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -20986,7 +22259,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -20995,7 +22268,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21057,8 +22330,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bash $as_me 5.1-release, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by bash $as_me 5.2-alpha, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -21120,14 +22393,16 @@ $config_commands Report bugs to ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -bash config.status 5.1-release -configured by $0, generated by GNU Autoconf 2.69, +bash config.status 5.2-alpha +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -21166,15 +22441,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -21182,7 +22457,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -21191,7 +22466,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -21219,7 +22494,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -21233,7 +22508,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -21275,7 +22550,7 @@ do "examples/loadables/perl/Makefile") CONFIG_FILES="$CONFIG_FILES examples/loadables/perl/Makefile" ;; "support/bash.pc") CONFIG_FILES="$CONFIG_FILES support/bash.pc" ;; "support/bashbug.sh") CONFIG_FILES="$CONFIG_FILES support/bashbug.sh" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -21287,9 +22562,9 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -21625,7 +22900,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -21633,17 +22908,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -21660,7 +22935,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21684,9 +22959,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -21748,8 +23023,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -21793,9 +23068,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -21811,27 +23086,27 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -21948,10 +23223,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac done ;; - "default":C) -# Makefile uses this timestamp file to record whether config.h is up to date. -echo timestamp > stamp-h - ;; + "stamp-h":C) echo timestamp > stamp-h ;; esac done # for ac_tag @@ -21986,7 +23258,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + diff --git a/configure.ac b/configure.ac index 2fe3e7d9..ee44f446 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ dnl -dnl Configure script for bash-5.1 +dnl Configure script for bash-5.2 dnl dnl report bugs to chet@po.cwru.edu dnl dnl Process this file with autoconf to produce a configure script. -# Copyright (C) 1987-2020 Free Software Foundation, Inc. +# Copyright (C) 1987-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify @@ -21,15 +21,15 @@ dnl Process this file with autoconf to produce a configure script. # You should have received a copy of the GNU General Public License # along with this program. If not, see . -AC_REVISION([for Bash 5.1, version 5.022])dnl +AC_REVISION([for Bash 5.2, version 5.039])dnl -define(bashvers, 5.1) -define(relstatus, release) +define(bashvers, 5.2) +define(relstatus, alpha) AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org]) dnl make sure we are using a recent autoconf version -AC_PREREQ(2.61) +AC_PREREQ(2.69) AC_CONFIG_SRCDIR(shell.h) dnl where to find install.sh, config.sub, and config.guess @@ -108,11 +108,11 @@ AC_ARG_VAR(DEBUGGER_START_FILE, [location of bash debugger initialization file]) dnl arguments to configure dnl packages -AC_ARG_WITH(afs, AC_HELP_STRING([--with-afs], [if you are running AFS]), opt_afs=$withval) -AC_ARG_WITH(bash-malloc, AC_HELP_STRING([--with-bash-malloc], [use the Bash version of malloc]), opt_bash_malloc=$withval) -AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval) -AC_ARG_WITH(gnu-malloc, AC_HELP_STRING([--with-gnu-malloc], [synonym for --with-bash-malloc]), opt_bash_malloc=$withval) -AC_ARG_WITH(installed-readline, AC_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval) +AC_ARG_WITH(afs, AS_HELP_STRING([--with-afs], [if you are running AFS]), opt_afs=$withval) +AC_ARG_WITH(bash-malloc, AS_HELP_STRING([--with-bash-malloc], [use the Bash version of malloc]), opt_bash_malloc=$withval) +AC_ARG_WITH(curses, AS_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval) +AC_ARG_WITH(gnu-malloc, AS_HELP_STRING([--with-gnu-malloc], [synonym for --with-bash-malloc]), opt_bash_malloc=$withval) +AC_ARG_WITH(installed-readline, AS_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval) if test "$opt_bash_malloc" = yes; then MALLOC_TARGET=malloc @@ -182,13 +182,18 @@ opt_dircomplete_expand_default=no opt_globascii_default=yes opt_function_import=yes opt_dev_fd_stat_broken=no +opt_alt_array_impl=no +opt_translatable_strings=yes + +dnl modified by alternate array implementation option +ARRAY_O=array.o dnl options that affect how bash is compiled and linked opt_static_link=no opt_profiling=no dnl argument parsing for optional features -AC_ARG_ENABLE(minimal-config, AC_HELP_STRING([--enable-minimal-config], [a minimal sh-like configuration]), opt_minimal_config=$enableval) +AC_ARG_ENABLE(minimal-config, AS_HELP_STRING([--enable-minimal-config], [a minimal sh-like configuration]), opt_minimal_config=$enableval) dnl a minimal configuration turns everything off, but features can be dnl added individually @@ -202,51 +207,54 @@ if test $opt_minimal_config = yes; then opt_net_redirs=no opt_progcomp=no opt_separate_help=no opt_multibyte=yes opt_cond_regexp=no opt_coproc=no opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no + opt_translatable_strings=no opt_globascii_default=yes fi -AC_ARG_ENABLE(alias, AC_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval) -AC_ARG_ENABLE(arith-for-command, AC_HELP_STRING([--enable-arith-for-command], [enable arithmetic for command]), opt_arith_for_command=$enableval) -AC_ARG_ENABLE(array-variables, AC_HELP_STRING([--enable-array-variables], [include shell array variables]), opt_array_variables=$enableval) -AC_ARG_ENABLE(bang-history, AC_HELP_STRING([--enable-bang-history], [turn on csh-style history substitution]), opt_bang_history=$enableval) -AC_ARG_ENABLE(brace-expansion, AC_HELP_STRING([--enable-brace-expansion], [include brace expansion]), opt_brace_expansion=$enableval) -AC_ARG_ENABLE(casemod-attributes, AC_HELP_STRING([--enable-casemod-attributes], [include case-modifying variable attributes]), opt_casemod_attrs=$enableval) -AC_ARG_ENABLE(casemod-expansions, AC_HELP_STRING([--enable-casemod-expansions], [include case-modifying word expansions]), opt_casemod_expansions=$enableval) -AC_ARG_ENABLE(command-timing, AC_HELP_STRING([--enable-command-timing], [enable the time reserved word and command timing]), opt_command_timing=$enableval) -AC_ARG_ENABLE(cond-command, AC_HELP_STRING([--enable-cond-command], [enable the conditional command]), opt_cond_command=$enableval) -AC_ARG_ENABLE(cond-regexp, AC_HELP_STRING([--enable-cond-regexp], [enable extended regular expression matching in conditional commands]), opt_cond_regexp=$enableval) -AC_ARG_ENABLE(coprocesses, AC_HELP_STRING([--enable-coprocesses], [enable coprocess support and the coproc reserved word]), opt_coproc=$enableval) -AC_ARG_ENABLE(debugger, AC_HELP_STRING([--enable-debugger], [enable support for bash debugger]), opt_debugger=$enableval) -AC_ARG_ENABLE(dev-fd-stat-broken, AC_HELP_STRING([--enable-dev-fd-stat-broken], [enable this option if stat on /dev/fd/N and fstat on file descriptor N don't return the same results]), opt_dev_fd_stat_broken=$enableval) -AC_ARG_ENABLE(direxpand-default, AC_HELP_STRING([--enable-direxpand-default], [enable the direxpand shell option by default]), opt_dircomplete_expand_default=$enableval) -AC_ARG_ENABLE(directory-stack, AC_HELP_STRING([--enable-directory-stack], [enable builtins pushd/popd/dirs]), opt_dirstack=$enableval) -AC_ARG_ENABLE(disabled-builtins, AC_HELP_STRING([--enable-disabled-builtins], [allow disabled builtins to still be invoked]), opt_disabled_builtins=$enableval) -AC_ARG_ENABLE(dparen-arithmetic, AC_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval) -AC_ARG_ENABLE(extended-glob, AC_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval) -AC_ARG_ENABLE(extended-glob-default, AC_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval) -AC_ARG_ENABLE(function-import, AC_HELP_STRING([--enable-function-import], [allow bash to import exported function definitions by default]), opt_function_import=$enableval) -AC_ARG_ENABLE(glob-asciiranges-default, AC_HELP_STRING([--enable-glob-asciiranges-default], [force bracket range expressions in pattern matching to use the C locale by default]), opt_globascii_default=$enableval) -AC_ARG_ENABLE(help-builtin, AC_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval) -AC_ARG_ENABLE(history, AC_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval) -AC_ARG_ENABLE(job-control, AC_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval) -AC_ARG_ENABLE(multibyte, AC_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval) -AC_ARG_ENABLE(net-redirections, AC_HELP_STRING([--enable-net-redirections], [enable /dev/tcp/host/port redirection]), opt_net_redirs=$enableval) -AC_ARG_ENABLE(process-substitution, AC_HELP_STRING([--enable-process-substitution], [enable process substitution]), opt_process_subst=$enableval) -AC_ARG_ENABLE(progcomp, AC_HELP_STRING([--enable-progcomp], [enable programmable completion and the complete builtin]), opt_progcomp=$enableval) -AC_ARG_ENABLE(prompt-string-decoding, AC_HELP_STRING([--enable-prompt-string-decoding], [turn on escape character decoding in prompts]), opt_prompt_decoding=$enableval) -AC_ARG_ENABLE(readline, AC_HELP_STRING([--enable-readline], [turn on command line editing]), opt_readline=$enableval) -AC_ARG_ENABLE(restricted, AC_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval) -AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval) -AC_ARG_ENABLE(separate-helpfiles, AC_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval) -AC_ARG_ENABLE(single-help-strings, AC_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval) -AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval) -AC_ARG_ENABLE(usg-echo-default, AC_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval) -AC_ARG_ENABLE(xpg-echo-default, AC_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval) +AC_ARG_ENABLE(alias, AS_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval) +AC_ARG_ENABLE(alt-array-implementation, AS_HELP_STRING([--enable-alt-array-implementation], [enable an alternate array implementation that optimizes speed at the cost of space]), opt_alt_array_impl=$enableval) +AC_ARG_ENABLE(arith-for-command, AS_HELP_STRING([--enable-arith-for-command], [enable arithmetic for command]), opt_arith_for_command=$enableval) +AC_ARG_ENABLE(array-variables, AS_HELP_STRING([--enable-array-variables], [include shell array variables]), opt_array_variables=$enableval) +AC_ARG_ENABLE(bang-history, AS_HELP_STRING([--enable-bang-history], [turn on csh-style history substitution]), opt_bang_history=$enableval) +AC_ARG_ENABLE(brace-expansion, AS_HELP_STRING([--enable-brace-expansion], [include brace expansion]), opt_brace_expansion=$enableval) +AC_ARG_ENABLE(casemod-attributes, AS_HELP_STRING([--enable-casemod-attributes], [include case-modifying variable attributes]), opt_casemod_attrs=$enableval) +AC_ARG_ENABLE(casemod-expansions, AS_HELP_STRING([--enable-casemod-expansions], [include case-modifying word expansions]), opt_casemod_expansions=$enableval) +AC_ARG_ENABLE(command-timing, AS_HELP_STRING([--enable-command-timing], [enable the time reserved word and command timing]), opt_command_timing=$enableval) +AC_ARG_ENABLE(cond-command, AS_HELP_STRING([--enable-cond-command], [enable the conditional command]), opt_cond_command=$enableval) +AC_ARG_ENABLE(cond-regexp, AS_HELP_STRING([--enable-cond-regexp], [enable extended regular expression matching in conditional commands]), opt_cond_regexp=$enableval) +AC_ARG_ENABLE(coprocesses, AS_HELP_STRING([--enable-coprocesses], [enable coprocess support and the coproc reserved word]), opt_coproc=$enableval) +AC_ARG_ENABLE(debugger, AS_HELP_STRING([--enable-debugger], [enable support for bash debugger]), opt_debugger=$enableval) +AC_ARG_ENABLE(dev-fd-stat-broken, AS_HELP_STRING([--enable-dev-fd-stat-broken], [enable this option if stat on /dev/fd/N and fstat on file descriptor N don't return the same results]), opt_dev_fd_stat_broken=$enableval) +AC_ARG_ENABLE(direxpand-default, AS_HELP_STRING([--enable-direxpand-default], [enable the direxpand shell option by default]), opt_dircomplete_expand_default=$enableval) +AC_ARG_ENABLE(directory-stack, AS_HELP_STRING([--enable-directory-stack], [enable builtins pushd/popd/dirs]), opt_dirstack=$enableval) +AC_ARG_ENABLE(disabled-builtins, AS_HELP_STRING([--enable-disabled-builtins], [allow disabled builtins to still be invoked]), opt_disabled_builtins=$enableval) +AC_ARG_ENABLE(dparen-arithmetic, AS_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval) +AC_ARG_ENABLE(extended-glob, AS_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval) +AC_ARG_ENABLE(extended-glob-default, AS_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval) +AC_ARG_ENABLE(function-import, AS_HELP_STRING([--enable-function-import], [allow bash to import exported function definitions by default]), opt_function_import=$enableval) +AC_ARG_ENABLE(glob-asciiranges-default, AS_HELP_STRING([--enable-glob-asciiranges-default], [force bracket range expressions in pattern matching to use the C locale by default]), opt_globascii_default=$enableval) +AC_ARG_ENABLE(help-builtin, AS_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval) +AC_ARG_ENABLE(history, AS_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval) +AC_ARG_ENABLE(job-control, AS_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval) +AC_ARG_ENABLE(multibyte, AS_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval) +AC_ARG_ENABLE(net-redirections, AS_HELP_STRING([--enable-net-redirections], [enable /dev/tcp/host/port redirection]), opt_net_redirs=$enableval) +AC_ARG_ENABLE(process-substitution, AS_HELP_STRING([--enable-process-substitution], [enable process substitution]), opt_process_subst=$enableval) +AC_ARG_ENABLE(progcomp, AS_HELP_STRING([--enable-progcomp], [enable programmable completion and the complete builtin]), opt_progcomp=$enableval) +AC_ARG_ENABLE(prompt-string-decoding, AS_HELP_STRING([--enable-prompt-string-decoding], [turn on escape character decoding in prompts]), opt_prompt_decoding=$enableval) +AC_ARG_ENABLE(readline, AS_HELP_STRING([--enable-readline], [turn on command line editing]), opt_readline=$enableval) +AC_ARG_ENABLE(restricted, AS_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval) +AC_ARG_ENABLE(select, AS_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval) +AC_ARG_ENABLE(separate-helpfiles, AS_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval) +AC_ARG_ENABLE(single-help-strings, AS_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval) +AC_ARG_ENABLE(strict-posix-default, AS_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval) +AC_ARG_ENABLE(translatable-strings, AS_HELP_STRING([--enable-translatable-strings], [include support for $"..." translatable strings]), opt_translatable_strings=$enableval) +AC_ARG_ENABLE(usg-echo-default, AS_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval) +AC_ARG_ENABLE(xpg-echo-default, AS_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval) dnl options that alter how bash is compiled and linked -AC_ARG_ENABLE(mem-scramble, AC_HELP_STRING([--enable-mem-scramble], [scramble memory on calls to malloc and free]), opt_memscramble=$enableval) -AC_ARG_ENABLE(profiling, AC_HELP_STRING([--enable-profiling], [allow profiling with gprof]), opt_profiling=$enableval) -AC_ARG_ENABLE(static-link, AC_HELP_STRING([--enable-static-link], [link bash statically, for use as a root shell]), opt_static_link=$enableval) +AC_ARG_ENABLE(mem-scramble, AS_HELP_STRING([--enable-mem-scramble], [scramble memory on calls to malloc and free]), opt_memscramble=$enableval) +AC_ARG_ENABLE(profiling, AS_HELP_STRING([--enable-profiling], [allow profiling with gprof]), opt_profiling=$enableval) +AC_ARG_ENABLE(static-link, AS_HELP_STRING([--enable-static-link], [link bash statically, for use as a root shell]), opt_static_link=$enableval) dnl So-called `precious' variables AC_ARG_VAR([CC_FOR_BUILD], [C compiler used when compiling binaries used only at build time]) @@ -354,6 +362,13 @@ fi if test $opt_dev_fd_stat_broken = yes; then AC_DEFINE(DEV_FD_STAT_BROKEN) fi +if test $opt_alt_array_impl = yes; then +AC_DEFINE(ALT_ARRAY_IMPLEMENTATION) +ARRAY_O=array2.o +fi +if test $opt_translatable_strings = yes; then +AC_DEFINE(TRANSLATABLE_STRINGS) +fi if test $opt_memscramble = yes; then AC_DEFINE(MEMSCRAMBLE) @@ -368,7 +383,7 @@ fi HELPDIR= HELPDIRDEFINE= HELPINSTALL= HELPFILES_TARGET= if test "$opt_separate_help" != no; then if test "$opt_separate_help" = "yes" ; then - HELPDIR='${datadir}/bash' + HELPDIR='${datadir}/bash/helpfiles' else HELPDIR=$opt_separate_help fi @@ -391,6 +406,8 @@ AC_SUBST(MALLOC_LIBRARY) AC_SUBST(MALLOC_LDFLAGS) AC_SUBST(MALLOC_DEP) +AC_SUBST(ARRAY_O) + AC_SUBST(htmldir) AC_SUBST(HELPDIR) @@ -414,17 +431,16 @@ dnl different environment AC_PROG_CC if test -n "$want_auto_cflags"; then - AUTO_CFLAGS="-g ${GCC+-O2}" - AUTO_LDFLAGS="-g ${GCC+-O2}" - STYLE_CFLAGS="${GCC+-Wno-parentheses} ${GCC+-Wno-format-security}" + AUTO_CFLAGS="-g ${GCC:+-O2}" + AUTO_LDFLAGS="-g ${GCC:+-O2}" +# STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security} ${GCC:+-Wno-tautological-constant-out-of-range-compare}" + STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security}" else AUTO_CFLAGS= AUTO_LDFLAGS= STYLE_CFLAGS= fi dnl test for Unix variants -AC_ISC_POSIX -AC_MINIX - +AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE dnl BEGIN changes for cross-building (currently cygwin, minGW, and @@ -494,7 +510,7 @@ if test "$opt_static_link" = yes; then prefer_static=yes prefer_shared=no # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2 - if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then + if test "$GCC" = "yes"; then STATIC_LD="-static" case "$host_os" in solaris2*|linux*) ;; @@ -516,9 +532,12 @@ if test "X$cross_compiling" = "Xno"; then fi # CFLAGS set above to default value if not passed in environment if test -n "$want_auto_cflags" ; then - CFLAGS_FOR_BUILD="${CFLAGS} ${STYLE_CFLAGS}" + CFLAGS_FOR_BUILD="${CFLAGS}" + BASE_CFLAGS_FOR_BUILD="${CFLAGS}" else + # passed in environment CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'} + BASE_CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'} fi LIBS_FOR_BUILD=${LIBS_FOR_BUILD-'$(LIBS)'} else @@ -526,6 +545,7 @@ else CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""} LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD="-g"} + BASE_CFLAGS_FOR_BUILD=${BASE_CFLAGS_FOR_BUILD="-g"} LIBS_FOR_BUILD=${LIBS_FOR_BUILD-""} fi @@ -536,6 +556,8 @@ AC_SUBST(STATIC_LD) AC_SUBST(CC_FOR_BUILD) AC_SUBST(CFLAGS_FOR_BUILD) +AC_SUBST(BASE_CFLAGS_FOR_BUILD) +AC_SUBST(STYLE_CFLAGS) AC_SUBST(CPPFLAGS_FOR_BUILD) AC_SUBST(LDFLAGS_FOR_BUILD) AC_SUBST(LIBS_FOR_BUILD) @@ -729,26 +751,22 @@ m4_include([m4/wchar_t.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xsize.m4]) -dnl Turn on any extensions available in the GNU C library. -AC_DEFINE(_GNU_SOURCE, 1) - dnl C compiler characteristics AC_C_CONST AC_C_INLINE AC_C_BIGENDIAN AC_C_STRINGIZE -AC_C_LONG_DOUBLE +AC_TYPE_LONG_DOUBLE AC_C_PROTOTYPES AC_C_CHAR_UNSIGNED AC_C_VOLATILE AC_C_RESTRICT dnl initialize GNU gettext -AM_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl]) +BASH_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl]) dnl header files AC_HEADER_DIRENT -AC_HEADER_TIME AC_HEADER_MAJOR BASH_HEADER_INTTYPES @@ -782,7 +800,6 @@ dnl special checks for libc functions AC_FUNC_ALLOCA AC_FUNC_CHOWN AC_FUNC_GETPGRP -AC_FUNC_SETVBUF_REVERSED AC_FUNC_VPRINTF AC_FUNC_STRCOLL @@ -813,15 +830,12 @@ if test "$ac_cv_func_vprintf" = no && test "$ac_cv_func__doprnt" = "yes"; then AC_LIBOBJ(vprint) fi -dnl signal stuff -AC_TYPE_SIGNAL - dnl checks for certain version-specific system calls and libc functions AC_CHECK_FUNC(__setostype, AC_DEFINE(HAVE_SETOSTYPE)) AC_CHECK_FUNC(wait3, AC_DEFINE(HAVE_WAIT3)) dnl checks for missing libc functions -AC_CHECK_FUNC(mkfifo,AC_DEFINE(HAVE_MKFIFO),AC_DEFINE(MKFIFO_MISSING)) +AC_CHECK_FUNC(mkfifo, AC_DEFINE(HAVE_MKFIFO), AC_DEFINE(MKFIFO_MISSING)) dnl checks for system calls AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getentropy getgroups \ @@ -857,8 +871,6 @@ AC_CHECK_DECLS([confstr]) AC_CHECK_DECLS([printf]) AC_CHECK_DECLS([sbrk]) AC_CHECK_DECLS([setregid]) -dnl AC_CHECK_DECLS[(setresuid]) -dnl AC_CHECK_DECLS[(setresgid]) AC_CHECK_DECLS([strcpy]) AC_CHECK_DECLS([strsignal]) @@ -868,12 +880,13 @@ dnl Extra test to detect the horribly broken HP/UX 11.00 strtold(3) AC_CHECK_DECLS([strtold], [ AC_MSG_CHECKING([for broken strtold]) AC_CACHE_VAL(bash_cv_strtold_broken, - [AC_TRY_COMPILE( - [#include ], - [long double r; char *foo, bar; r = strtold(foo, &bar);], - bash_cv_strtold_broken=no, bash_cv_strtold_broken=yes, - [AC_MSG_WARN(cannot check for broken strtold if cross-compiling, defaulting to no)]) - ] + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[long double r; char *foo, bar; r = strtold(foo, &bar);]] + )], + [bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes]) + ] ) AC_MSG_RESULT($bash_cv_strtold_broken) if test "$bash_cv_strtold_broken" = "yes" ; then @@ -881,18 +894,18 @@ AC_CHECK_DECLS([strtold], [ fi ]) -BASH_CHECK_DECL(strtoimax) -BASH_CHECK_DECL(strtol) -BASH_CHECK_DECL(strtoll) -BASH_CHECK_DECL(strtoul) -BASH_CHECK_DECL(strtoull) -BASH_CHECK_DECL(strtoumax) +AC_CHECK_DECLS(strtoimax) +AC_CHECK_DECLS(strtol) +AC_CHECK_DECLS(strtoll) +AC_CHECK_DECLS(strtoul) +AC_CHECK_DECLS(strtoull) +AC_CHECK_DECLS(strtoumax) AC_FUNC_MKTIME dnl dnl Checks for lib/intl and related code (uses some of the output from -dnl AM_GNU_GETTEXT) +dnl BASH_GNU_GETTEXT) dnl AC_CHECK_HEADERS([argz.h errno.h fcntl.h malloc.h stdio_ext.h]) @@ -924,9 +937,6 @@ AC_CHECK_LIB(dl, dlopen) AC_CHECK_FUNCS(dlopen dlclose dlsym) fi -dnl this defines HAVE_DECL_SYS_SIGLIST -AC_DECL_SYS_SIGLIST - dnl network functions -- check for inet_aton again if test "$ac_cv_func_inet_aton" != 'yes'; then BASH_FUNC_INET_ATON @@ -959,10 +969,9 @@ AC_TYPE_UINTPTR_T AC_CHECK_TYPE(ssize_t, int) AC_CHECK_TYPE(time_t, long) -BASH_TYPE_LONG_LONG -BASH_TYPE_UNSIGNED_LONG_LONG +AC_TYPE_LONG_LONG_INT +AC_TYPE_UNSIGNED_LONG_LONG_INT -AC_TYPE_SIGNAL BASH_TYPE_SIG_ATOMIC_T AC_CHECK_SIZEOF(char, 1) @@ -970,6 +979,7 @@ AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) AC_CHECK_SIZEOF(char *, 4) +AC_CHECK_SIZEOF(size_t, 4) AC_CHECK_SIZEOF(double, 8) AC_CHECK_SIZEOF([long long], 8) @@ -999,7 +1009,6 @@ BASH_FUNC_LSTAT fi dnl behavior of system calls and library functions -BASH_FUNC_CTYPE_NONASCII BASH_FUNC_DUP2_CLOEXEC_CHECK BASH_SYS_PGRP_SYNC BASH_SYS_SIGNAL_VINTAGE @@ -1010,18 +1019,18 @@ BASH_SYS_SIGLIST BASH_UNDER_SYS_SIGLIST dnl various system types -BASH_TYPE_SIGHANDLER BASH_CHECK_TYPE(clock_t, [#include ], long) BASH_CHECK_TYPE(sigset_t, [#include ], int) -BASH_CHECK_TYPE(sig_atomic_t, [#include ], int) -BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T) -BASH_CHECK_TYPE(intmax_t, , $bash_cv_type_long_long) -BASH_CHECK_TYPE(uintmax_t, , $bash_cv_type_unsigned_long_long) if test "$ac_cv_header_sys_socket_h" = "yes"; then BASH_CHECK_TYPE(socklen_t, [#include ], [unsigned int], HAVE_SOCKLEN_T) fi + +AC_CHECK_TYPE(quad_t, AC_DEFINE([HAVE_QUAD_T], [1]), [], ) BASH_TYPE_RLIMIT +AC_TYPE_INTMAX_T +AC_TYPE_UINTMAX_T + AC_CHECK_SIZEOF(intmax_t, 8) dnl presence and contents of structures used by system calls @@ -1164,7 +1173,7 @@ linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading *) AC_DEFINE(PGRP_PIPE) ;; esac ;; netbsd*|openbsd*) LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;; -freebsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; +freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;; *qnx[[67]]*) LOCAL_LIBS="-lncurses" ;; *qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; powerux*) LOCAL_LIBS="-lgen" ;; @@ -1190,6 +1199,7 @@ freebsd[[3-9]]*) fi ;; freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading +midnightbsd*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading esac case "$host_cpu" in @@ -1206,7 +1216,7 @@ mips-pyramid-sysv4) LOCAL_CFLAGS=-Xa ;; esac # turn off paren warnings in gcc -CFLAGS="$CFLAGS ${STYLE_CFLAGS}" +#CFLAGS="$CFLAGS ${STYLE_CFLAGS}" # # Shared object configuration section. These values are generated by @@ -1297,14 +1307,16 @@ AC_SUBST(LOCAL_DEFS) #AC_SUBST(ALLOCA_SOURCE) #AC_SUBST(ALLOCA_OBJECT) -AC_OUTPUT([Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile \ - lib/intl/Makefile \ - lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \ - lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in \ - examples/loadables/Makefile examples/loadables/Makefile.inc \ - examples/loadables/perl/Makefile \ - support/bash.pc support/bashbug.sh], -[ -# Makefile uses this timestamp file to record whether config.h is up to date. -echo timestamp > stamp-h -]) +AC_CONFIG_FILES([Makefile builtins/Makefile lib/readline/Makefile \ + lib/glob/Makefile lib/intl/Makefile \ + lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \ + lib/tilde/Makefile doc/Makefile support/Makefile \ + po/Makefile.in examples/loadables/Makefile \ + examples/loadables/Makefile.inc \ + examples/loadables/perl/Makefile \ + support/bash.pc support/bashbug.sh]) + +dnl Makefile uses this timestamp file to record whether config.h is up to date. +AC_CONFIG_COMMANDS([stamp-h], [echo timestamp > stamp-h]) + +AC_OUTPUT diff --git a/configure.in b/configure.in deleted file mode 100644 index d7e09983..00000000 --- a/configure.in +++ /dev/null @@ -1,1161 +0,0 @@ -dnl -dnl Configure script for bash-4.2 -dnl -dnl report bugs to chet@po.cwru.edu -dnl -dnl Process this file with autoconf to produce a configure script. - -# Copyright (C) 1987-2011 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 3 of the License, 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, see . - -AC_REVISION([for Bash 4.2, version 4.037])dnl - -define(bashvers, 4.2) -define(relstatus, release) - -AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org]) - -dnl make sure we are using a recent autoconf version -AC_PREREQ(2.50) - -AC_CONFIG_SRCDIR(shell.h) -dnl where to find install.sh, config.sub, and config.guess -AC_CONFIG_AUX_DIR(./support) -AC_CONFIG_HEADERS(config.h) - -dnl checks for version info -BASHVERS=bashvers -RELSTATUS=relstatus - -dnl defaults for debug settings -case "$RELSTATUS" in -alp*|bet*|dev*|rc*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;; -*) DEBUG= MALLOC_DEBUG= ;; -esac - -dnl canonicalize the host and os so we can do some tricky things before -dnl parsing options -AC_CANONICAL_HOST - -dnl configure defaults -opt_bash_malloc=yes -opt_purify=no -opt_purecov=no -opt_afs=no -opt_curses=no -opt_with_installed_readline=no - -#htmldir= - -dnl some systems should be configured without the bash malloc by default -dnl and some need a special compiler or loader -dnl look in the NOTES file for more -case "${host_cpu}-${host_os}" in -alpha*-*) opt_bash_malloc=no ;; # alpha running osf/1 or linux -*[[Cc]]ray*-*) opt_bash_malloc=no ;; # Crays -*-osf1*) opt_bash_malloc=no ;; # other osf/1 machines -sparc-svr4*) opt_bash_malloc=no ;; # sparc SVR4, SVR4.2 -sparc-netbsd*) opt_bash_malloc=no ;; # needs 8-byte alignment -mips-irix6*) opt_bash_malloc=no ;; # needs 8-byte alignment -m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir -sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF -#*-freebsd*-gnu) opt_bash_malloc=no ;; # there's some undetermined problem here -#*-freebsd*) opt_bash_malloc=no ;; # they claim it's better; I disagree -*-openbsd*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment -*-aix*) opt_bash_malloc=no ;; # AIX machines -*-nextstep*) opt_bash_malloc=no ;; # NeXT machines running NeXTstep -*-macos*) opt_bash_malloc=no ;; # Apple MacOS X -*-rhapsody*) opt_bash_malloc=no ;; # Apple Rhapsody (MacOS X) -*-darwin*) opt_bash_malloc=no ;; # Apple Darwin (MacOS X) -*-dgux*) opt_bash_malloc=no ;; # DG/UX machines -*-qnx*) opt_bash_malloc=no ;; # QNX 4.2, QNX 6.x -*-machten4) opt_bash_malloc=no ;; # MachTen 4.x -*-bsdi2.1|*-bsdi3.?) opt_bash_malloc=no ; : ${CC:=shlicc2} ;; # for loadable builtins -*-beos*) opt_bash_malloc=no ;; # they say it's suitable -*-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment -*-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft -esac - -# memory scrambling on free() -case "${host_os}" in -sco3.2v5*|sco3.2v4*) opt_memscramble=no ;; -*) opt_memscramble=yes ;; -esac - -dnl -dnl macros for the bash debugger -dnl -dnl AM_PATH_LISPDIR -AC_ARG_VAR(DEBUGGER_START_FILE, [location of bash debugger initialization file]) - -dnl arguments to configure -dnl packages -AC_ARG_WITH(afs, AC_HELP_STRING([--with-afs], [if you are running AFS]), opt_afs=$withval) -AC_ARG_WITH(bash-malloc, AC_HELP_STRING([--with-bash-malloc], [use the Bash version of malloc]), opt_bash_malloc=$withval) -AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval) -AC_ARG_WITH(gnu-malloc, AC_HELP_STRING([--with-gnu-malloc], [synonym for --with-bash-malloc]), opt_bash_malloc=$withval) -AC_ARG_WITH(installed-readline, AC_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval) -AC_ARG_WITH(purecov, AC_HELP_STRING([--with-purecov], [configure to postprocess with pure coverage]), opt_purecov=$withval) -AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval) - -if test "$opt_bash_malloc" = yes; then - MALLOC_TARGET=malloc - MALLOC_SRC=malloc.c - - MALLOC_LIB='-lmalloc' - MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a' - MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)' - MALLOC_DEP='$(MALLOC_LIBRARY)' - - AC_DEFINE(USING_BASH_MALLOC) -else - MALLOC_LIB= - MALLOC_LIBRARY= - MALLOC_LDFLAGS= - MALLOC_DEP= -fi - -if test "$opt_purify" = yes; then - PURIFY="purify " - AC_DEFINE(DISABLE_MALLOC_WRAPPERS) -else - PURIFY= -fi - -if test "$opt_purecov" = yes; then - PURIFY="${PURIFY}purecov" -fi - -if test "$opt_afs" = yes; then - AC_DEFINE(AFS) -fi - -if test "$opt_curses" = yes; then - prefer_curses=yes -fi - -if test -z "${DEBUGGER_START_FILE}"; then - DEBUGGER_START_FILE='${datadir}/bashdb/bashdb-main.inc' -fi - -dnl optional shell features in config.h.in -opt_minimal_config=no - -opt_job_control=yes -opt_alias=yes -opt_readline=yes -opt_history=yes -opt_bang_history=yes -opt_dirstack=yes -opt_restricted=yes -opt_process_subst=yes -opt_prompt_decoding=yes -opt_select=yes -opt_help=yes -opt_array_variables=yes -opt_dparen_arith=yes -opt_extended_glob=yes -opt_brace_expansion=yes -opt_disabled_builtins=no -opt_command_timing=yes -opt_xpg_echo=no -opt_strict_posix=no -opt_cond_command=yes -opt_cond_regexp=yes -opt_coproc=yes -opt_arith_for_command=yes -opt_net_redirs=yes -opt_progcomp=yes -opt_separate_help=no -opt_multibyte=yes -opt_debugger=yes -opt_single_longdoc_strings=yes -opt_casemod_attrs=yes -opt_casemod_expansions=yes -opt_extglob_default=no - -dnl options that affect how bash is compiled and linked -opt_static_link=no -opt_profiling=no - -dnl argument parsing for optional features -AC_ARG_ENABLE(minimal-config, AC_HELP_STRING([--enable-minimal-config], [a minimal sh-like configuration]), opt_minimal_config=$enableval) - -dnl a minimal configuration turns everything off, but features can be -dnl added individually -if test $opt_minimal_config = yes; then - opt_job_control=no opt_alias=no opt_readline=no - opt_history=no opt_bang_history=no opt_dirstack=no - opt_restricted=no opt_process_subst=no opt_prompt_decoding=no - opt_select=no opt_help=no opt_array_variables=no opt_dparen_arith=no - opt_brace_expansion=no opt_disabled_builtins=no opt_command_timing=no - opt_extended_glob=no opt_cond_command=no opt_arith_for_command=no - opt_net_redirs=no opt_progcomp=no opt_separate_help=no - opt_multibyte=yes opt_cond_regexp=no opt_coproc=no - opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no -fi - -AC_ARG_ENABLE(alias, AC_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval) -AC_ARG_ENABLE(arith-for-command, AC_HELP_STRING([--enable-arith-for-command], [enable arithmetic for command]), opt_arith_for_command=$enableval) -AC_ARG_ENABLE(array-variables, AC_HELP_STRING([--enable-array-variables], [include shell array variables]), opt_array_variables=$enableval) -AC_ARG_ENABLE(bang-history, AC_HELP_STRING([--enable-bang-history], [turn on csh-style history substitution]), opt_bang_history=$enableval) -AC_ARG_ENABLE(brace-expansion, AC_HELP_STRING([--enable-brace-expansion], [include brace expansion]), opt_brace_expansion=$enableval) -AC_ARG_ENABLE(casemod-attributes, AC_HELP_STRING([--enable-casemod-attributes], [include case-modifying variable attributes]), opt_casemod_attrs=$enableval) -AC_ARG_ENABLE(casemod-expansions, AC_HELP_STRING([--enable-casemod-expansions], [include case-modifying word expansions]), opt_casemod_expansions=$enableval) -AC_ARG_ENABLE(command-timing, AC_HELP_STRING([--enable-command-timing], [enable the time reserved word and command timing]), opt_command_timing=$enableval) -AC_ARG_ENABLE(cond-command, AC_HELP_STRING([--enable-cond-command], [enable the conditional command]), opt_cond_command=$enableval) -AC_ARG_ENABLE(cond-regexp, AC_HELP_STRING([--enable-cond-regexp], [enable extended regular expression matching in conditional commands]), opt_cond_regexp=$enableval) -AC_ARG_ENABLE(coprocesses, AC_HELP_STRING([--enable-coprocesses], [enable coprocess support and the coproc reserved word]), opt_coproc=$enableval) -AC_ARG_ENABLE(debugger, AC_HELP_STRING([--enable-debugger], [enable support for bash debugger]), opt_debugger=$enableval) -AC_ARG_ENABLE(directory-stack, AC_HELP_STRING([--enable-directory-stack], [enable builtins pushd/popd/dirs]), opt_dirstack=$enableval) -AC_ARG_ENABLE(disabled-builtins, AC_HELP_STRING([--enable-disabled-builtins], [allow disabled builtins to still be invoked]), opt_disabled_builtins=$enableval) -AC_ARG_ENABLE(dparen-arithmetic, AC_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval) -AC_ARG_ENABLE(extended-glob, AC_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval) -AC_ARG_ENABLE(extended-glob-default, AC_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval) -AC_ARG_ENABLE(help-builtin, AC_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval) -AC_ARG_ENABLE(history, AC_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval) -AC_ARG_ENABLE(job-control, AC_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval) -AC_ARG_ENABLE(multibyte, AC_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval) -AC_ARG_ENABLE(net-redirections, AC_HELP_STRING([--enable-net-redirections], [enable /dev/tcp/host/port redirection]), opt_net_redirs=$enableval) -AC_ARG_ENABLE(process-substitution, AC_HELP_STRING([--enable-process-substitution], [enable process substitution]), opt_process_subst=$enableval) -AC_ARG_ENABLE(progcomp, AC_HELP_STRING([--enable-progcomp], [enable programmable completion and the complete builtin]), opt_progcomp=$enableval) -AC_ARG_ENABLE(prompt-string-decoding, AC_HELP_STRING([--enable-prompt-string-decoding], [turn on escape character decoding in prompts]), opt_prompt_decoding=$enableval) -AC_ARG_ENABLE(readline, AC_HELP_STRING([--enable-readline], [turn on command line editing]), opt_readline=$enableval) -AC_ARG_ENABLE(restricted, AC_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval) -AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval) -AC_ARG_ENABLE(separate-helpfiles, AC_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval) -AC_ARG_ENABLE(single-help-strings, AC_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval) -AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval) -AC_ARG_ENABLE(usg-echo-default, AC_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval) -AC_ARG_ENABLE(xpg-echo-default, AC_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval) - -dnl options that alter how bash is compiled and linked -AC_ARG_ENABLE(mem-scramble, AC_HELP_STRING([--enable-mem-scramble], [scramble memory on calls to malloc and free]), opt_memscramble=$enableval) -AC_ARG_ENABLE(profiling, AC_HELP_STRING([--enable-profiling], [allow profiling with gprof]), opt_profiling=$enableval) -AC_ARG_ENABLE(static-link, AC_HELP_STRING([--enable-static-link], [link bash statically, for use as a root shell]), opt_static_link=$enableval) - -dnl opt_job_control is handled later, after BASH_JOB_CONTROL_MISSING runs - -dnl opt_readline and opt_history are handled later, because AC_PROG_CC needs -dnl to be run before we can check the version of an already-installed readline -dnl library - -if test $opt_alias = yes; then -AC_DEFINE(ALIAS) -fi -if test $opt_dirstack = yes; then -AC_DEFINE(PUSHD_AND_POPD) -fi -if test $opt_restricted = yes; then -AC_DEFINE(RESTRICTED_SHELL) -fi -if test $opt_process_subst = yes; then -AC_DEFINE(PROCESS_SUBSTITUTION) -fi -if test $opt_prompt_decoding = yes; then -AC_DEFINE(PROMPT_STRING_DECODE) -fi -if test $opt_select = yes; then -AC_DEFINE(SELECT_COMMAND) -fi -if test $opt_help = yes; then -AC_DEFINE(HELP_BUILTIN) -fi -if test $opt_array_variables = yes; then -AC_DEFINE(ARRAY_VARS) -fi -if test $opt_dparen_arith = yes; then -AC_DEFINE(DPAREN_ARITHMETIC) -fi -if test $opt_brace_expansion = yes; then -AC_DEFINE(BRACE_EXPANSION) -fi -if test $opt_disabled_builtins = yes; then -AC_DEFINE(DISABLED_BUILTINS) -fi -if test $opt_command_timing = yes; then -AC_DEFINE(COMMAND_TIMING) -fi -if test $opt_xpg_echo = yes ; then -AC_DEFINE(DEFAULT_ECHO_TO_XPG) -fi -if test $opt_strict_posix = yes; then -AC_DEFINE(STRICT_POSIX) -fi -if test $opt_extended_glob = yes ; then -AC_DEFINE(EXTENDED_GLOB) -fi -if test $opt_extglob_default = yes; then -AC_DEFINE(EXTGLOB_DEFAULT, 1) -else -AC_DEFINE(EXTGLOB_DEFAULT, 0) -fi -if test $opt_cond_command = yes ; then -AC_DEFINE(COND_COMMAND) -fi -if test $opt_cond_regexp = yes ; then -AC_DEFINE(COND_REGEXP) -fi -if test $opt_coproc = yes; then -AC_DEFINE(COPROCESS_SUPPORT) -fi -if test $opt_arith_for_command = yes; then -AC_DEFINE(ARITH_FOR_COMMAND) -fi -if test $opt_net_redirs = yes; then -AC_DEFINE(NETWORK_REDIRECTIONS) -fi -if test $opt_progcomp = yes; then -AC_DEFINE(PROGRAMMABLE_COMPLETION) -fi -if test $opt_multibyte = no; then -AC_DEFINE(NO_MULTIBYTE_SUPPORT) -fi -if test $opt_debugger = yes; then -AC_DEFINE(DEBUGGER) -fi -if test $opt_casemod_attrs = yes; then -AC_DEFINE(CASEMOD_ATTRS) -fi -if test $opt_casemod_expansions = yes; then -AC_DEFINE(CASEMOD_EXPANSIONS) -fi - -if test $opt_memscramble = yes; then -AC_DEFINE(MEMSCRAMBLE) -fi - -if test "$opt_minimal_config" = yes; then - TESTSCRIPT=run-minimal -else - TESTSCRIPT=run-all -fi - -HELPDIR= HELPDIRDEFINE= HELPINSTALL= -if test "$opt_separate_help" != no; then - if test "$opt_separate_help" = "yes" ; then - HELPDIR='${datadir}/bash' - else - HELPDIR=$opt_separate_help - fi - HELPDIRDEFINE='-H ${HELPDIR}' - HELPINSTALL='install-help' -fi -HELPSTRINGS= -if test "$opt_single_longdoc_strings" != "yes"; then - HELPSTRINGS='-S' -fi - -dnl now substitute in the values generated by arguments -AC_SUBST(TESTSCRIPT) -AC_SUBST(PURIFY) -AC_SUBST(MALLOC_TARGET) -AC_SUBST(MALLOC_SRC) - -AC_SUBST(MALLOC_LIB) -AC_SUBST(MALLOC_LIBRARY) -AC_SUBST(MALLOC_LDFLAGS) -AC_SUBST(MALLOC_DEP) - -AC_SUBST(htmldir) - -AC_SUBST(HELPDIR) -AC_SUBST(HELPDIRDEFINE) -AC_SUBST(HELPINSTALL) -AC_SUBST(HELPSTRINGS) - -echo "" -echo "Beginning configuration for bash-$BASHVERS-$RELSTATUS for ${host_cpu}-${host_vendor}-${host_os}" -echo "" - -dnl compilation checks -dnl AC_PROG_CC sets $cross_compiling to `yes' if cross-compiling for a -dnl different environment -AC_PROG_CC - -dnl test for Unix variants -AC_ISC_POSIX -AC_MINIX - -AC_SYS_LARGEFILE - -dnl BEGIN changes for cross-building (currently cygwin, minGW, and -dnl (obsolete) BeOS) - -SIGNAMES_O= -SIGNAMES_H=lsignames.h - -dnl load up the cross-building cache file -- add more cases and cache -dnl files as necessary - -dnl Note that host and target machine are the same, and different than the -dnl build machine. -dnl Set SIGNAMES_H based on whether or not we're cross-compiling. - -CROSS_COMPILE= -if test "x$cross_compiling" = "xyes"; then - case "${host}" in - *-cygwin*) - cross_cache=${srcdir}/cross-build/cygwin32.cache - ;; - *-mingw*) - cross_cache=${srcdir}/cross-build/cygwin32.cache - ;; - i[[3456]]86-*-beos*) - cross_cache=${srcdir}/cross-build/x86-beos.cache - ;; - *) echo "configure: cross-compiling for $host is not supported" >&2 - ;; - esac - if test -n "${cross_cache}" && test -r "${cross_cache}"; then - echo "loading cross-build cache file ${cross_cache}" - . ${cross_cache} - fi - unset cross_cache - SIGNAMES_O='signames.o' - CROSS_COMPILE='-DCROSS_COMPILING' - AC_SUBST(CROSS_COMPILE) -fi -AC_SUBST(SIGNAMES_H) -AC_SUBST(SIGNAMES_O) - -if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - CC_FOR_BUILD=gcc - fi -fi -AC_SUBST(CC_FOR_BUILD) - -dnl END changes for cross-building - -dnl We want these before the checks, so the checks can modify their values. -test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 - -dnl If we're using gcc and the user hasn't specified CFLAGS, add -O2 to CFLAGS. -test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2" - -dnl handle options that alter how bash is compiled and linked -dnl these must come after the test for cc/gcc -if test "$opt_profiling" = "yes"; then - PROFILE_FLAGS=-pg - case "$host_os" in - solaris2*) ;; - *) opt_static_link=yes ;; - esac - DEBUG= MALLOC_DEBUG= -fi - -if test "$opt_static_link" = yes; then - # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2 - if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then - STATIC_LD="-static" - case "$host_os" in - solaris2*) ;; - *) LDFLAGS="$LDFLAGS -static" ;; # XXX experimental - esac - fi -fi - -if test "X$cross_compiling" = "Xno"; then - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"$CPPFLAGS"} - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(LDFLAGS)'} -else - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""} - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} -fi - -test -z "$CFLAGS_FOR_BUILD" && CFLAGS_FOR_BUILD="-g" - -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(LDFLAGS) -AC_SUBST(STATIC_LD) - -AC_SUBST(CFLAGS_FOR_BUILD) -AC_SUBST(CPPFLAGS_FOR_BUILD) -AC_SUBST(LDFLAGS_FOR_BUILD) - -AC_PROG_GCC_TRADITIONAL - -dnl BEGIN READLINE and HISTORY LIBRARY SECTION -dnl prepare to allow bash to be linked against an already-installed readline - -dnl first test that the readline version is new enough to link bash against -if test "$opt_readline" = yes && test "$opt_with_installed_readline" != "no" -then - # If the user specified --with-installed-readline=PREFIX and PREFIX - # is not `yes', set ac_cv_rl_prefix to PREFIX - test $opt_with_installed_readline != "yes" && ac_cv_rl_prefix=$opt_with_installed_readline - - RL_LIB_READLINE_VERSION - - case "$ac_cv_rl_version" in - 5*|6*|7*|8*|9*) ;; - *) opt_with_installed_readline=no - AC_MSG_WARN([installed readline library is too old to be linked with bash]) - AC_MSG_WARN([using private bash version]) - ;; - esac -fi - -TILDE_LIB=-ltilde -if test $opt_readline = yes; then - AC_DEFINE(READLINE) - if test "$opt_with_installed_readline" != "no" ; then - case "$opt_with_installed_readline" in - yes) RL_INCLUDE= ;; - *) case "$RL_INCLUDEDIR" in - /usr/include) ;; - *) RL_INCLUDE='-I${RL_INCLUDEDIR}' ;; - esac - ;; - esac - READLINE_DEP= - READLINE_LIB=-lreadline - # section for OS versions that don't allow unresolved symbols - # to be compiled into dynamic libraries. - case "$host_os" in - cygwin*) TILDE_LIB= ;; - esac - else - RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - READLINE_DEP='$(READLINE_LIBRARY)' - # section for OS versions that ship an older/broken version of - # readline as a standard dynamic library and don't allow a - # static version specified as -llibname to override the - # dynamic version - case "${host_os}" in - darwin[[89]]*|darwin10*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac - fi -else - RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - READLINE_LIB= READLINE_DEP= -fi -if test $opt_history = yes || test $opt_bang_history = yes; then - if test $opt_history = yes; then - AC_DEFINE(HISTORY) - fi - if test $opt_bang_history = yes; then - AC_DEFINE(BANG_HISTORY) - fi - if test "$opt_with_installed_readline" != "no"; then - HIST_LIBDIR=$RL_LIBDIR - HISTORY_DEP= - HISTORY_LIB=-lhistory - case "$opt_with_installed_readline" in - yes) RL_INCLUDE= ;; - *) case "$RL_INCLUDEDIR" in - /usr/include) ;; - *) RL_INCLUDE='-I${RL_INCLUDEDIR}' ;; - esac - ;; - esac - else - HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - HISTORY_DEP='$(HISTORY_LIBRARY)' - # section for OS versions that ship an older version of - # readline as a standard dynamic library and don't allow a - # static version specified as -llibname to override the - # dynamic version - case "${host_os}" in - darwin[[89]]*|darwin10*) HISTORY_LIB='${HISTORY_LIBRARY}' ;; - *) HISTORY_LIB=-lhistory ;; - esac - fi -else - HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - HISTORY_LIB= HISTORY_DEP= -fi -AC_SUBST(READLINE_LIB) -AC_SUBST(READLINE_DEP) -AC_SUBST(RL_LIBDIR) -AC_SUBST(RL_INCLUDEDIR) -AC_SUBST(RL_INCLUDE) -AC_SUBST(HISTORY_LIB) -AC_SUBST(HISTORY_DEP) -AC_SUBST(HIST_LIBDIR) -AC_SUBST(TILDE_LIB) - -dnl END READLINE and HISTORY LIBRARY SECTION - -dnl programs needed by the build and install process -AC_PROG_INSTALL -AC_CHECK_PROG(AR, ar, , ar) -dnl Set default for ARFLAGS, since autoconf does not have a macro for it. -dnl This allows people to set it when running configure or make -test -n "$ARFLAGS" || ARFLAGS="cr" -AC_PROG_RANLIB -AC_PROG_YACC -AC_PROG_MAKE_SET - -case "$host_os" in -opennt*|interix*) MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;; -*) MAKE_SHELL=/bin/sh ;; -esac -AC_SUBST(MAKE_SHELL) - -dnl this is similar to the expanded AC_PROG_RANLIB -if test x$SIZE = x; then - if test x$ac_tool_prefix = x; then - SIZE=size - else - SIZE=${ac_tool_prefix}size - save_IFS=$IFS ; IFS=: - size_found=0 - for dir in $PATH; do - if test -x $dir/$SIZE ; then - size_found=1 - break - fi - done - if test $size_found -eq 0; then - SIZE=: - fi - IFS=$save_IFS - fi -fi -AC_SUBST(SIZE) - -dnl Turn on any extensions available in the GNU C library. -AC_DEFINE(_GNU_SOURCE, 1) - -dnl C compiler characteristics -AC_C_CONST -AC_C_INLINE -AC_C_BIGENDIAN -AC_C_STRINGIZE -AC_C_LONG_DOUBLE -AC_C_PROTOTYPES -AC_C_CHAR_UNSIGNED -AC_C_VOLATILE -AC_C_RESTRICT - -dnl initialize GNU gettext -AM_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl]) - -dnl header files -AC_HEADER_DIRENT -AC_HEADER_TIME - -BASH_HEADER_INTTYPES - -AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \ - memory.h locale.h termcap.h termio.h termios.h dlfcn.h \ - stddef.h stdint.h netdb.h pwd.h grp.h strings.h regex.h \ - syslog.h ulimit.h) -AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h \ - sys/resource.h sys/param.h sys/socket.h sys/stat.h \ - sys/time.h sys/times.h sys/types.h sys/wait.h) -AC_CHECK_HEADERS(netinet/in.h arpa/inet.h) - -dnl sys/ptem.h requires definitions from sys/stream.h on systems where it -dnl exists -AC_CHECK_HEADER(sys/ptem.h, , ,[[ -#if HAVE_SYS_STREAM_H -# include -#endif -]]) - -dnl special checks for libc functions -AC_FUNC_ALLOCA -AC_FUNC_GETPGRP -AC_FUNC_SETVBUF_REVERSED -AC_FUNC_VPRINTF -AC_FUNC_STRCOLL - -dnl if we're not using the bash malloc but require the C alloca, set things -dnl up to build a libmalloc.a containing only alloca.o - -if test "$ac_cv_func_alloca_works" = "no" && test "$opt_bash_malloc" = "no"; then - MALLOC_TARGET=alloca - MALLOC_SRC=alloca.c - - MALLOC_LIB='-lmalloc' - MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a' - MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)' - MALLOC_DEP='$(MALLOC_LIBRARY)' -fi - -dnl if vprintf is not in libc, see if it's defined in stdio.h -if test "$ac_cv_func_vprintf" = no; then - AC_MSG_CHECKING(for declaration of vprintf in stdio.h) - AC_EGREP_HEADER([[int[ ]*vprintf[^a-zA-Z0-9]]],stdio.h,ac_cv_func_vprintf=yes) - AC_MSG_RESULT($ac_cv_func_vprintf) - if test $ac_cv_func_vprintf = yes; then - AC_DEFINE(HAVE_VPRINTF) - fi -fi - -if test "$ac_cv_func_vprintf" = no && test "$ac_cv_func__doprnt" = "yes"; then - AC_LIBOBJ(vprint) -fi - -dnl signal stuff -AC_TYPE_SIGNAL - -dnl checks for certain version-specific system calls and libc functions -AC_CHECK_FUNC(__setostype, AC_DEFINE(HAVE_SETOSTYPE)) -AC_CHECK_FUNC(wait3, AC_DEFINE(HAVE_WAIT3)) -AC_CHECK_FUNC(isinf, AC_DEFINE(HAVE_ISINF_IN_LIBC)) -AC_CHECK_FUNC(isnan, AC_DEFINE(HAVE_ISNAN_IN_LIBC)) - -dnl checks for missing libc functions -AC_CHECK_FUNC(mkfifo,AC_DEFINE(HAVE_MKFIFO),AC_DEFINE(MKFIFO_MISSING)) - -dnl checks for system calls -AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getgroups gethostname \ - getpagesize getpeername getrlimit getrusage gettimeofday \ - kill killpg lstat readlink sbrk select setdtablesize \ - setitimer tcgetpgrp uname ulimit waitpid) -AC_REPLACE_FUNCS(rename) - -dnl checks for c library functions -AC_CHECK_FUNCS(bcopy bzero confstr faccessat fnmatch \ - getaddrinfo gethostbyname getservbyname getservent inet_aton \ - memmove pathconf putenv raise regcomp regexec \ - setenv setlinebuf setlocale setvbuf siginterrupt strchr \ - sysconf syslog tcgetattr times ttyname tzset unsetenv) - -AC_CHECK_FUNCS(vasprintf asprintf) -AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit) -AC_CHECK_FUNCS(getpwent getpwnam getpwuid) -AC_REPLACE_FUNCS(getcwd memset) -AC_REPLACE_FUNCS(strcasecmp strcasestr strerror strftime strnlen strpbrk strstr) -AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoimax strtoumax) -AC_REPLACE_FUNCS(dprintf) -AC_REPLACE_FUNCS(strchrnul) - -AC_CHECK_DECLS([confstr]) -AC_CHECK_DECLS([printf]) -AC_CHECK_DECLS([sbrk]) -AC_CHECK_DECLS([setregid]) -AC_CHECK_DECLS([strcpy]) -AC_CHECK_DECLS([strsignal]) - -dnl Extra test to detect the horribly broken HP/UX 11.00 strtold(3) -AC_CHECK_DECLS([strtold], [ - AC_MSG_CHECKING([for broken strtold]) - AC_CACHE_VAL(bash_cv_strtold_broken, - [AC_TRY_COMPILE( - [#include ], - [int main() { long double r; char *foo, bar; r = strtold(foo, &bar);}], - bash_cv_strtold_broken=no, bash_cv_strtold_broken=yes, - [AC_MSG_WARN(cannot check for broken strtold if cross-compiling, defaulting to no)]) - ] - ) - AC_MSG_RESULT($bash_cv_strtold_broken) - if test "$bash_cv_strtold_broken" = "yes" ; then - AC_DEFINE(STRTOLD_BROKEN) - fi -]) - - -BASH_CHECK_DECL(strtoimax) -BASH_CHECK_DECL(strtol) -BASH_CHECK_DECL(strtoll) -BASH_CHECK_DECL(strtoul) -BASH_CHECK_DECL(strtoull) -BASH_CHECK_DECL(strtoumax) - -AC_FUNC_MKTIME - -dnl -dnl Checks for lib/intl and related code (uses some of the output from -dnl AM_GNU_GETTEXT) -dnl - -AC_CHECK_HEADERS([argz.h errno.h fcntl.h malloc.h stdio_ext.h]) - -dnl AC_FUNC_MALLOC -AC_FUNC_MMAP -AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext mempcpy \ - munmap stpcpy strcspn strdup]) - -INTL_DEP= INTL_INC= LIBINTL_H= -if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then - INTL_DEP='${INTL_LIBDIR}/libintl.a' - INTL_INC='-I${INTL_LIBSRC} -I${INTL_BUILDDIR}' - LIBINTL_H='${INTL_BUILDDIR}/libintl.h' -fi -AC_SUBST(INTL_DEP) -AC_SUBST(INTL_INC) -AC_SUBST(LIBINTL_H) - -dnl -dnl End of checks needed by files in lib/intl -dnl - -BASH_CHECK_MULTIBYTE - -dnl checks for the dynamic loading library functions in libc and libdl -if test "$opt_static_link" != yes; then -AC_CHECK_LIB(dl, dlopen) -AC_CHECK_FUNCS(dlopen dlclose dlsym) -fi - -dnl this defines HAVE_DECL_SYS_SIGLIST -AC_DECL_SYS_SIGLIST - -dnl network functions -- check for inet_aton again -if test "$ac_cv_func_inet_aton" != 'yes'; then -BASH_FUNC_INET_ATON -fi - -dnl libraries -dnl this is reportedly no longer necessary for irix[56].? -case "$host_os" in -irix4*) AC_CHECK_LIB(sun, getpwent) ;; -esac - -dnl check for getpeername in the socket library only if it's not in libc -if test "$ac_cv_func_getpeername" = no; then - BASH_CHECK_LIB_SOCKET -fi -dnl check for gethostbyname in socket libraries if it's not in libc -if test "$ac_cv_func_gethostbyname" = no; then - BASH_FUNC_GETHOSTBYNAME -fi - -dnl system types -AC_TYPE_GETGROUPS -AC_TYPE_OFF_T -AC_TYPE_MODE_T -AC_TYPE_UID_T -AC_TYPE_PID_T -AC_TYPE_SIZE_T -AC_CHECK_TYPE(ssize_t, int) -AC_CHECK_TYPE(time_t, long) - -BASH_TYPE_LONG_LONG -BASH_TYPE_UNSIGNED_LONG_LONG - -AC_TYPE_SIGNAL -BASH_TYPE_SIG_ATOMIC_T - -AC_CHECK_SIZEOF(char, 1) -AC_CHECK_SIZEOF(short, 2) -AC_CHECK_SIZEOF(int, 4) -AC_CHECK_SIZEOF(long, 4) -AC_CHECK_SIZEOF(char *, 4) -AC_CHECK_SIZEOF(double, 8) -AC_CHECK_SIZEOF([long long], 8) - -AC_CHECK_TYPE(u_int, [unsigned int]) -AC_CHECK_TYPE(u_long, [unsigned long]) - -BASH_TYPE_BITS16_T -BASH_TYPE_U_BITS16_T -BASH_TYPE_BITS32_T -BASH_TYPE_U_BITS32_T -BASH_TYPE_BITS64_T - -BASH_TYPE_PTRDIFF_T - -dnl structures -AC_HEADER_STAT - -dnl system services -AC_SYS_INTERPRETER -if test $ac_cv_sys_interpreter = yes; then -AC_DEFINE(HAVE_HASH_BANG_EXEC) -fi - -dnl Miscellaneous Bash tests -if test "$ac_cv_func_lstat" = "no"; then -BASH_FUNC_LSTAT -fi - -dnl behavior of system calls and library functions -BASH_FUNC_CTYPE_NONASCII -BASH_FUNC_DUP2_CLOEXEC_CHECK -BASH_SYS_PGRP_SYNC -BASH_SYS_SIGNAL_VINTAGE - -dnl checking for the presence of certain library symbols -BASH_SYS_ERRLIST -BASH_SYS_SIGLIST -BASH_UNDER_SYS_SIGLIST - -dnl various system types -BASH_TYPE_SIGHANDLER -BASH_CHECK_TYPE(clock_t, [#include ], long) -BASH_CHECK_TYPE(sigset_t, [#include ], int) -BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T) -BASH_CHECK_TYPE(intmax_t, , $bash_cv_type_long_long) -BASH_CHECK_TYPE(uintmax_t, , $bash_cv_type_unsigned_long_long) -if test "$ac_cv_header_sys_socket_h" = "yes"; then -BASH_CHECK_TYPE(socklen_t, [#include ], int, HAVE_SOCKLEN_T) -fi -BASH_TYPE_RLIMIT - -AC_CHECK_SIZEOF(intmax_t, 8) - -dnl presence and contents of structures used by system calls -BASH_STRUCT_TERMIOS_LDISC -BASH_STRUCT_TERMIO_LDISC -BASH_STRUCT_DIRENT_D_INO -BASH_STRUCT_DIRENT_D_FILENO -BASH_STRUCT_DIRENT_D_NAMLEN -BASH_STRUCT_WINSIZE -BASH_STRUCT_TIMEVAL -AC_CHECK_MEMBERS([struct stat.st_blocks]) -AC_STRUCT_TM -AC_STRUCT_TIMEZONE -BASH_STRUCT_TIMEZONE - -BASH_STRUCT_WEXITSTATUS_OFFSET - -dnl presence and behavior of C library functions -BASH_FUNC_STRSIGNAL -BASH_FUNC_OPENDIR_CHECK -BASH_FUNC_ULIMIT_MAXFDS -BASH_FUNC_FPURGE -BASH_FUNC_GETENV -if test "$ac_cv_func_getcwd" = "yes"; then -BASH_FUNC_GETCWD -fi -BASH_FUNC_POSIX_SETJMP -BASH_FUNC_STRCOLL -BASH_FUNC_SNPRINTF -BASH_FUNC_VSNPRINTF - -dnl If putenv or unsetenv is not present, set the right define so the -dnl prototype and declaration in lib/sh/getenv.c will be standard-conformant - -if test "$ac_cv_func_putenv" = "yes"; then -BASH_FUNC_STD_PUTENV -else -AC_DEFINE(HAVE_STD_PUTENV) -fi -if test "$ac_cv_func_unsetenv" = "yes"; then -BASH_FUNC_STD_UNSETENV -else -AC_DEFINE(HAVE_STD_UNSETENV) -fi - -BASH_FUNC_PRINTF_A_FORMAT - -dnl presence and behavior of OS functions -BASH_SYS_REINSTALL_SIGHANDLERS -BASH_SYS_JOB_CONTROL_MISSING -BASH_SYS_NAMED_PIPES - -dnl presence of certain CPP defines -AC_HEADER_TIOCGWINSZ -BASH_HAVE_TIOCSTAT -BASH_HAVE_FIONREAD - -BASH_CHECK_WCONTINUED - -dnl miscellaneous -BASH_CHECK_SPEED_T -BASH_CHECK_GETPW_FUNCS -BASH_CHECK_RTSIGS -BASH_CHECK_SYS_SIGLIST - -dnl special checks -case "$host_os" in -hpux*) BASH_CHECK_KERNEL_RLIMIT ;; -esac - -if test "$opt_readline" = yes; then -dnl yuck -case "$host_os" in -aix*) prefer_curses=yes ;; -esac -BASH_CHECK_LIB_TERMCAP -fi -AC_SUBST(TERMCAP_LIB) -AC_SUBST(TERMCAP_DEP) - -BASH_CHECK_DEV_FD -BASH_CHECK_DEV_STDIN -BASH_SYS_DEFAULT_MAIL_DIR - -if test "$bash_cv_job_control_missing" = missing; then - opt_job_control=no -fi - -if test "$opt_job_control" = yes; then -AC_DEFINE(JOB_CONTROL) -JOBS_O=jobs.o -else -JOBS_O=nojobs.o -fi - -AC_SUBST(JOBS_O) - -dnl Defines that we want to propagate to the Makefiles in subdirectories, -dnl like glob and readline - -LOCAL_DEFS=-DSHELL - -dnl use this section to possibly define more cpp variables, specify local -dnl libraries, and specify any additional local cc or ld flags -dnl -dnl this should really go away someday - -case "${host_os}" in -sysv4.2*) AC_DEFINE(SVR4_2) - AC_DEFINE(SVR4) ;; -sysv4*) AC_DEFINE(SVR4) ;; -sysv5*) AC_DEFINE(SVR5) ;; -hpux9*) LOCAL_CFLAGS="-DHPUX9 -DHPUX" ;; -hpux*) LOCAL_CFLAGS=-DHPUX ;; -dgux*) LOCAL_CFLAGS=-D_DGUX_SOURCE; LOCAL_LIBS=-ldgc ;; -isc*) LOCAL_CFLAGS=-Disc386 ;; -rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;; -darwin*) LOCAL_CFLAGS=-DMACOSX ;; -sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;; -sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;; -sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; -sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -solaris2.8*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2.9*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2.10*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; -lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; -linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading - case "`uname -r`" in - 2.[[456789]]*|3*) AC_DEFINE(PGRP_PIPE) ;; - esac ;; -*qnx6*) LOCAL_CFLAGS="-Dqnx -Dqnx6" LOCAL_LIBS="-lncurses" ;; -*qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; -powerux*) LOCAL_LIBS="-lgen" ;; -cygwin*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; -opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE -D_ALL_SOURCE" ;; -esac - -dnl Stanza for OS/compiler pair-specific flags -case "${host_os}-${CC}" in -aix4.2*-*gcc*) LOCAL_LDFLAGS="-Xlinker -bexpall -Xlinker -brtl" ;; -aix4.2*) LOCAL_LDFLAGS="-bexpall -brtl" ;; -bsdi4*-*gcc*) LOCAL_LDFLAGS="-rdynamic" ;; # allow dynamic loading, like Linux -esac - -dnl FreeBSD-3.x can have either a.out or ELF -case "${host_os}" in -freebsd[[3-9]]*) - if test -x /usr/bin/objformat && test "`/usr/bin/objformat`" = "elf" ; then - LOCAL_LDFLAGS=-rdynamic # allow dynamic loading - fi ;; -freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading -dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading -esac - -case "$host_cpu" in -*cray*) LOCAL_CFLAGS="-DCRAY" ;; # shell var so config.h can use it -esac - -case "$host_cpu-$host_os" in -ibmrt-*bsd4*) LOCAL_CFLAGS="-ma -U__STDC__" ;; -esac - -case "$host_cpu-$host_vendor-$host_os" in -m88k-motorola-sysv3) LOCAL_CFLAGS=-DWAITPID_BROKEN ;; -mips-pyramid-sysv4) LOCAL_CFLAGS=-Xa ;; -esac - -# -# Shared object configuration section. These values are generated by -# ${srcdir}/support/shobj-conf -# -if test "$ac_cv_func_dlopen" = "yes" && test -f ${srcdir}/support/shobj-conf -then - AC_MSG_CHECKING(shared object configuration for loadable builtins) - eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"` - AC_SUBST(SHOBJ_CC) - AC_SUBST(SHOBJ_CFLAGS) - AC_SUBST(SHOBJ_LD) - AC_SUBST(SHOBJ_LDFLAGS) - AC_SUBST(SHOBJ_XLDFLAGS) - AC_SUBST(SHOBJ_LIBS) - AC_SUBST(SHOBJ_STATUS) - AC_MSG_RESULT($SHOBJ_STATUS) -fi - -# try to create a directory tree if the source is elsewhere -# this should be packaged into a script accessible via ${srcdir}/support -case "$srcdir" in -.) ;; -*) for d in doc tests support lib examples; do # dirs - test -d $d || mkdir $d - done - for ld in readline glob tilde malloc sh termcap; do # libdirs - test -d lib/$ld || mkdir lib/$ld - done - test -d examples/loadables || mkdir examples/loadables # loadable builtins - test -d examples/loadables/perl || mkdir examples/loadables/perl - ;; -esac - -BUILD_DIR=`pwd` -case "$BUILD_DIR" in -*\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; -*) ;; -esac - -if test -z "$localedir"; then - localedir='${datarootdir}/locale' -fi -if test -z "$datarootdir"; then - datarootdir='${prefix}/share' -fi - -AC_SUBST(PROFILE_FLAGS) - -AC_SUBST(incdir) -AC_SUBST(BUILD_DIR) - -# Some versions of autoconf don't substitute these automatically -AC_SUBST(datarootdir) -AC_SUBST(localedir) - -AC_SUBST(YACC) -AC_SUBST(AR) -AC_SUBST(ARFLAGS) - -AC_SUBST(BASHVERS) -AC_SUBST(RELSTATUS) -AC_SUBST(DEBUG) -AC_SUBST(MALLOC_DEBUG) - -AC_SUBST(host_cpu) -AC_SUBST(host_vendor) -AC_SUBST(host_os) - -AC_SUBST(LOCAL_LIBS) -AC_SUBST(LOCAL_CFLAGS) -AC_SUBST(LOCAL_LDFLAGS) -AC_SUBST(LOCAL_DEFS) - -#AC_SUBST(ALLOCA_SOURCE) -#AC_SUBST(ALLOCA_OBJECT) - -AC_OUTPUT([Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile \ - lib/intl/Makefile \ - lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \ - lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in \ - examples/loadables/Makefile examples/loadables/perl/Makefile], -[ -# Makefile uses this timestamp file to record whether config.h is up to date. -echo timestamp > stamp-h -]) diff --git a/doc/FAQ b/doc/FAQ index 104d0bc1..06c6fffd 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -1,4 +1,6 @@ -This is the Bash FAQ, version 4.15, for Bash version 5.0. +This is the Bash FAQ, version 4.15, for Bash version 5.1. + +[This document is no longer maintained.] This document contains a set of frequently-asked questions concerning Bash, the GNU Bourne-Again Shell. Bash is a freely-available command diff --git a/doc/Makefile.in b/doc/Makefile.in index 12068fb5..8bf775e1 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -74,7 +74,6 @@ TEXI2DVI = ${SUPPORT_SRCDIR}/texi2dvi TEXI2HTML = ${SUPPORT_SRCDIR}/texi2html MAN2HTML = ${BUILD_DIR}/support/man2html HTMLPOST = ${srcdir}/htmlpost.sh -INFOPOST = ${srcdir}/infopost.sh QUIETPS = #set this to -q to shut up dvips PAPERSIZE = letter # change to a4 for A4-size paper PSDPI = 600 # could be 300 if you like @@ -108,11 +107,11 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi .1.ps: $(RM) $@ - -${GROFF} -man $< > $@ + -${GROFF} -I${srcdir} -man $< > $@ .1.0: $(RM) $@ - -${NROFF} -man $< > $@ + -${NROFF} -I${srcdir} -man $< > $@ .1.html: $(RM) $@ @@ -128,11 +127,11 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi .3.ps: $(RM) $@ - -${GROFF} -man $< > $@ + -${GROFF} -I${srcdir} -man $< > $@ .3.0: $(RM) $@ - -${NROFF} -man $< > $@ + -${NROFF} -I${srcdir} -man $< > $@ .3.html: $(RM) $@ @@ -173,23 +172,26 @@ html: ${HTMLFILES} pdf: ${PDFFILES} bashref.dvi: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(RM) $@ ${SET_TEXINPUTS} $(TEXI2DVI) $(srcdir)/bashref.texi || { ${RM} $@ ; exit 1; } bashref.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(RM) $@ $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi # experimental bashref.pdf: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(RM) $@ ${SET_TEXINPUTS} $(TEXI2PDF) $(srcdir)/bashref.texi || { ${RM} $@ ; exit 1; } - # can also use: # $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/bashref.texi bashref.html: $(BASHREF_FILES) $(HSUSER) $(RLUSER) $(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi -bash.info: bashref.info - ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \ +bash.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(RM) $@ + $(MAKEINFO) -o $@ --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi bash.txt: bash.1 bash.ps: bash.1 @@ -324,18 +326,18 @@ faq.mail: FAQ faq.headers.mail faq.version cat faq.headers.mail faq.version FAQ > $@ inst: bashref.texi - $(SHELL) ./mkinstall - cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL + $(SHELL) ${srcdir}/mkinstall -t ${topdir} -s ${srcdir} + cmp -s INSTALL ${topdir}/INSTALL || mv INSTALL ${topdir}/INSTALL $(RM) INSTALL posix: bashref.texi - $(SHELL) ./mkposix - cmp -s POSIX ../POSIX || mv POSIX ../POSIX + $(SHELL) ${srcdir}/mkposix -t ${topdir} -s ${srcdir} + cmp -s POSIX ${topdir}/POSIX || mv POSIX ${topdir}/POSIX $(RM) POSIX rbash: bashref.texi - $(SHELL) ./mkrbash - cmp -s RBASH ../RBASH || mv RBASH ../RBASH + $(SHELL) ${srcdir}/mkrbash -t ${topdir} -s ${srcdir} + cmp -s RBASH ${topdir}/RBASH || mv RBASH ${topdir}/RBASH $(RM) RBASH xdist: everything inst posix rbash diff --git a/doc/bash.0 b/doc/bash.0 index 9160b097..38829fcd 100644 --- a/doc/bash.0 +++ b/doc/bash.0 @@ -9,7 +9,7 @@ SSYYNNOOPPSSIISS bbaasshh [options] [command_string | file] CCOOPPYYRRIIGGHHTT - Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc. + Bash is Copyright (C) 1989-2021 by the Free Software Foundation, Inc. DDEESSCCRRIIPPTTIIOONN BBaasshh is an sshh-compatible command language interpreter that executes @@ -131,7 +131,7 @@ IINNVVOOCCAATTIIOONN one started with the ----llooggiinn option. An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments (un- - less --ss is specified) and without the --cc option whose standard input + less --ss is specified) and without the --cc option, whose standard input and error are both connected to terminals (as determined by _i_s_a_t_t_y(3)), or one started with the --ii option. PPSS11 is set and $$-- includes ii if bbaasshh is interactive, allowing a shell script or a startup file to test @@ -237,59 +237,63 @@ RREESSEERRVVEEDD WWOORRDDSS tthheenn uunnttiill wwhhiillee {{ }} ttiimmee [[[[ ]]]] SSHHEELLLL GGRRAAMMMMAARR + This section describes the syntax of the various forms of shell com- + mands. + SSiimmppllee CCoommmmaannddss - A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- - lowed by bbllaannkk-separated words and redirections, and terminated by a + A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- + lowed by bbllaannkk-separated words and redirections, and terminated by a _c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed, - and is passed as argument zero. The remaining words are passed as ar- + and is passed as argument zero. The remaining words are passed as ar- guments to the invoked command. - The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if + The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if the command is terminated by signal _n. PPiippeelliinneess - A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of + A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of the control operators || or ||&&. The format for a pipeline is: - [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] + [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d_1 [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] - The standard output of _c_o_m_m_a_n_d is connected via a pipe to the standard - input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- - tions specified by the command (see RREEDDIIRREECCTTIIOONN below). If ||&& is used, - _c_o_m_m_a_n_d's standard error, in addition to its standard output, is con- - nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand - for 22>>&&11 ||. This implicit redirection of the standard error to the - standard output is performed after any redirections specified by the - command. + The standard output of _c_o_m_m_a_n_d_1 is connected via a pipe to the standard + input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- + tions specified by the _c_o_m_m_a_n_d_1(see RREEDDIIRREECCTTIIOONN below). If ||&& is used, + _c_o_m_m_a_n_d_1's standard error, in addition to its standard output, is con- + nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand + for 22>>&&11 ||. This implicit redirection of the standard error to the + standard output is performed after any redirections specified by _c_o_m_- + _m_a_n_d_1. The return status of a pipeline is the exit status of the last command, - unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the - pipeline's return status is the value of the last (rightmost) command - to exit with a non-zero status, or zero if all commands exit success- + unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the + pipeline's return status is the value of the last (rightmost) command + to exit with a non-zero status, or zero if all commands exit success- fully. If the reserved word !! precedes a pipeline, the exit status of - that pipeline is the logical negation of the exit status as described - above. The shell waits for all commands in the pipeline to terminate + that pipeline is the logical negation of the exit status as described + above. The shell waits for all commands in the pipeline to terminate before returning a value. - If the ttiimmee 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 --pp option changes the output format to that - specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- - ognize ttiimmee as a reserved word if the next token begins with a `-'. - The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies - how the timing information should be displayed; see the description of + If the ttiimmee 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 --pp option changes the output format to that + specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- + ognize ttiimmee as a reserved word if the next token begins with a `-'. + The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies + how the timing information should be displayed; see the description of TTIIMMEEFFOORRMMAATT under SShheellll VVaarriiaabblleess below. When the shell is in _p_o_s_i_x _m_o_d_e, ttiimmee may be followed by a newline. In - this case, the shell displays the total user and system time consumed - by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to + this case, the shell displays the total user and system time consumed + by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to specify the format of the time information. - Each command in a pipeline is executed as a separate process (i.e., in - a subshell). See CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of a - subshell environment. If the llaassttppiippee option is enabled using the - sshhoopptt builtin (see the description of sshhoopptt below), the last element of - a pipeline may be run by the shell process. + Each command in a pipeline is executed in a _s_u_b_s_h_e_l_l, which is a sepa- + rate process. See CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of + subshells and a subshell environment. If the llaassttppiippee option is en- + abled using the sshhoopptt builtin (see the description of sshhoopptt below), the + last element of a pipeline may be run by the shell process when job + control is not active. LLiissttss A _l_i_s_t is a sequence of one or more pipelines separated by one of the @@ -333,11 +337,11 @@ SSHHEELLLL GGRRAAMMMMAARR one or more newlines, and may be followed by a newline in place of a semicolon. - (_l_i_s_t) _l_i_s_t is executed in a subshell environment (see CCOOMMMMAANNDD EEXXEECCUU-- - TTIIOONN EENNVVIIRROONNMMEENNTT below). Variable assignments and builtin com- - mands that affect the shell's environment do not remain in ef- - fect after the command completes. The return status is the exit - status of _l_i_s_t. + (_l_i_s_t) _l_i_s_t is executed in a subshell (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN-- + MMEENNTT below for a description of a subshell environment). Vari- + able 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 _l_i_s_t. { _l_i_s_t; } _l_i_s_t is simply executed in the current shell environment. _l_i_s_t @@ -353,66 +357,71 @@ SSHHEELLLL GGRRAAMMMMAARR The _e_x_p_r_e_s_s_i_o_n is evaluated according to the rules described be- low under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. 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 lleett ""_e_x_p_r_e_s_s_i_o_n"". + is 1. The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it + were within double quotes, but double quote characters in _e_x_- + _p_r_e_s_s_i_o_n are not treated specially and are removed. [[[[ _e_x_p_r_e_s_s_i_o_n ]]]] Return a status of 0 or 1 depending on the evaluation of the conditional expression _e_x_p_r_e_s_s_i_o_n. Expressions are composed of the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. - Word splitting and pathname expansion are not performed on the - words between the [[[[ and ]]]]; tilde expansion, parameter and - variable expansion, arithmetic expansion, command substitution, - process substitution, and quote removal are performed. Condi- - tional operators such as --ff must be unquoted to be recognized as - primaries. + The words between the [[[[ and ]]]] do not undergo word splitting + and pathname expansion. The shell performs tilde expansion, pa- + rameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal on those + words (the expansions that would occur if the words were en- + closed in double quotes). Conditional operators such as --ff must + be unquoted to be recognized as primaries. - When used with [[[[, the << and >> operators sort lexicographically + When used with [[[[, the << and >> operators sort lexicographically using the current locale. - When the ==== and !!== operators are used, the string to the right + When the ==== and !!== operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below under PPaatttteerrnn MMaattcchhiinngg, as if the eexxtt-- gglloobb shell option were enabled. The == operator is equivalent to - ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is - performed without regard to the case of alphabetic characters. - The return value is 0 if the string matches (====) or does not - match (!!==) the pattern, and 1 otherwise. Any part of the pat- - tern may be quoted to force the quoted portion to be matched as + ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is + performed without regard to the case of alphabetic characters. + The return value is 0 if the string matches (====) or does not + match (!!==) the pattern, and 1 otherwise. Any part of the pat- + tern may be quoted to force the quoted portion to be matched as a string. - An additional binary operator, ==~~, is available, with the same - precedence as ==== and !!==. When it is used, the string to the + An additional binary operator, ==~~, is available, with the same + precedence as ==== and !!==. When it is used, the string to the right of the operator is considered a POSIX extended regular ex- - pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and - _r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return - value is 0 if the string matches the pattern, and 1 otherwise. + pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and + _r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return + value is 0 if the string matches the pattern, and 1 otherwise. If the regular expression is syntactically incorrect, the condi- tional expression's return value is 2. If the nnooccaasseemmaattcchh shell - option is enabled, the match is performed without regard to the - case of alphabetic characters. Any part of the pattern may be - quoted to force the quoted portion to be matched as a string. - Bracket expressions in regular expressions must be treated care- - fully, since normal quoting characters lose their meanings be- - tween brackets. If the pattern is stored in a shell variable, - quoting the variable expansion forces the entire pattern to be - matched as a string. + option is enabled, the match is performed without regard to the + case of alphabetic characters. If any part of the pattern is + quoted, the quoted portion is matched literally. This means ev- + ery character in the quoted portion matches itself, instead of + having any special pattern matching meaning. If the pattern is + stored in a shell variable, quoting the variable expansion + forces the entire pattern to be matched literally. Treat + bracket expressions in regular expressions carefully, since nor- + mal quoting and pattern characters lose their meanings between + brackets. - The pattern will match if it matches any part of the string. - Anchor the pattern using the ^^ and $$ regular expression opera- + The pattern will match if it matches any part of the string. + Anchor the pattern using the ^^ and $$ regular expression opera- tors to force it to match the entire string. The array variable - BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- - tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the - portion of the string matching the entire regular expression. - Substrings matched by parenthesized subexpressions within the - regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- - dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion + BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- + tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the + portion of the string matching the entire regular expression. + Substrings matched by parenthesized subexpressions within the + regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- + dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion of the string matching the _nth parenthesized subexpression. - Expressions may be combined using the following operators, + Expressions may be combined using the following operators, listed in decreasing order of precedence: (( _e_x_p_r_e_s_s_i_o_n )) - Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to + Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to override the normal precedence of operators. !! _e_x_p_r_e_s_s_i_o_n True if _e_x_p_r_e_s_s_i_o_n is false. @@ -422,26 +431,26 @@ SSHHEELLLL GGRRAAMMMMAARR True if either _e_x_p_r_e_s_s_i_o_n_1 or _e_x_p_r_e_s_s_i_o_n_2 is true. The &&&& and |||| operators do not evaluate _e_x_p_r_e_s_s_i_o_n_2 if the value - of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of + of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of the entire conditional expression. ffoorr _n_a_m_e [ [ iinn [ _w_o_r_d _._._. ] ] ; ] ddoo _l_i_s_t ; ddoonnee The list of words following iinn is expanded, generating a list of items. The variable _n_a_m_e is set to each element of this list in - turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit- - ted, the ffoorr command executes _l_i_s_t once for each positional pa- - rameter that is set (see PPAARRAAMMEETTEERRSS below). The return status - is the exit status of the last command that executes. If the + turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit- + ted, the ffoorr command executes _l_i_s_t once for each positional pa- + rameter that is set (see PPAARRAAMMEETTEERRSS below). The return status + is the exit status of the last command that executes. If the expansion of the items following iinn results in an empty list, no commands are executed, and the return status is 0. ffoorr (( _e_x_p_r_1 ; _e_x_p_r_2 ; _e_x_p_r_3 )) ; ddoo _l_i_s_t ; ddoonnee First, the arithmetic expression _e_x_p_r_1 is evaluated according to - the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The - arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until - it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero - value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 is - evaluated. If any expression is omitted, it behaves as if it + the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The + arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until + it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero + value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 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 _l_i_s_t that is executed, or false if any of the expres- sions is invalid. @@ -449,55 +458,55 @@ SSHHEELLLL GGRRAAMMMMAARR sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee The list of words following iinn is expanded, generating a list of items. The set of expanded words is printed on the standard er- - ror, each preceded by a number. If the iinn _w_o_r_d is omitted, the - positional parameters are printed (see PPAARRAAMMEETTEERRSS below). The - PPSS33 prompt is then displayed and a line read from the standard + ror, each preceded by a number. If the iinn _w_o_r_d is omitted, the + positional parameters are printed (see PPAARRAAMMEETTEERRSS below). The + PPSS33 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 _n_a_m_e 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 _n_a_m_e to be set to null. The line read is saved in the + If the line is empty, the words and prompt are displayed again. + If EOF is read, the command completes. Any other value read + causes _n_a_m_e to be set to null. The line read is saved in the variable RREEPPLLYY. The _l_i_s_t is executed after each selection until - a bbrreeaakk command is executed. The exit status of sseelleecctt is the - exit status of the last command executed in _l_i_s_t, or zero if no + a bbrreeaakk command is executed. The exit status of sseelleecctt is the + exit status of the last command executed in _l_i_s_t, or zero if no commands were executed. ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc A ccaassee command first expands _w_o_r_d, and tries to match it against - each _p_a_t_t_e_r_n in turn, using the matching rules described under + each _p_a_t_t_e_r_n in turn, using the matching rules described under PPaatttteerrnn MMaattcchhiinngg below. The _w_o_r_d is expanded using tilde expan- - sion, parameter and variable expansion, arithmetic expansion, - command substitution, process substitution and quote removal. + sion, parameter and variable expansion, arithmetic expansion, + command substitution, process substitution and quote removal. Each _p_a_t_t_e_r_n examined is expanded using tilde expansion, parame- - ter and variable expansion, arithmetic expansion, command sub- - stitution, and process substitution. If the nnooccaasseemmaattcchh shell - option is enabled, the match is performed without regard to the - case of alphabetic characters. When a match is found, the cor- - responding _l_i_s_t is executed. If the ;;;; operator is used, no - subsequent matches are attempted after the first pattern match. - Using ;;&& in place of ;;;; causes execution to continue with the - _l_i_s_t associated with the next set of patterns. Using ;;;;&& in - place of ;;;; causes the shell to test the next pattern list in - the statement, if any, and execute any associated _l_i_s_t on a suc- - cessful match, continuing the case statement execution as if the - pattern list had not matched. The exit status is zero if no - pattern matches. Otherwise, it is the exit status of the last - command executed in _l_i_s_t. + ter and variable expansion, arithmetic expansion, command sub- + stitution, process substitution, and quote removal. If the nnoo-- + ccaasseemmaattcchh shell option is enabled, the match is performed with- + out regard to the case of alphabetic characters. When a match + is found, the corresponding _l_i_s_t is executed. If the ;;;; opera- + tor is used, no subsequent matches are attempted after the first + pattern match. Using ;;&& in place of ;;;; causes execution to con- + tinue with the _l_i_s_t associated with the next set of patterns. + Using ;;;;&& in place of ;;;; causes the shell to test the next pat- + tern list in the statement, if any, and execute any associated + _l_i_s_t on a successful match, continuing the case statement execu- + tion as if the pattern list had not matched. The exit status is + zero if no pattern matches. Otherwise, it is the exit status of + the last command executed in _l_i_s_t. iiff _l_i_s_t; tthheenn _l_i_s_t; [ eelliiff _l_i_s_t; tthheenn _l_i_s_t; ] ... [ eellssee _l_i_s_t; ] ffii - The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn - _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in - turn, and if its exit status is zero, the corresponding tthheenn + The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn + _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in + turn, and if its exit status is zero, the corresponding tthheenn _l_i_s_t is executed and the command completes. Otherwise, the eellssee - _l_i_s_t is executed, if present. The exit status is the exit sta- + _l_i_s_t is executed, if present. The exit status is the exit sta- tus of the last command executed, or zero if no condition tested true. wwhhiillee _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee uunnttiill _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee - The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long + The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long as the last command in the list _l_i_s_t_-_1 returns an exit status of - zero. The uunnttiill command is identical to the wwhhiillee command, ex- + zero. The uunnttiill command is identical to the wwhhiillee command, ex- cept that the test is negated: _l_i_s_t_-_2 is executed as long as the last command in _l_i_s_t_-_1 returns a non-zero exit status. The exit status of the wwhhiillee and uunnttiill commands is the exit status of the @@ -505,32 +514,49 @@ SSHHEELLLL GGRRAAMMMMAARR CCoopprroocceesssseess A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A - coprocess is executed asynchronously in a subshell, as if the command - had been terminated with the && control operator, with a two-way pipe + coprocess is executed asynchronously in a subshell, as if the command + had been terminated with the && control operator, with a two-way pipe established between the executing shell and the coprocess. - The format for a coprocess is: + The syntax for a coprocess is: ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s] - This creates a coprocess named _N_A_M_E. If _N_A_M_E is not supplied, the de- - fault name is CCOOPPRROOCC. _N_A_M_E must not be supplied if _c_o_m_m_a_n_d is a _s_i_m_p_l_e - _c_o_m_m_a_n_d (see above); otherwise, it is interpreted as the first word of - the simple command. When the coprocess is executed, the shell creates - an array variable (see AArrrraayyss below) named _N_A_M_E in the context of the - executing shell. The standard output of _c_o_m_m_a_n_d is connected via a - pipe to a file descriptor in the executing shell, and that file de- - scriptor is assigned to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is con- - nected via a pipe to a file descriptor in the executing shell, and that - file descriptor is assigned to _N_A_M_E[1]. This pipe is established be- - fore any redirections specified by the command (see RREEDDIIRREECCTTIIOONN below). - The file descriptors can be utilized as arguments to shell commands and - redirections using standard word expansions. Other than those created - to execute command and process substitutions, the file descriptors are - not available in subshells. The process ID of the shell spawned to ex- - ecute the coprocess is available as the value of the variable _N_A_M_E_PID. - The wwaaiitt builtin command may be used to wait for the coprocess to ter- - minate. + This creates a coprocess named _N_A_M_E. _c_o_m_m_a_n_d may be either a simple + command or a compound command (see above). _N_A_M_E is a shell variable + name. If _N_A_M_E is not supplied, the default name is CCOOPPRROOCC. + + The recommended form to use for a coprocess is + + ccoopprroocc _N_A_M_E { _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]; } + + This form is recommended because simple commands result in the copro- + cess always being named CCOOPPRROOCC, and it is simpler to use and more com- + plete than the other compound commands. + + If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following + ccoopprroocc determines whether that word is interpreted as a variable name: + it is interpreted as _N_A_M_E if it is not a reserved word that introduces + a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al- + lowed; this is to avoid confusion between _N_A_M_E and the first word of + the simple command. + + When the coprocess is executed, the shell creates an array variable + (see AArrrraayyss below) named _N_A_M_E in the context of the executing shell. + The standard output of _c_o_m_m_a_n_d is connected via a pipe to a file de- + scriptor in the executing shell, and that file descriptor is assigned + to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is connected via a pipe to a + file descriptor in the executing shell, and that file descriptor is as- + signed to _N_A_M_E[1]. This pipe is established before any redirections + specified by the command (see RREEDDIIRREECCTTIIOONN below). The file descriptors + can be utilized as arguments to shell commands and redirections using + standard word expansions. Other than those created to execute command + and process substitutions, the file descriptors are not available in + subshells. + + The process ID of the shell spawned to execute the coprocess is avail- + able as the value of the variable _N_A_M_E_PID. The wwaaiitt builtin command + may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the ccoopprroocc command always returns success. The return status of a coprocess is @@ -548,20 +574,20 @@ SSHHEELLLL GGRRAAMMMMAARR parentheses are optional. The _b_o_d_y of the function is the com- pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above). That command is usually a _l_i_s_t of commands between { and }, but - may be any command listed under CCoommppoouunndd CCoommmmaannddss above, with - one exception: If the ffuunnccttiioonn reserved word is used, but the - parentheses are not supplied, the braces are required. _c_o_m_- - _p_o_u_n_d_-_c_o_m_m_a_n_d is executed whenever _f_n_a_m_e is specified as the - name of a simple command. When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a - valid shell _n_a_m_e and may not be the name of one of the POSIX - _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default mode, a function name can be any - unquoted shell word that does not contain $$. Any redirections - (see RREEDDIIRREECCTTIIOONN below) specified when a function is defined are - performed when the function is executed. The exit status of a - function definition is zero unless a syntax error occurs or a - readonly function with the same name already exists. When exe- - cuted, the exit status of a function is the exit status of the - last command executed in the body. (See FFUUNNCCTTIIOONNSS below.) + may be any command listed under CCoommppoouunndd CCoommmmaannddss above. If the + ffuunnccttiioonn reserved word is used, but the parentheses are not sup- + plied, the braces are recommended. _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d is executed + whenever _f_n_a_m_e is specified as the name of a simple command. + When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a valid shell _n_a_m_e and may not + be the name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default + mode, a function name can be any unquoted shell word that does + not contain $$. Any redirections (see RREEDDIIRREECCTTIIOONN below) speci- + fied when a function is defined are performed when the function + is executed. The exit status of a function definition is zero + unless a syntax error occurs or a readonly function with the + same name already exists. When executed, the exit status of a + function is the exit status of the last command executed in the + body. (See FFUUNNCCTTIIOONNSS below.) CCOOMMMMEENNTTSS In a non-interactive shell, or an interactive shell in which the iinntteerr-- @@ -613,10 +639,11 @@ QQUUOOTTIINNGG The special parameters ** and @@ have special meaning when in double quotes (see PPAARRAAMMEETTEERRSS below). - Words of the form $$'_s_t_r_i_n_g' are treated specially. The word expands to - _s_t_r_i_n_g, with backslash-escaped characters replaced as specified by the - ANSI C standard. Backslash escape sequences, if present, are decoded - as follows: + Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special + variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back- + slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C + standard. Backslash escape sequences, if present, are decoded as fol- + lows: \\aa alert (bell) \\bb backspace \\ee @@ -630,146 +657,147 @@ QQUUOOTTIINNGG \\'' single quote \\"" double quote \\?? question mark - \\_n_n_n the eight-bit character whose value is the octal value + \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) \\cc_x a control-_x character - The expanded result is single-quoted, as if the dollar sign had not + The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") will cause - the string to be translated according to the current locale. The _g_e_t_- - _t_e_x_t infrastructure performs the message catalog lookup and transla- - tion, using the LLCC__MMEESSSSAAGGEESS and TTEEXXTTDDOOMMAAIINN shell variables. If the - current locale is CC or PPOOSSIIXX, or if there are no translations avail- - able, the dollar sign is ignored. If the string is translated and re- - placed, the replacement is double-quoted. + the string to be translated according to the current locale. The _g_e_t_- + _t_e_x_t infrastructure performs the lookup and translation, using the + LLCC__MMEESSSSAAGGEESS, TTEEXXTTDDOOMMAAIINNDDIIRR, and TTEEXXTTDDOOMMAAIINN shell variables. If the + current locale is CC or PPOOSSIIXX, if there are no translations available, + or if the string is not translated, the dollar sign is ignored. This + is a form of double quoting, so the string remains double-quoted by de- + fault, whether or not it is translated and replaced. If the nnooeexx-- + ppaanndd__ttrraannssllaattiioonn option is enabled using the sshhoopptt builtin, translated + strings are single-quoted instead of double-quoted. See the descrip- + tion of sshhoopptt below under SSHHEELLLLBUILTINCCOOMMMMAANNDDSS. PPAARRAAMMEETTEERRSS - A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- + A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- ber, or one of the special characters listed below under SSppeecciiaall PPaarraamm-- - eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a - _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the + eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a + _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS). 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 + a valid value. Once a variable is set, it may be unset only by using the uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A _v_a_r_i_a_b_l_e may be assigned to by a statement of the form _n_a_m_e=[_v_a_l_u_e] - If _v_a_l_u_e is not given, the variable is assigned the null string. All - _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- - mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- + If _v_a_l_u_e is not given, the variable is assigned the null string. All + _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- + mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e is evaluated as an arithmetic expression even if the $((...)) expansion - is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting is not - performed, with the exception of ""$$@@"" as explained below under SSppeecciiaall - PPaarraammeetteerrss. Pathname expansion is not performed. Assignment state- - ments may also appear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexx-- - ppoorrtt, rreeaaddoonnllyy, and llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). - When in _p_o_s_i_x _m_o_d_e, these builtins may appear in a command after one or - more instances of the ccoommmmaanndd builtin and retain these assignment - statement properties. + is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting and path- + name expansion are not performed. Assignment statements may also ap- + pear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexxppoorrtt, rreeaaddoonnllyy, and + llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). When in _p_o_s_i_x _m_o_d_e, + these builtins may appear in a command after one or more instances of + the ccoommmmaanndd builtin and retain these assignment statement properties. - In the context where an assignment statement is assigning a value to a + In the context where an assignment statement is assigning a value to a shell variable or array index, the += operator can be used to append to - or add to the variable's previous value. This includes arguments to - builtin commands such as ddeeccllaarree that accept assignment statements + or add to the variable's previous value. This includes arguments to + builtin commands such as ddeeccllaarree that accept assignment statements (_d_e_c_l_a_r_a_t_i_o_n commands). When += is applied to a variable for which the _i_n_t_e_g_e_r attribute has been set, _v_a_l_u_e is evaluated as an arithmetic ex- pression and added to the variable's current value, which is also eval- - uated. When += is applied to an array variable using compound assign- - ment (see AArrrraayyss below), the variable's value is not unset (as it is - when using =), and new values are appended to the array beginning at - one greater than the array's maximum index (for indexed arrays) or - added as additional key-value pairs in an associative array. When ap- - plied to a string-valued variable, _v_a_l_u_e is expanded and appended to + uated. When += is applied to an array variable using compound assign- + ment (see AArrrraayyss below), the variable's value is not unset (as it is + when using =), and new values are appended to the array beginning at + one greater than the array's maximum index (for indexed arrays) or + added as additional key-value pairs in an associative array. When ap- + plied to a string-valued variable, _v_a_l_u_e is expanded and appended to the variable's value. A variable can be assigned the _n_a_m_e_r_e_f attribute using the --nn option to - the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree - and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari- - able. This allows variables to be manipulated indirectly. Whenever - the nameref variable is referenced, assigned to, unset, or has its at- - tributes modified (other than using or changing the _n_a_m_e_r_e_f attribute - itself), the operation is actually performed on the variable specified - by the nameref variable's value. A nameref is commonly used within + the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree + and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari- + able. This allows variables to be manipulated indirectly. Whenever + the nameref variable is referenced, assigned to, unset, or has its at- + tributes modified (other than using or changing the _n_a_m_e_r_e_f attribute + itself), the operation is actually performed on the variable specified + by the nameref variable's value. A nameref is commonly used within shell functions to refer to a variable whose name is passed as an argu- - ment to the function. For instance, if a variable name is passed to a + ment to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 - inside the function creates a nameref variable rreeff whose value is the + inside the function creates a nameref variable rreeff whose value is the variable name passed as the first argument. References and assignments - to rreeff, and changes to its attributes, are treated as references, as- - signments, and attribute modifications to the variable whose name was - passed as $$11. If the control variable in a ffoorr loop has the nameref - attribute, the list of words can be a list of shell variables, and a - name reference will be established for each word in the list, in turn, + to rreeff, and changes to its attributes, are treated as references, as- + signments, and attribute modifications to the variable whose name was + passed as $$11. If the control variable in a ffoorr loop has the nameref + attribute, the list of words can be a list of shell variables, and a + name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nnaammeerreeff - attribute. However, nameref variables can reference array variables - and subscripted array variables. Namerefs can be unset using the --nn - option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the - name of a nameref variable as an argument, the variable referenced by + attribute. However, nameref variables can reference array variables + and subscripted array variables. Namerefs can be unset using the --nn + option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the + name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. PPoossiittiioonnaall PPaarraammeetteerrss - A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, + A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r 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 sseett builtin command. Positional parameters may not be assigned to - with assignment statements. The positional parameters are temporarily + the shell's arguments when it is invoked, and may be reassigned using + the sseett 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 FFUUNNCCTTIIOONNSS below). - When a positional parameter consisting of more than a single digit is + When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces (see EEXXPPAANNSSIIOONN below). SSppeecciiaall PPaarraammeetteerrss - The shell treats several parameters specially. These parameters may + The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. - ** Expands to the positional parameters, starting from one. When - the expansion is not within double quotes, each positional pa- - rameter expands to a separate word. In contexts where it is + ** Expands to the positional parameters, starting from one. When + the expansion is not within double quotes, each positional pa- + rameter expands to a separate word. In contexts where it is performed, those words are subject to further word splitting and - pathname expansion. When the expansion occurs within double - quotes, it expands to a single word with the value of each pa- - rameter separated by the first character of the IIFFSS special - variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c + pathname expansion. When the expansion occurs within double + quotes, it expands to a single word with the value of each pa- + rameter separated by the first character of the IIFFSS special + variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c is the first character of the value of the IIFFSS variable. If IIFFSS - is unset, the parameters are separated by spaces. If IIFFSS is + is unset, the parameters are separated by spaces. If IIFFSS is null, the parameters are joined without intervening separators. - @@ Expands to the positional parameters, starting from one. In - contexts where word splitting is performed, this expands each - positional parameter to a separate word; if not within double - quotes, these words are subject to word splitting. In contexts - where word splitting is not performed, this expands to a single - word with each positional parameter separated by a space. When - the expansion occurs within double quotes, each parameter ex- - pands to a separate word. That is, "$$@@" is equivalent to "$$11" - "$$22" ... If the double-quoted expansion occurs within a word, - the expansion of the first parameter is joined with the begin- - ning part of the original word, and the expansion of the last - parameter is joined with the last part of the original word. - When there are no positional parameters, "$$@@" and $$@@ expand to + @@ Expands to the positional parameters, starting from one. In + contexts where word splitting is performed, this expands each + positional parameter to a separate word; if not within double + quotes, these words are subject to word splitting. In contexts + where word splitting is not performed, this expands to a single + word with each positional parameter separated by a space. When + the expansion occurs within double quotes, each parameter ex- + pands to a separate word. That is, "$$@@" is equivalent to "$$11" + "$$22" ... If the double-quoted expansion occurs within a word, + the expansion of the first parameter is joined with the begin- + ning part of the original word, and the expansion of the last + parameter is joined with the last part of the original word. + When there are no positional parameters, "$$@@" and $$@@ expand to nothing (i.e., they are removed). ## Expands to the number of positional parameters in decimal. - ?? Expands to the exit status of the most recently executed fore- + ?? Expands to the exit status of the most recently executed fore- ground pipeline. - -- Expands to the current option flags as specified upon invoca- - tion, by the sseett builtin command, or those set by the shell it- + -- Expands to the current option flags as specified upon invoca- + tion, by the sseett builtin command, or those set by the shell it- self (such as the --ii option). - $$ Expands to the process ID of the shell. In a () subshell, it - expands to the process ID of the current shell, not the sub- - shell. + $$ Expands to the process ID of the shell. In a subshell, it ex- + pands to the process ID of the current shell, not the subshell. !! Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bbgg builtin (see JJOOBB CCOONNTTRROOLL below). @@ -1032,6 +1060,10 @@ PPAARRAAMMEETTEERRSS tializes (seeds) the sequence of random numbers. If RRAANNDDOOMM is unset, it loses its special properties, even if it is subse- quently reset. + RREEAADDLLIINNEE__AARRGGUUMMEENNTT + Any numeric argument given to a Readline command that was de- + fined using "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) when it + was invoked. RREEAADDLLIINNEE__LLIINNEE The contents of the rreeaaddlliinnee line buffer, for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). @@ -1046,12 +1078,12 @@ PPAARRAAMMEETTEERRSS RREEPPLLYY Set to the line of input read by the rreeaadd builtin command when no arguments are supplied. SSEECCOONNDDSS - Each time this parameter is referenced, the number of seconds - since shell invocation is returned. If a value is assigned to + Each time this parameter is referenced, it expands to the number + of seconds since shell invocation. If a value is assigned to SSEECCOONNDDSS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned. The number of seconds at shell invocation and the current time - is always determined by querying the system clock. If SSEECCOONNDDSS + are always determined by querying the system clock. If SSEECCOONNDDSS is unset, it loses its special properties, even if it is subse- quently reset. SSHHEELLLLOOPPTTSS @@ -1500,85 +1532,88 @@ PPAARRAAMMEETTEERRSS stroys the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and asso- ciative arrays. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable - does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, or - uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or @@, removes the entire - array. + does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, re- + moves the entire array. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or + @@, behaves differently depending on whether _n_a_m_e is an indexed or asso- + ciative array. If _n_a_m_e is an associative array, this unsets the ele- + ment with subscript ** or @@. If _n_a_m_e is an indexed array, unset removes + all of the elements but does not remove the array itself. - When using a variable name with a subscript as an argument to a com- - mand, such as with uunnsseett, without using the word expansion syntax de- + When using a variable name with a subscript as an argument to a com- + mand, such as with uunnsseett, without using the word expansion syntax de- scribed above, the argument is subject to pathname expansion. If path- name expansion is not desired, the argument should be quoted. - The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to - specify an indexed array and a --AA option to specify an associative ar- - ray. If both options are supplied, --AA takes precedence. The rreeaadd - builtin accepts a --aa option to assign a list of words read from the + The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to + specify an indexed array and a --AA option to specify an associative ar- + ray. If both options are supplied, --AA takes precedence. The rreeaadd + builtin accepts a --aa option to assign a list of words read from the standard input to an array. The sseett and ddeeccllaarree builtins display array values in a way that allows them to be reused as assignments. EEXXPPAANNSSIIOONN Expansion is performed on the command line after it has been split into - words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, - _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- + words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, + _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- _t_i_o_n, _a_r_i_t_h_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, and _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n. The order of expansions is: brace expansion; tilde expansion, parameter - and variable expansion, arithmetic expansion, and command substitution - (done in a left-to-right fashion); word splitting; and pathname expan- + and variable expansion, arithmetic expansion, and command substitution + (done in a left-to-right fashion); word splitting; and pathname expan- sion. On systems that can support it, there is an additional expansion avail- - able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as - tilde, parameter, variable, and arithmetic expansion and command sub- + able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as + tilde, parameter, variable, and arithmetic expansion and command sub- stitution. - After these expansions are performed, quote characters present in the - original word are removed unless they have been quoted themselves + After these expansions are performed, quote characters present in the + original word are removed unless they have been quoted themselves (_q_u_o_t_e _r_e_m_o_v_a_l). - Only brace expansion, word splitting, and pathname expansion can in- - crease the number of words of the expansion; other expansions expand a - single word to a single word. The only exceptions to this are the ex- + Only brace expansion, word splitting, and pathname expansion can in- + crease the number of words of the expansion; other expansions expand a + single word to a single word. The only exceptions to this are the ex- pansions of "$$@@" and "$${{_n_a_m_e[[@@]]}}", and, in most cases, $$** and $${{_n_a_m_e[[**]]}} as explained above (see PPAARRAAMMEETTEERRSS). BBrraaccee EExxppaannssiioonn _B_r_a_c_e _e_x_p_a_n_s_i_o_n is a mechanism by which arbitrary strings may be gener- - ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file- + ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file- names generated need not exist. Patterns to be brace expanded take the form of an optional _p_r_e_a_m_b_l_e, followed by either a series of comma-sep- - arated strings or a sequence expression between a pair of braces, fol- - lowed by an optional _p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each + arated strings or a sequence expression between a pair of braces, fol- + lowed by an optional _p_o_s_t_s_c_r_i_p_t. 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, + Brace expansions may be nested. The results of each expanded string + are not sorted; left to right order is preserved. For example, a{{d,c,b}}e expands into `ade ace abe'. - A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are - either integers or single characters, and _i_n_c_r, an optional increment, - is an integer. When integers are supplied, the expression expands to - each number between _x and _y, inclusive. Supplied integers may be pre- - fixed with _0 to force each term to have the same width. When either _x - or _y begins with a zero, the shell attempts to force all generated - terms to contain the same number of digits, zero-padding where neces- - sary. When characters are supplied, the expression expands to each - character lexicographically between _x and _y, inclusive, using the de- - fault C locale. Note that both _x and _y must be of the same type. When - the increment is supplied, it is used as the difference between each - term. The default increment is 1 or -1 as appropriate. + A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are + either integers or single letters, and _i_n_c_r, an optional increment, is + an integer. When integers are supplied, the expression expands to each + number between _x and _y, inclusive. Supplied integers may be prefixed + with _0 to force each term to have the same width. When either _x or _y + begins with a zero, the shell attempts to force all generated terms to + contain the same number of digits, zero-padding where necessary. When + letters are supplied, the expression expands to each character lexico- + graphically between _x and _y, inclusive, using the default C locale. + Note that both _x and _y must be of the same type (integer or letter). + When the increment is supplied, it is used as the difference between + each term. The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any char- - acters special to other expansions are preserved in the result. It is - strictly textual. BBaasshh does not apply any syntactic interpretation to + acters special to other expansions are preserved in the result. It is + strictly textual. BBaasshh does not apply any syntactic interpretation to the context of the expansion or the text between the braces. - A correctly-formed brace expansion must contain unquoted opening and + A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence ex- pression. Any incorrectly formed brace expansion is left unchanged. A - {{ or ,, may be quoted with a backslash to prevent its being considered - part of a brace expression. To avoid conflicts with parameter expan- + {{ or ,, may be quoted with a backslash to prevent its being considered + part of a brace expression. To avoid conflicts with parameter expan- sion, the string $${{ is not considered eligible for brace expansion, and inhibits brace expansion until the closing }}. @@ -1589,36 +1624,36 @@ EEXXPPAANNSSIIOONN or chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} - Brace expansion introduces a slight incompatibility with historical - versions of sshh. sshh does not treat opening or closing braces specially - when they appear as part of a word, and preserves them in the output. - BBaasshh removes braces from words as a consequence of brace expansion. - For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in - the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by - bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the + Brace expansion introduces a slight incompatibility with historical + versions of sshh. sshh does not treat opening or closing braces specially + when they appear as part of a word, and preserves them in the output. + BBaasshh removes braces from words as a consequence of brace expansion. + For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in + the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by + bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the ++BB option or disable brace expansion with the ++BB option to the sseett com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). TTiillddee EExxppaannssiioonn - If a word begins with an unquoted tilde character (`~~'), all of the - characters preceding the first unquoted slash (or all characters, if - there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. 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 _l_o_g_i_n _n_a_m_e. - If this login name is the null string, the tilde is replaced with the - value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- - tory of the user executing the shell is substituted instead. Other- - wise, the tilde-prefix is replaced with the home directory associated + If a word begins with an unquoted tilde character (`~~'), all of the + characters preceding the first unquoted slash (or all characters, if + there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. 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 _l_o_g_i_n _n_a_m_e. + If this login name is the null string, the tilde is replaced with the + value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- + tory of the user executing the shell is substituted instead. Other- + wise, the tilde-prefix is replaced with the home directory associated with the specified login name. - If the tilde-prefix is a `~+', the value of the shell variable PPWWDD re- - places the tilde-prefix. If the tilde-prefix is a `~-', the value of - the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- - acters following the tilde in the tilde-prefix consist of a number _N, - optionally prefixed by a `+' or a `-', the tilde-prefix is replaced + If the tilde-prefix is a `~+', the value of the shell variable PPWWDD re- + places the tilde-prefix. If the tilde-prefix is a `~-', the value of + the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- + acters following the tilde in the tilde-prefix consist of a number _N, + 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 ddiirrss builtin invoked with the tilde-prefix as an argu- - ment. If the characters following the tilde in the tilde-prefix con- + ment. If the characters following the tilde in the tilde-prefix con- sist of a number without a leading `+' or `-', `+' is assumed. If the login name is invalid, or the tilde expansion fails, the word is @@ -1627,139 +1662,139 @@ EEXXPPAANNSSIIOONN Each variable assignment is checked for unquoted tilde-prefixes immedi- ately following a :: or the first ==. In these cases, tilde expansion is also performed. Consequently, one may use filenames with tildes in as- - signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- + signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- panded value. - Bash also performs tilde expansion on words satisfying the conditions + Bash also performs tilde expansion on words satisfying the conditions of variable assignments (as described above under PPAARRAAMMEETTEERRSS) when they - appear as arguments to simple commands. Bash does not do this, except + appear as arguments to simple commands. Bash does not do this, except for the _d_e_c_l_a_r_a_t_i_o_n commands listed above, when in _p_o_s_i_x _m_o_d_e. PPaarraammeetteerr EExxppaannssiioonn The `$$' 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 + 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 `}}' not + When braces are used, the matching ending brace is the first `}}' not escaped by a backslash or within a quoted string, and not within an em- - bedded arithmetic expansion, command substitution, or parameter expan- + bedded arithmetic expansion, command substitution, or parameter expan- sion. ${_p_a_r_a_m_e_t_e_r} - The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required - when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one + The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required + when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one digit, or when _p_a_r_a_m_e_t_e_r is followed by a character which is not to be interpreted as part of its name. The _p_a_r_a_m_e_t_e_r is a shell - parameter as described above PPAARRAAMMEETTEERRSS) or an array reference + parameter as described above PPAARRAAMMEETTEERRSS) or an array reference (AArrrraayyss). - If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and + If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and _p_a_r_a_m_e_t_e_r is not a _n_a_m_e_r_e_f, it introduces a level of indirection. BBaasshh uses the value formed by expanding the rest of _p_a_r_a_m_e_t_e_r as the new _p_a_- - _r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of - the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r. + _r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of + the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r. This is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The value is subject to tilde ex- - pansion, parameter expansion, command substitution, and arithmetic ex- - pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the - parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete - indirect expansion. The exceptions to this are the expansions of - ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point - must immediately follow the left brace in order to introduce indirec- + pansion, parameter expansion, command substitution, and arithmetic ex- + pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the + parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete + indirect expansion. The exceptions to this are the expansions of + ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point + must immediately follow the left brace in order to introduce indirec- tion. In each of the cases below, _w_o_r_d is subject to tilde expansion, parame- ter expansion, command substitution, and arithmetic expansion. When not performing substring expansion, using the forms documented be- - low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. - Omitting the colon results in a test only for a parameter that is un- + low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. + Omitting the colon results in a test only for a parameter that is un- set. ${_p_a_r_a_m_e_t_e_r::--_w_o_r_d} - UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- - sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r + UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- + sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::==_w_o_r_d} - AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- - pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- - _t_e_r is then substituted. Positional parameters and special pa- + AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- + pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- + _t_e_r is then substituted. Positional parameters and special pa- rameters may not be assigned to in this way. ${_p_a_r_a_m_e_t_e_r::??_w_o_r_d} - DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, - the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is - not present) is written to the standard error and the shell, if + DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, + the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is + not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::++_w_o_r_d} - UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is + UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is substituted, otherwise the expansion of _w_o_r_d is substituted. ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t} ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t::_l_e_n_g_t_h} - SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the - value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_- + SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the + value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_- _s_e_t. If _p_a_r_a_m_e_t_e_r is @@, an indexed array subscripted by @@ or **, - or an associative array name, the results differ as described - below. If _l_e_n_g_t_h is omitted, expands to the substring of the + or an associative array name, the results differ as described + below. If _l_e_n_g_t_h is omitted, expands to the substring of the value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_s_e_t - and extending to the end of the value. _l_e_n_g_t_h and _o_f_f_s_e_t are + and extending to the end of the value. _l_e_n_g_t_h and _o_f_f_s_e_t are arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN below). - If _o_f_f_s_e_t evaluates to a number less than zero, the value is + If _o_f_f_s_e_t evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of _p_a_- - _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is + _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is interpreted as an offset in characters from the end of the value - of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan- - sion is the characters between _o_f_f_s_e_t and that result. Note - that a negative offset must be separated from the colon by at + of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan- + sion is the characters between _o_f_f_s_e_t and that result. Note + that a negative offset must be separated from the colon by at least one space to avoid being confused with the ::-- expansion. - If _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters + If _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters beginning at _o_f_f_s_e_t. A negative _o_f_f_s_e_t is taken relative to one - greater than the greatest positional parameter, so an offset of - -1 evaluates to the last positional parameter. It is an expan- + greater than the greatest positional parameter, so an offset of + -1 evaluates to the last positional parameter. It is an expan- sion error if _l_e_n_g_t_h evaluates to a number less than zero. If _p_a_r_a_m_e_t_e_r is an indexed array name subscripted by @ or *, the - result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_- - _r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one + result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_- + _r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one greater than the maximum index of the specified array. It is an expansion error if _l_e_n_g_t_h evaluates to a number less than zero. Substring expansion applied to an associative array produces un- defined results. - Substring indexing is zero-based unless the positional parame- - ters are used, in which case the indexing starts at 1 by de- - fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, + Substring indexing is zero-based unless the positional parame- + ters are used, in which case the indexing starts at 1 by de- + fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, $$00 is prefixed to the list. ${!!_p_r_e_f_i_x**} ${!!_p_r_e_f_i_x@@} - NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose + NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose names begin with _p_r_e_f_i_x, separated by the first character of the - IIFFSS special variable. When _@ is used and the expansion appears - within double quotes, each variable name expands to a separate + IIFFSS special variable. When _@ is used and the expansion appears + within double quotes, each variable name expands to a separate word. ${!!_n_a_m_e[_@]} ${!!_n_a_m_e[_*]} - LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to - the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is - not an array, expands to 0 if _n_a_m_e is set and null otherwise. - When _@ is used and the expansion appears within double quotes, + LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to + the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is + not an array, expands to 0 if _n_a_m_e is set and null otherwise. + When _@ is used and the expansion appears within double quotes, each key expands to a separate word. ${##_p_a_r_a_m_e_t_e_r} - PPaarraammeetteerr lleennggtthh. The length in characters of the value of _p_a_- - _r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value sub- - stituted is the number of positional parameters. If _p_a_r_a_m_e_t_e_r + PPaarraammeetteerr lleennggtthh. The length in characters of the value of _p_a_- + _r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value sub- + stituted is the number of positional parameters. If _p_a_r_a_m_e_t_e_r is an array name subscripted by ** or @@, the value substituted is the number of elements in the array. If _p_a_r_a_m_e_t_e_r is an indexed - array name subscripted by a negative number, that number is in- - terpreted as relative to one greater than the maximum index of - _p_a_r_a_m_e_t_e_r, so negative indices count back from the end of the + array name subscripted by a negative number, that number is in- + terpreted as relative to one greater than the maximum index of + _p_a_r_a_m_e_t_e_r, so negative indices count back from the end of the array, and an index of -1 references the last element. ${_p_a_r_a_m_e_t_e_r##_w_o_r_d} @@ -1767,15 +1802,15 @@ EEXXPPAANNSSIIOONN RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt-- - tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of - the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the - expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern - (the ``##'' case) or the longest matching pattern (the ``####'' - case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal op- + tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of + the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the + expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern + (the ``##'' case) or the longest matching pattern (the ``####'' + case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal op- eration is applied to each positional parameter in turn, and the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array vari- - able subscripted with @@ or **, the pattern removal operation is - applied to each member of the array in turn, and the expansion + able subscripted with @@ or **, the pattern removal operation is + applied to each member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r%%_w_o_r_d} @@ -1783,100 +1818,122 @@ EEXXPPAANNSSIIOONN RReemmoovvee mmaattcchhiinngg ssuuffffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt-- - tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion - of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex- - pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest - matching pattern (the ``%%'' case) or the longest matching pat- - tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the - pattern removal operation is applied to each positional parame- + tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion + of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex- + pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest + matching pattern (the ``%%'' case) or the longest matching pat- + tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the + pattern removal operation is applied to each positional parame- ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- - _e_t_e_r is an array variable subscripted with @@ or **, the pattern - removal operation is applied to each member of the array in + _e_t_e_r is an array variable subscripted with @@ or **, the pattern + removal operation is applied to each member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r////_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r//##_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r//%%_p_a_t_t_e_r_n//_s_t_r_i_n_g} PPaatttteerrnn ssuubbssttiittuuttiioonn. The _p_a_t_t_e_r_n is expanded to produce a pat- - tern just as in pathname expansion, _P_a_r_a_m_e_t_e_r is expanded and - the longest match of _p_a_t_t_e_r_n against its value is replaced with - _s_t_r_i_n_g. The match is performed using the rules described under - PPaatttteerrnn MMaattcchhiinngg below. If _p_a_t_t_e_r_n begins with //, all matches - of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. Normally only the first - match is replaced. If _p_a_t_t_e_r_n begins with ##, it must match at - the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n - begins with %%, it must match at the end of the expanded value of - _p_a_r_a_m_e_t_e_r. If _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted - and the // following _p_a_t_t_e_r_n may be omitted. If the nnooccaasseemmaattcchh - shell option is enabled, the match is performed without regard - to the case of alphabetic characters. If _p_a_r_a_m_e_t_e_r is @@ or **, - the substitution operation is applied to each positional parame- - ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- - _e_t_e_r is an array variable subscripted with @@ or **, the substitu- - tion operation is applied to each member of the array in turn, - and the expansion is the resultant list. + tern just as in pathname expansion. _P_a_r_a_m_e_t_e_r is expanded and + the longest match of _p_a_t_t_e_r_n against its value is replaced with + _s_t_r_i_n_g. _s_t_r_i_n_g undergoes tilde expansion, parameter and vari- + able expansion, arithmetic expansion, command and process sub- + stitution, and quote removal. The match is performed using the + rules described under PPaatttteerrnn MMaattcchhiinngg below. In the first form + above, only the first match is replaced. If there are two + slashes separating _p_a_r_a_m_e_t_e_r and _p_a_t_t_e_r_n (the second form + above), all matches of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. If + _p_a_t_t_e_r_n is preceded by ## (the third form above), it must match + at the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n + is preceded by %% (the fourth form above), it must match at the + end of the expanded value of _p_a_r_a_m_e_t_e_r. If the expansion of + _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted. If _s_t_r_i_n_g is + null, matches of _p_a_t_t_e_r_n are deleted and the // following _p_a_t_t_e_r_n + may be omitted. If the ppaattssuubb__rreeppllaacceemmeenntt shell option is en- + abled using sshhoopptt, any unquoted instances of && in _s_t_r_i_n_g are re- + placed with the matching portion of _p_a_t_t_e_r_n. Backslash is used + to quote && in _s_t_r_i_n_g; the backslash is removed in order to per- + mit a literal && in the replacement string. Users should take + care if _s_t_r_i_n_g is double-quoted to avoid unwanted interactions + between the backslash and double-quoting. Pattern substitution + performs the check for && after expanding _s_t_r_i_n_g; shell program- + mers should quote backslashes intended to escape the && and in- + hibit replacement so they survive any quote removal performed by + the expansion of _s_t_r_i_n_g. If the nnooccaasseemmaattcchh shell option is en- + abled, the match is performed without regard to the case of al- + phabetic characters. If _p_a_r_a_m_e_t_e_r is @@ or **, the substitution + operation is applied to each positional parameter in turn, and + the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array + variable subscripted with @@ or **, the substitution operation is + applied to each member of the array in turn, and the expansion + is the resultant list. ${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n} - CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- - betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- + CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- + betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- duce a pattern just as in pathname expansion. Each character in - the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and, - if it matches the pattern, its case is converted. The pattern - should not attempt to match more than one character. The ^^ op- + the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and, + if it matches the pattern, its case is converted. The pattern + should not attempt to match more than one character. The ^^ op- erator converts lowercase letters matching _p_a_t_t_e_r_n to uppercase; the ,, operator converts matching uppercase letters to lowercase. - The ^^^^ and ,,,, expansions convert each matched character in the - expanded value; the ^^ and ,, expansions match and convert only - the first character in the expanded value. If _p_a_t_t_e_r_n is omit- - ted, it is treated like a ??, which matches every character. If - _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is applied - to each positional parameter in turn, and the expansion is the - resultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted - with @@ or **, the case modification operation is applied to each - member of the array in turn, and the expansion is the resultant + The ^^^^ and ,,,, expansions convert each matched character in the + expanded value; the ^^ and ,, expansions match and convert only + the first character in the expanded value. If _p_a_t_t_e_r_n is omit- + ted, it is treated like a ??, which matches every character. If + _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is applied + to each positional parameter in turn, and the expansion is the + resultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted + with @@ or **, the case modification operation is applied to each + member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r@@_o_p_e_r_a_t_o_r} PPaarraammeetteerr ttrraannssffoorrmmaattiioonn. The expansion is either a transforma- - tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r - itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a + tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r + itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a single letter: - UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with lowercase alphabetic characters converted to upper- + UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with lowercase alphabetic characters converted to upper- case. - uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r with the first character converted to uppercase, if it is alphabetic. - LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with uppercase alphabetic characters converted to lower- + LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with uppercase alphabetic characters converted to lower- case. - QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r quoted in a format that can be reused as input. - EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with backslash escape sequences expanded as with the + EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with backslash escape sequences expanded as with the $$''......'' quoting mechanism. PP The expansion is a string that is the result of expanding the value of _p_a_r_a_m_e_t_e_r as if it were a prompt string (see PPRROOMMPPTTIINNGG below). - AA The expansion is a string in the form of an assignment - statement or ddeeccllaarree command that, if evaluated, will + AA The expansion is a string in the form of an assignment + statement or ddeeccllaarree command that, if evaluated, will recreate _p_a_r_a_m_e_t_e_r with its attributes and value. KK Produces a possibly-quoted version of the value of _p_a_r_a_m_- _e_t_e_r, except that it prints the values of indexed and as- - sociative arrays as a sequence of quoted key-value pairs + sociative arrays as a sequence of quoted key-value pairs (see AArrrraayyss above). - aa The expansion is a string consisting of flag values rep- + aa The expansion is a string consisting of flag values rep- resenting _p_a_r_a_m_e_t_e_r's attributes. + kk Like the K transformation, but expands the keys and val- + ues of indexed and associative arrays to separate words + after word splitting. - If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi- - tional parameter in turn, and the expansion is the resultant - list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or + If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi- + tional parameter in turn, and the expansion is the resultant + list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or **, the operation is applied to each member of the array in turn, and the expansion is the resultant list. - The result of the expansion is subject to word splitting and + The result of the expansion is subject to word splitting and pathname expansion as described below. CCoommmmaanndd SSuubbssttiittuuttiioonn @@ -1890,108 +1947,111 @@ EEXXPPAANNSSIIOONN BBaasshh performs the expansion by executing _c_o_m_m_a_n_d in a subshell environ- ment 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 com- - mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but + not deleted, but they may be removed during word splitting. The com- + mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but faster $$((<< _f_i_l_e)). - When the old-style backquote form of substitution is used, backslash - retains its literal meaning except when followed by $$, ``, or \\. The + When the old-style backquote form of substitution is used, backslash + retains its literal meaning except when followed by $$, ``, or \\. The first backquote not preceded by a backslash terminates the command sub- - stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the + stitution. When using the $(_c_o_m_m_a_n_d) 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 + If the substitution appears within double quotes, word splitting and pathname expansion are not performed on the results. AArriitthhmmeettiicc EExxppaannssiioonn - Arithmetic expansion allows the evaluation of an arithmetic expression - and the substitution of the result. The format for arithmetic expan- + Arithmetic expansion allows the evaluation of an arithmetic expression + and the substitution of the result. The format for arithmetic expan- sion is: $$((((_e_x_p_r_e_s_s_i_o_n)))) - The _e_x_p_r_e_s_s_i_o_n is treated as if it were within double quotes, but a - double quote inside the parentheses is not treated specially. All to- - kens in the expression undergo parameter and variable expansion, com- - mand substitution, and quote removal. The result is treated as the - arithmetic expression to be evaluated. Arithmetic expansions may be - nested. + The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it were within dou- + ble quotes, but double quote characters in _e_x_p_r_e_s_s_i_o_n are not treated + specially and are removed. All tokens in the expression undergo param- + eter and variable expansion, command substitution, and quote removal. + The result is treated as the arithmetic expression to be evaluated. + Arithmetic expansions may be nested. - The evaluation is performed according to the rules listed below under + The evaluation is performed according to the rules listed below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message indicating failure and no substitution occurs. PPrroocceessss SSuubbssttiittuuttiioonn - _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred - to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The - process _l_i_s_t is run asynchronously, and its input or output appears as + _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred + to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The + process _l_i_s_t is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current com- - mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, - writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form - is used, the file passed as an argument should be read to obtain the + mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, + writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form + is used, the file passed as an argument should be read to obtain the output of _l_i_s_t. Process substitution is supported on systems that sup- port named pipes (_F_I_F_O_s) or the //ddeevv//ffdd method of naming open files. - When available, process substitution is performed simultaneously with - parameter and variable expansion, command substitution, and arithmetic + When available, process substitution is performed simultaneously with + parameter and variable expansion, command substitution, and arithmetic expansion. WWoorrdd SSpplliittttiinngg - The shell scans the results of parameter expansion, command substitu- - tion, and arithmetic expansion that did not occur within double quotes + The shell scans the results of parameter expansion, command substitu- + tion, and arithmetic expansion that did not occur within double quotes for _w_o_r_d _s_p_l_i_t_t_i_n_g. - The shell treats each character of IIFFSS as a delimiter, and splits the - results of the other expansions into words using these characters as - field terminators. If IIFFSS is unset, or its value is exactly - <><><>, the default, then sequences of <>, <>, - and <> at the beginning and end of the results of the previous - expansions are ignored, and any sequence of IIFFSS characters not at the - beginning or end serves to delimit words. If IIFFSS has a value other - than the default, then sequences of the whitespace characters ssppaaccee, - ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as - long as the whitespace character is in the value of IIFFSS (an IIFFSS white- - space character). Any character in IIFFSS that is not IIFFSS whitespace, + The shell treats each character of IIFFSS as a delimiter, and splits the + results of the other expansions into words using these characters as + field terminators. If IIFFSS is unset, or its value is exactly + <><><>, the default, then sequences of <>, <>, + and <> at the beginning and end of the results of the previous + expansions are ignored, and any sequence of IIFFSS characters not at the + beginning or end serves to delimit words. If IIFFSS has a value other + than the default, then sequences of the whitespace characters ssppaaccee, + ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as + long as the whitespace character is in the value of IIFFSS (an IIFFSS white- + space character). Any character in IIFFSS that is not IIFFSS whitespace, along with any adjacent IIFFSS whitespace characters, delimits a field. A - sequence of IIFFSS whitespace characters is also treated as a delimiter. + sequence of IIFFSS whitespace characters is also treated as a delimiter. If the value of IIFFSS is null, no word splitting occurs. - Explicit null arguments ("""" or '''') are retained and passed to commands + Explicit null arguments ("""" or '''') are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parame- ter with no value is expanded within double quotes, a null argument re- sults and is retained and passed to a command as an empty string. When - a quoted null argument appears as part of a word whose expansion is + a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -d'' becomes -d after word splitting and null argument removal. Note that if no expansion occurs, no splitting is performed. PPaatthhnnaammee EExxppaannssiioonn - After word splitting, unless the --ff option has been set, bbaasshh scans - each word for the characters **, ??, and [[. If one of these characters + After word splitting, unless the --ff option has been set, bbaasshh scans + each word for the characters **, ??, and [[. If one of these characters appears, and is not quoted, then the word is regarded as a _p_a_t_t_e_r_n, and - replaced with an alphabetically sorted list of filenames matching the - pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are - found, and the shell option nnuullllgglloobb is not enabled, the word is left - unchanged. If the nnuullllgglloobb option is set, and no matches are found, - the word is removed. If the ffaaiillgglloobb shell option is set, and no - matches are found, an error message is printed and the command is not + replaced with an alphabetically sorted list of filenames matching the + pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are + found, and the shell option nnuullllgglloobb is not enabled, the word is left + unchanged. If the nnuullllgglloobb option is set, and no matches are found, + the word is removed. If the ffaaiillgglloobb shell option is set, and no + matches are found, an error message is printed and the command is not executed. If the shell option nnooccaasseegglloobb is enabled, the match is per- - formed without regard to the case of alphabetic characters. When a - pattern is used for pathname expansion, the character ````..'''' at the - start of a name or immediately following a slash must be matched ex- - plicitly, unless the shell option ddoottgglloobb is set. The filenames ````..'''' - and ````....'''' must always be matched explicitly, even if ddoottgglloobb is set. - In other cases, the ````..'''' character is not treated specially. When - matching a pathname, the slash character must always be matched explic- - itly by a slash in the pattern, but in other matching contexts it can - be matched by a special pattern character as described below under PPaatt-- - tteerrnn MMaattcchhiinngg. See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN - CCOOMMMMAANNDDSS for a description of the nnooccaasseegglloobb, nnuullllgglloobb, ffaaiillgglloobb, and + formed without regard to the case of alphabetic characters. When a + pattern is used for pathname expansion, the character ````..'''' at the + start of a name or immediately following a slash must be matched ex- + plicitly, unless the shell option ddoottgglloobb is set. In order to match + the filenames ````..'''' and ````....'''', the pattern must begin with ``.'' (for + example, ``.?''), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell + option is enabled, the filenames ````..'''' and ````....'''' are never matched, + even if the pattern begins with a ````..''''. When not matching pathnames, + the ````..'''' character is not treated specially. When matching a path- + name, the slash character must always be matched explicitly by a slash + in the pattern, but in other matching contexts it can be matched by a + special pattern character as described below under PPaatttteerrnn MMaattcchhiinngg. + See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a + description of the nnooccaasseegglloobb, nnuullllgglloobb, gglloobbsskkiippddoottss, ffaaiillgglloobb, and ddoottgglloobb shell options. The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file @@ -2060,11 +2120,11 @@ EEXXPPAANNSSIIOONN Within [[ and ]], the syntax [[.._s_y_m_b_o_l..]] matches the collat- ing symbol _s_y_m_b_o_l. - If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, several - extended pattern matching operators are recognized. In the following - description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns separated - by a ||. Composite patterns may be formed using one or more of the fol- - lowing sub-patterns: + If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, the + shell recognizes several extended pattern matching operators. In the + following description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns + separated by a ||. Composite patterns may be formed using one or more + of the following sub-patterns: ??((_p_a_t_t_e_r_n_-_l_i_s_t)) Matches zero or one occurrence of the given patterns @@ -2077,6 +2137,14 @@ EEXXPPAANNSSIIOONN !!((_p_a_t_t_e_r_n_-_l_i_s_t)) Matches anything except one of the given patterns + When matching filenames, the ddoottgglloobb shell option determines the set of + filenames that are tested: when ddoottgglloobb is enabled, the set of file- + names includes all files beginning with ``.'', but ``.'' and ``..'' + must be matched by a pattern or sub-pattern that begins with a dot; + when it is disabled, the set does not include any filenames beginning + with ``.'' unless the pattern or sub-pattern begins with a ``.''. As + above, ``.'' only has a special meaning when matching filenames. + Complicated extended pattern matching against long strings is slow, es- pecially when the patterns contain alternations and the strings contain multiple matches. Using separate matches against shorter strings, or @@ -2089,7 +2157,7 @@ EEXXPPAANNSSIIOONN RREEDDIIRREECCTTIIOONN Before a command is executed, its input and output may be _r_e_d_i_r_e_c_t_e_d - using a special notation interpreted by the shell. Redirection allows + using a special notation interpreted by the shell. _R_e_d_i_r_e_c_t_i_o_n allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2105,42 +2173,43 @@ RREEDDIIRREECCTTIIOONN If >&- or <&- is preceded by {_v_a_r_n_a_m_e}, the value of _v_a_r_n_a_m_e defines the file descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirect- ion persists beyond the scope of the command, allowing the shell pro- - grammer to manage the file descriptor himself. + grammer to manage the file descriptor's lifetime manually. The + vvaarrrreeddiirr__cclloossee shell option manages this behavior. - In the following descriptions, if the file descriptor number is omit- - ted, and the first character of the redirection operator is <<, the re- - direction refers to the standard input (file descriptor 0). If the - first character of the redirection operator is >>, the redirection + In the following descriptions, if the file descriptor number is omit- + ted, and the first character of the redirection operator is <<, the re- + direction refers to the standard input (file descriptor 0). If the + first character of the redirection operator is >>, the redirection refers to the standard output (file descriptor 1). - The word following the redirection operator in the following descrip- - tions, unless otherwise noted, is subjected to brace expansion, tilde - expansion, parameter and variable expansion, command substitution, - arithmetic expansion, quote removal, pathname expansion, and word + The word following the redirection operator in the following descrip- + tions, unless otherwise noted, is subjected to brace expansion, tilde + expansion, parameter and variable expansion, command substitution, + arithmetic expansion, quote removal, pathname expansion, and word splitting. If it expands to more than one word, bbaasshh reports an error. - Note that the order of redirections is significant. For example, the + Note that the order of redirections is significant. For example, the command ls >> dirlist 2>>&&1 - directs both standard output and standard error to the file _d_i_r_l_i_s_t, + directs both standard output and standard error to the file _d_i_r_l_i_s_t, while the command ls 2>>&&1 >> dirlist - directs only the standard output to file _d_i_r_l_i_s_t, because the standard - error was duplicated from the standard output before the standard out- + directs only the standard output to file _d_i_r_l_i_s_t, because the standard + error was duplicated from the standard output before the standard out- put was redirected to _d_i_r_l_i_s_t. BBaasshh handles several filenames specially when they are used in redirec- tions, as described in the following table. If the operating system on which bbaasshh is running provides these special files, bash will use them; - otherwise it will emulate them internally with the behavior described + otherwise it will emulate them internally with the behavior described below. //ddeevv//ffdd//_f_d - If _f_d is a valid integer, file descriptor _f_d is dupli- + If _f_d is a valid integer, file descriptor _f_d is dupli- cated. //ddeevv//ssttddiinn File descriptor 0 is duplicated. @@ -2150,22 +2219,22 @@ RREEDDIIRREECCTTIIOONN File descriptor 2 is duplicated. //ddeevv//ttccpp//_h_o_s_t//_p_o_r_t If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t - is an integer port number or service name, bbaasshh attempts + is an integer port number or service name, bbaasshh attempts to open the corresponding TCP socket. //ddeevv//uuddpp//_h_o_s_t//_p_o_r_t If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t - is an integer port number or service name, bbaasshh attempts + is an integer port number or service name, bbaasshh attempts to open the corresponding UDP socket. A failure to open or create a file causes the redirection to fail. - Redirections using file descriptors greater than 9 should be used with - care, as they may conflict with file descriptors the shell uses inter- + Redirections using file descriptors greater than 9 should be used with + care, as they may conflict with file descriptors the shell uses inter- nally. RReeddiirreeccttiinngg IInnppuutt Redirection of input causes the file whose name results from the expan- - sion of _w_o_r_d to be opened for reading on file descriptor _n, or the + sion of _w_o_r_d to be opened for reading on file descriptor _n, or the standard input (file descriptor 0) if _n is not specified. The general format for redirecting input is: @@ -2173,27 +2242,27 @@ RREEDDIIRREECCTTIIOONN [_n]<<_w_o_r_d RReeddiirreeccttiinngg OOuuttppuutt - Redirection of output causes the file whose name results from the ex- - pansion of _w_o_r_d to be opened for writing on file descriptor _n, or the + Redirection of output causes the file whose name results from the ex- + pansion of _w_o_r_d to be opened for writing on file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file - does not exist it is created; if it does exist it is truncated to zero + does not exist it is created; if it does exist it is truncated to zero size. The general format for redirecting output is: [_n]>>_w_o_r_d - If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett - builtin has been enabled, the redirection will fail if the file whose - name results from the expansion of _w_o_r_d exists and is a regular file. + If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett + builtin has been enabled, the redirection will fail if the file whose + name results from the expansion of _w_o_r_d exists and is a regular file. If the redirection operator is >>||, or the redirection operator is >> and the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the re- direction is attempted even if the file named by _w_o_r_d exists. AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt - Redirection of output in this fashion causes the file whose name re- + Redirection of output in this fashion causes the file whose name re- sults from the expansion of _w_o_r_d to be opened for appending on file de- - scriptor _n, or the standard output (file descriptor 1) if _n is not + scriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file does not exist it is created. The general format for appending output is: @@ -2201,11 +2270,11 @@ RREEDDIIRREECCTTIIOONN [_n]>>>>_w_o_r_d RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr - This construct allows both the standard output (file descriptor 1) and - the standard error output (file descriptor 2) to be redirected to the + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be redirected to the file whose name is the expansion of _w_o_r_d. - There are two formats for redirecting standard output and standard er- + There are two formats for redirecting standard output and standard er- ror: &&>>_w_o_r_d @@ -2217,13 +2286,13 @@ RREEDDIIRREECCTTIIOONN >>_w_o_r_d 2>>&&1 - When using the second form, _w_o_r_d may not expand to a number or --. If - it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee DDee-- + When using the second form, _w_o_r_d may not expand to a number or --. If + it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee DDee-- ssccrriippttoorrss below) for compatibility reasons. AAppppeennddiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr - This construct allows both the standard output (file descriptor 1) and - the standard error output (file descriptor 2) to be appended to the + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be appended to the file whose name is the expansion of _w_o_r_d. The format for appending standard output and standard error is: @@ -2237,10 +2306,10 @@ RREEDDIIRREECCTTIIOONN (see DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss below). HHeerree DDooccuummeennttss - This type of redirection instructs the shell to read input from the + This type of redirection instructs the shell to read input from the current source until a line containing only _d_e_l_i_m_i_t_e_r (with no trailing - blanks) is seen. All of the lines read up to that point are then used - as the standard input (or file descriptor _n if _n is specified) for a + blanks) is seen. All of the lines read up to that point are then used + as the standard input (or file descriptor _n if _n is specified) for a command. The format of here-documents is: @@ -2249,18 +2318,18 @@ RREEDDIIRREECCTTIIOONN _h_e_r_e_-_d_o_c_u_m_e_n_t _d_e_l_i_m_i_t_e_r - No parameter and variable expansion, command substitution, arithmetic - expansion, or pathname expansion is performed on _w_o_r_d. If any part of - _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, - and the lines in the here-document are not expanded. If _w_o_r_d is un- - quoted, all lines of the here-document are subjected to parameter ex- - pansion, command substitution, and arithmetic expansion, the character + No parameter and variable expansion, command substitution, arithmetic + expansion, or pathname expansion is performed on _w_o_r_d. If any part of + _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, + and the lines in the here-document are not expanded. If _w_o_r_d is un- + quoted, all lines of the here-document are subjected to parameter ex- + pansion, command substitution, and arithmetic expansion, the character sequence \\<> is ignored, and \\ must be used to quote the charac- ters \\, $$, and ``. If the redirection operator is <<<<--, then all leading tab characters are - stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- - lows here-documents within shell scripts to be indented in a natural + stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- + lows here-documents within shell scripts to be indented in a natural fashion. HHeerree SSttrriinnggss @@ -2268,9 +2337,9 @@ RREEDDIIRREECCTTIIOONN [_n]<<<<<<_w_o_r_d - The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, - command substitution, arithmetic expansion, and quote removal. Path- - name expansion and word splitting are not performed. The result is + The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, + command substitution, arithmetic expansion, and quote removal. Path- + name expansion and word splitting are not performed. The result is supplied as a single string, with a newline appended, to the command on its standard input (or file descriptor _n if _n is specified). @@ -2280,8 +2349,8 @@ RREEDDIIRREECCTTIIOONN [_n]<<&&_w_o_r_d is used to duplicate input file descriptors. If _w_o_r_d expands to one or - more digits, the file descriptor denoted by _n is made to be a copy of - that file descriptor. If the digits in _w_o_r_d do not specify a file de- + more digits, the file descriptor denoted by _n is made to be a copy of + that file descriptor. If the digits in _w_o_r_d do not specify a file de- scriptor open for input, a redirection error occurs. If _w_o_r_d evaluates to --, file descriptor _n is closed. If _n is not specified, the standard input (file descriptor 0) is used. @@ -2290,12 +2359,12 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_w_o_r_d - is used similarly to duplicate output file descriptors. If _n is not - specified, the standard output (file descriptor 1) is used. If the - digits in _w_o_r_d do not specify a file descriptor open for output, a re- - direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is - closed. As a special case, if _n is omitted, and _w_o_r_d does not expand - to one or more digits or --, the standard output and standard error are + is used similarly to duplicate output file descriptors. If _n is not + specified, the standard output (file descriptor 1) is used. If the + digits in _w_o_r_d do not specify a file descriptor open for output, a re- + direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is + closed. As a special case, if _n is omitted, and _w_o_r_d does not expand + to one or more digits or --, the standard output and standard error are redirected as described previously. MMoovviinngg FFiillee DDeessccrriippttoorrss @@ -2303,7 +2372,7 @@ RREEDDIIRREECCTTIIOONN [_n]<<&&_d_i_g_i_t-- - moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard input (file descriptor 0) if _n is not specified. _d_i_g_i_t is closed after being duplicated to _n. @@ -2311,7 +2380,7 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_d_i_g_i_t-- - moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg @@ -2319,33 +2388,32 @@ RREEDDIIRREECCTTIIOONN [_n]<<>>_w_o_r_d - causes the file whose name is the expansion of _w_o_r_d to be opened for - both reading and writing on file descriptor _n, or on file descriptor 0 + causes the file whose name is the expansion of _w_o_r_d to be opened for + both reading and writing on file descriptor _n, or on file descriptor 0 if _n is not specified. If the file does not exist, it is created. AALLIIAASSEESS - _A_l_i_a_s_e_s 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 aalliiaass and uunnaalliiaass builtin - commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each - simple command, if unquoted, is checked to see if it has an alias. If - so, that word is replaced by the text of the alias. The characters //, - $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters + _A_l_i_a_s_e_s 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 aalliiaass and uunnaalliiaass builtin + commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each + simple command, if unquoted, is checked to see if it has an alias. If + so, that word is replaced by the text of the alias. The characters //, + $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters listed above may not appear in an alias name. The replacement text may - contain any valid shell input, including shell metacharacters. The - first word of the replacement text is tested for aliases, but a word - that is identical to an alias being expanded is not expanded a second - time. This means that one may alias llss to llss --FF, for instance, and - bbaasshh does not try to recursively expand the replacement text. If the - last character of the alias value is a _b_l_a_n_k, then the next command + contain any valid shell input, including shell metacharacters. The + first word of the replacement text is tested for aliases, but a word + that is identical to an alias being expanded is not expanded a second + time. This means that one may alias llss to llss --FF, for instance, and + bbaasshh does not try to recursively expand the replacement text. If the + last character of the alias value is a _b_l_a_n_k, then the next command word following the alias is also checked for alias expansion. Aliases are created and listed with the aalliiaass command, and removed with the uunnaalliiaass command. - There is no mechanism for using arguments in the replacement text. If - arguments are needed, a shell function should be used (see FFUUNNCCTTIIOONNSS - below). + There is no mechanism for using arguments in the replacement text. If + arguments are needed, use a shell function (see FFUUNNCCTTIIOONNSS below). Aliases are not expanded when the shell is not interactive, unless the eexxppaanndd__aalliiaasseess shell option is set using sshhoopptt (see the description of @@ -2441,22 +2509,23 @@ FFUUNNCCTTIIOONNSS ddeeccllaarree or ttyyppeesseett builtin commands. The --FF option to ddeeccllaarree or ttyyppee-- sseett will list the function names only (and optionally the source file and line number, if the eexxttddeebbuugg shell option is enabled). Functions - may be exported so that subshells automatically have them defined with - the --ff option to the eexxppoorrtt builtin. A function definition may be + may be exported so that child shell processes (those created when exe- + cuting a separate shell invocation) automatically have them defined + with the --ff option to the eexxppoorrtt builtin. A function definition may be deleted using the --ff option to the uunnsseett builtin. Functions may be recursive. The FFUUNNCCNNEESSTT variable may be used to limit - the depth of the function call stack and restrict the number of func- + the depth of the function call stack and restrict the number of func- tion invocations. By default, no limit is imposed on the number of re- cursive calls. AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN - The shell allows arithmetic expressions to be evaluated, under certain - circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com- + The shell allows arithmetic expressions to be evaluated, under certain + circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com- pound command, and AArriitthhmmeettiicc EExxppaannssiioonn). 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 fol- + 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 fol- lowing list of operators is grouped into levels of equal-precedence op- erators. The levels are listed in order of decreasing precedence. @@ -2485,55 +2554,55 @@ AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN _e_x_p_r_1 ,, _e_x_p_r_2 comma - Shell variables are allowed as operands; parameter expansion is per- + Shell variables are allowed as operands; parameter expansion is per- formed 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 + 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 _i_n_t_e_g_e_r + The value of a variable is evaluated as an arithmetic expression when + it is referenced, or when a variable which has been given the _i_n_t_e_g_e_r attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates - to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on + to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on to be used in an expression. Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as oc- - tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- - bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- - ber between 2 and 64 representing the arithmetic base, and _n is a num- - ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When + tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- + bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- + ber between 2 and 64 representing the arithmetic base, and _n is a num- + ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When specifying _n, if a non-digit is required, the digits greater than 9 are - represented by the lowercase letters, the uppercase letters, @, and _, - in that order. If _b_a_s_e is less than or equal to 36, lowercase and up- - percase letters may be used interchangeably to represent numbers be- + represented by the lowercase letters, the uppercase letters, @, and _, + in that order. If _b_a_s_e is less than or equal to 36, lowercase and up- + percase letters may be used interchangeably to represent numbers be- tween 10 and 35. - Operators are evaluated in order of precedence. Sub-expressions in - parentheses are evaluated first and may override the precedence rules + Operators are evaluated in order of precedence. Sub-expressions in + parentheses are evaluated first and may override the precedence rules above. CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS - Conditional expressions are used by the [[[[ compound command and the - tteesstt and [[ builtin commands to test file attributes and perform string - and arithmetic comparisons. The tteesstt and [[ commands determine their - behavior based on the number of arguments; see the descriptions of + Conditional expressions are used by the [[[[ compound command and the + tteesstt and [[ builtin commands to test file attributes and perform string + and arithmetic comparisons. The tteesstt and [[ commands determine their + behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. - Expressions are formed from the following unary or binary primaries. - BBaasshh handles several filenames specially when they are used in expres- + Expressions are formed from the following unary or binary primaries. + BBaasshh handles several filenames specially when they are used in expres- sions. If the operating system on which bbaasshh is running provides these - special files, bash will use them; otherwise it will emulate them in- - ternally with this behavior: If any _f_i_l_e argument to one of the pri- + special files, bash will use them; otherwise it will emulate them in- + ternally with this behavior: If any _f_i_l_e argument to one of the pri- maries is of the form _/_d_e_v_/_f_d_/_n, then file descriptor _n is checked. If - the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, - _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, + the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, + _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, is checked. Unless otherwise specified, primaries that operate on files follow sym- bolic links and operate on the target of the link, rather than the link itself. - When used with [[[[, the << and >> operators sort lexicographically using + When used with [[[[, the << and >> operators sort lexicographically using the current locale. The tteesstt command sorts using ASCII ordering. --aa _f_i_l_e @@ -2572,30 +2641,30 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS --LL _f_i_l_e True if _f_i_l_e exists and is a symbolic link. --NN _f_i_l_e - True if _f_i_l_e exists and has been modified since it was last + True if _f_i_l_e exists and has been modified since it was last read. --OO _f_i_l_e True if _f_i_l_e exists and is owned by the effective user id. --SS _f_i_l_e True if _f_i_l_e exists and is a socket. _f_i_l_e_1 --eeff _f_i_l_e_2 - True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num- + True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num- bers. _f_i_l_e_1 -nntt _f_i_l_e_2 - True if _f_i_l_e_1 is newer (according to modification date) than + True if _f_i_l_e_1 is newer (according to modification date) than _f_i_l_e_2, or if _f_i_l_e_1 exists and _f_i_l_e_2 does not. _f_i_l_e_1 -oott _f_i_l_e_2 - True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1 + True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1 does not. --oo _o_p_t_n_a_m_e - True if the shell option _o_p_t_n_a_m_e is enabled. See the list of - options under the description of the --oo option to the sseett + True if the shell option _o_p_t_n_a_m_e is enabled. See the list of + options under the description of the --oo option to the sseett builtin below. --vv _v_a_r_n_a_m_e - True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a + True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a value). --RR _v_a_r_n_a_m_e - True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- + True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- ence. --zz _s_t_r_i_n_g True if the length of _s_t_r_i_n_g is zero. @@ -2605,8 +2674,8 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS _s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2 _s_t_r_i_n_g_1 == _s_t_r_i_n_g_2 - True if the strings are equal. == should be used with the tteesstt - command for POSIX conformance. When used with the [[[[ command, + True if the strings are equal. == should be used with the tteesstt + command for POSIX conformance. When used with the [[[[ command, this performs pattern matching as described above (CCoommppoouunndd CCoomm-- mmaannddss). @@ -2620,90 +2689,93 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS True if _s_t_r_i_n_g_1 sorts after _s_t_r_i_n_g_2 lexicographically. _a_r_g_1 OOPP _a_r_g_2 - OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic - binary operators return true if _a_r_g_1 is equal to, not equal to, - less than, less than or equal to, greater than, or greater than - or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive - or negative integers. When used with the [[[[ command, _A_r_g_1 and - _A_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC + OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic + binary operators return true if _a_r_g_1 is equal to, not equal to, + less than, less than or equal to, greater than, or greater than + or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive + or negative integers. When used with the [[[[ command, _A_r_g_1 and + _A_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above). SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN When a simple command is executed, the shell performs the following ex- - pansions, assignments, and redirections, from left to right, in the + pansions, assignments, and redirections, from left to right, in the following order. - 1. The words that the parser has marked as variable assignments - (those preceding the command name) and redirections are saved + 1. The words that the parser has marked as variable assignments + (those preceding the command name) and redirections are saved for later processing. - 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 + 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. 3. Redirections are performed as described above under RREEDDIIRREECCTTIIOONN. 4. The text after the == in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic - expansion, and quote removal before being assigned to the vari- + expansion, and quote removal before being assigned to the vari- able. If no command name results, the variable assignments affect the current - shell environment. Otherwise, the variables are added to the environ- - ment of the executed command and do not affect the current shell envi- - ronment. 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. + shell environment. In the case of such a command (one that consists + only of assignment statements and redirections), assignment statements + are performed before redirections. Otherwise, the variables are added + to the environment of the executed command and do not affect the cur- + rent 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 af- - fect the current shell environment. A redirection error causes the + If no command name results, redirections are performed, but do not af- + fect 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 expan- - sions contained a command substitution, the exit status of the command - is the exit status of the last command substitution performed. If + If there is a command name left after expansion, execution proceeds as + described below. Otherwise, the command exits. If one of the expan- + sions 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. CCOOMMMMAANNDD EEXXEECCUUTTIIOONN - 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 + 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. - 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 FFUUNNCCTTIIOONNSS. If the name does not match a - function, the shell searches for it in the list of shell builtins. If + 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 FFUUNNCCTTIIOONNSS. 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. - If the name is neither a shell function nor a builtin, and contains no - slashes, bbaasshh searches each element of the PPAATTHH for a directory con- + If the name is neither a shell function nor a builtin, and contains no + slashes, bbaasshh searches each element of the PPAATTHH for a directory con- taining an executable file by that name. BBaasshh uses a hash table to re- - member the full pathnames of executable files (see hhaasshh under SSHHEELLLL - BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is - performed only if the command is not found in the hash table. If the + member the full pathnames of executable files (see hhaasshh under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is + performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a defined shell function named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it is invoked - in a separate execution environment with the original command and the - original command's arguments as its arguments, and the function's exit - status becomes the exit status of that subshell. If that function is + in a separate execution environment with the original command and the + original command's arguments as its arguments, and the function's exit + status becomes the exit status of that subshell. If that function is not defined, the shell prints an error message and returns an exit sta- tus of 127. - If the search is successful, or if the command name contains one or + If the search is successful, or if the command name contains one or more slashes, the shell executes the named program in a separate execu- tion environment. Argument 0 is set to the name given, and the remain- ing arguments to the command are set to the arguments given, if any. - 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 _s_h_e_l_l _s_c_r_i_p_t, 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 hhaasshh below un- - der SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the child. + 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 _s_h_e_l_l _s_c_r_i_p_t, a + file containing shell commands, and the shell creates a new instance of + itself 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 hhaasshh below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the + child. If the program is a file beginning with ##!!, the remainder of the first line specifies an interpreter for the program. The shell executes the @@ -2766,6 +2838,8 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENN A command invoked in this separate environment cannot affect the shell's execution environment. + A _s_u_b_s_h_e_l_l is a copy of the shell process. + Command substitution, commands grouped with parentheses, and asynchro- nous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the shell are re- @@ -2838,42 +2912,70 @@ EEXXIITT SSTTAATTUUSS return an exit status of 2 to indicate incorrect usage, generally in- valid options or missing arguments. - BBaasshh itself returns the exit status of the last command executed, un- - less a syntax error occurs, in which case it exits with a non-zero + The exit status of the last command is available in the special parame- + ter $?. + + BBaasshh itself returns the exit status of the last command executed, un- + less a syntax error occurs, in which case it exits with a non-zero value. See also the eexxiitt builtin command below. SSIIGGNNAALLSS - When bbaasshh is interactive, in the absence of any traps, it ignores + When bbaasshh is interactive, in the absence of any traps, it ignores SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and SSIIGGIINNTT - is caught and handled (so that the wwaaiitt builtin is interruptible). In + is caught and handled (so that the wwaaiitt builtin is interruptible). In all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh ig- nores SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP. Non-builtin commands run by bbaasshh have signal handlers set to the values inherited by the shell from its parent. When job control is not in ef- - fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to - these inherited handlers. Commands run as a result of command substi- + fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to + these inherited handlers. Commands run as a result of command substi- tution ignore the keyboard-generated job control signals SSIIGGTTTTIINN, SSIIGGTT-- TTOOUU, and SSIIGGTTSSTTPP. - The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, - an interactive shell resends the SSIIGGHHUUPP to all jobs, running or + The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, + an interactive shell resends the SSIIGGHHUUPP to all jobs, running or stopped. Stopped jobs are sent SSIIGGCCOONNTT to ensure that they receive the - SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular - job, it should be removed from the jobs table with the ddiissoowwnn builtin - (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- + SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular + job, it should be removed from the jobs table with the ddiissoowwnn builtin + (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- ing ddiissoowwnn --hh. - If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a + If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a SSIIGGHHUUPP to all jobs when an interactive login shell exits. - If bbaasshh is waiting for a command to complete and receives a signal for + If bbaasshh is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the com- - mand completes. When bbaasshh is waiting for an asynchronous command via - the wwaaiitt builtin, the reception of a signal for which a trap has been + mand completes. When bbaasshh is waiting for an asynchronous command via + the wwaaiitt builtin, the reception of a signal for which a trap has been set will cause the wwaaiitt builtin to return immediately with an exit sta- tus greater than 128, immediately after which the trap is executed. + When job control is not enabled, and bbaasshh is waiting for a foreground + command to complete, the shell receives keyboard-generated signals such + as SSIIGGIINNTT (usually generated by ^^CC) that users commonly intend to send + to that command. This happens because the shell and the command are in + the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all pro- + cesses in that process group. + + When bbaasshh is running without job control enabled and receives SSIIGGIINNTT + while waiting for a foreground command, it waits until that foreground + command terminates and then decides what to do about the SSIIGGIINNTT: + + 1. If the command terminates due to the SSIIGGIINNTT, bbaasshh concludes that + the user meant to end the entire script, and acts on the SSIIGGIINNTT + (e.g., by running a SSIIGGIINNTT trap or exiting itself); + + 2. If the command does not terminate due to SSIIGGIINNTT, the program + handled the SSIIGGIINNTT itself and did not treat it as a fatal sig- + nal. In that case, bbaasshh does not treat SSIIGGIINNTT as a fatal sig- + nal, either, instead assuming that the SSIIGGIINNTT was used as part + of the program's normal operation (e.g., emacs uses it to abort + editing commands) or deliberately discarded. However, bbaasshh will + run any trap set on SSIIGGIINNTT, as it does with any other trapped + signal it receives while it is waiting for the foreground com- + mand to complete, for compatibility. + JJOOBB CCOONNTTRROOLL _J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the ex- ecution of processes and continue (_r_e_s_u_m_e) their execution at a later @@ -2994,80 +3096,79 @@ PPRROOMMPPTTIINNGG \\uu the username of the current user \\vv the version of bbaasshh (e.g., 2.00) \\VV the release of bbaasshh, version + patch level (e.g., 2.00.0) - \\ww the current working directory, with $$HHOOMMEE abbreviated - with a tilde (uses the value of the PPRROOMMPPTT__DDIIRRTTRRIIMM vari- - able) - \\WW the basename of the current working directory, with $$HHOOMMEE - abbreviated with a tilde + \\ww the value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE + abbreviated with a tilde (uses the value of the + PPRROOMMPPTT__DDIIRRTTRRIIMM variable) + \\WW the basename of $$PPWWDD, with $$HHOOMMEE abbreviated with a tilde \\!! the history number of this command \\## the command number of this command \\$$ if the effective UID is 0, a ##, otherwise a $$ \\_n_n_n the character corresponding to the octal number _n_n_n \\\\ a backslash - \\[[ begin a sequence of non-printing characters, which could - be used to embed a terminal control sequence into the + \\[[ begin a sequence of non-printing characters, which could + be used to embed a terminal control sequence into the prompt \\]] end a sequence of non-printing characters - 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 HHIISSTTOORRYY be- - low), while the command number is the position in the sequence of com- - mands 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 + 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 HHIISSTTOORRYY be- + low), while the command number is the position in the sequence of com- + mands 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 pprroommppttvvaarrss shell option (see the description of the sshhoopptt command under - SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if - escaped portions of the string appear within command substitution or + SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if + escaped portions of the string appear within command substitution or contain characters special to word expansion. RREEAADDLLIINNEE - This is the library that handles reading input when using an interac- + This is the library that handles reading input when using an interac- tive shell, unless the ----nnooeeddiittiinngg option is given at shell invocation. Line editing is also used when using the --ee option to the rreeaadd builtin. By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be - enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett - builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing - after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the + enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett + builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing + after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the sseett builtin. RReeaaddlliinnee NNoottaattiioonn In this section, the Emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- - larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- - boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key + Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- + larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- + boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x - means ESC-Control-_x, or press the Escape key then hold the Control key + means ESC-Control-_x, or press the Escape key then hold the Control key while pressing the _x key.) Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, 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., kkiillll--lliinnee) causes that command to - act in a backward direction. Commands whose behavior with arguments + 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., kkiillll--lliinnee) causes that command to + act in a backward direction. Commands whose behavior with arguments deviates from this are noted below. - When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved + When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a _k_i_l_l _r_i_n_g. 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. RReeaaddlliinnee IInniittiiaalliizzaattiioonn - Readline is customized by putting commands in an initialization file - (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of + Readline is customized by putting commands in an initialization file + (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of the IINNPPUUTTRRCC variable. If that variable is unset, the default is _~_/_._i_n_- - _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate - default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- - brary 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 ## are comments. Lines beginning with a $$ indicate - conditional constructs. Other lines denote key bindings and variable + _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate + default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- + brary 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 ## are comments. Lines beginning with a $$ indicate + conditional constructs. Other lines denote key bindings and variable settings. - The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other + The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other programs that use this library may add their own commands and bindings. For example, placing @@ -3075,18 +3176,18 @@ RREEAADDLLIINNEE M-Control-u: universal-argument or C-Meta-u: universal-argument - into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- + into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- _s_a_l_-_a_r_g_u_m_e_n_t. - The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, + The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. - In addition to command names, readline allows keys to be bound to a + In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a _m_a_c_r_o). RReeaaddlliinnee KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. - All that is required is the name of the command or the text of a macro + The syntax for controlling key bindings in the _i_n_p_u_t_r_c 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 speci- fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or _C_o_n_t_r_o_l_- prefixes, or as a key sequence. @@ -3098,15 +3199,15 @@ RREEAADDLLIINNEE Meta-Rubout: backward-kill-word Control-o: "> output" - In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, - _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to - run the macro expressed on the right hand side (that is, to insert the + In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, + _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to + run the macro expressed on the right hand side (that is, to insert the text ``> output'' into the line). - In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs - from kkeeyynnaammee 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 + In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs + from kkeeyynnaammee 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. "\C-u": universal-argument @@ -3114,7 +3215,7 @@ RREEAADDLLIINNEE "\e[11~": "Function Key 1" In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. - _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is + _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the text ``Function Key 1''. The full set of GNU Emacs style escape sequences is @@ -3125,7 +3226,7 @@ RREEAADDLLIINNEE \\"" literal " \\'' literal ' - In addition to the GNU Emacs style escape sequences, a second set of + In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: \\aa alert (bell) \\bb backspace @@ -3135,20 +3236,20 @@ RREEAADDLLIINNEE \\rr carriage return \\tt horizontal tab \\vv vertical tab - \\_n_n_n the eight-bit character whose value is the octal value + \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) 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 func- - tion name. In the macro body, the backslash escapes described above - are expanded. Backslash will quote any other character in the macro + tion name. In the macro body, the backslash escapes described above + are expanded. Backslash will quote any other character in the macro text, including " and '. - BBaasshh allows the current readline key bindings to be displayed or modi- - fied with the bbiinndd builtin command. The editing mode may be switched - during interactive use by using the --oo option to the sseett builtin com- + BBaasshh allows the current readline key bindings to be displayed or modi- + fied with the bbiinndd builtin command. The editing mode may be switched + during interactive use by using the --oo option to the sseett builtin com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). RReeaaddlliinnee VVaarriiaabblleess @@ -3159,29 +3260,32 @@ RREEAADDLLIINNEE sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). - Except where noted, readline variables can take the values OOnn or OOffff - (without regard to case). Unrecognized variable names are ignored. - When a variable value is read, empty or null values, "on" (case-insen- + Except where noted, readline variables can take the values OOnn or OOffff + (without regard to case). Unrecognized variable names are ignored. + When a variable value is read, empty or null values, "on" (case-insen- sitive), and "1" are equivalent to OOnn. All other values are equivalent to OOffff. The variables and their default values are: bbeellll--ssttyyllee ((aauuddiibbllee)) - Controls what happens when readline wants to ring the terminal + Controls what happens when readline wants to ring the terminal bell. If set to nnoonnee, readline never rings the bell. If set to - vviissiibbllee, readline uses a visible bell if one is available. If + vviissiibbllee, readline uses a visible bell if one is available. If set to aauuddiibbllee, readline attempts to ring the terminal's bell. bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) - If set to OOnn, readline attempts to bind the control characters + If set to OOnn, readline attempts to bind the control characters treated specially by the kernel's terminal driver to their read- line equivalents. bblliinnkk--mmaattcchhiinngg--ppaarreenn ((OOffff)) If set to OOnn, readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. ccoolloorreedd--ccoommpplleettiioonn--pprreeffiixx ((OOffff)) - If set to OOnn, when listing completions, readline displays the + If set to OOnn, when listing completions, readline displays the common prefix of the set of possible completions using a differ- - ent color. The color definitions are taken from the value of - the LLSS__CCOOLLOORRSS environment variable. + ent color. The color definitions are taken from the value of + the LLSS__CCOOLLOORRSS environment variable. If there is a color defini- + tion in $$LLSS__CCOOLLOORRSS for the custom suffix "readline-colored-com- + pletion-prefix", readline uses this color for the common prefix + instead of its default. ccoolloorreedd--ssttaattss ((OOffff)) If set to OOnn, readline displays possible completions using dif- ferent colors to indicate their file type. The color defini- @@ -3217,19 +3321,20 @@ RREEAADDLLIINNEE or equal to zero. If the number of possible completions is greater than or equal to the value of this variable, readline will ask whether or not the user wishes to view them; otherwise - they are simply listed on the terminal. + they are simply listed on the terminal. A zero value means + readline should never ask; negative values are treated as zero. ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with the eighth + If set to OOnn, 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 - _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to + prefixing an escape character (in effect, using escape as the + _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to _O_f_f if the locale contains eight-bit characters. ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) If set to OOnn, readline will inhibit word completion. Completion - characters will be inserted into the line as if they had been + characters will be inserted into the line as if they had been mapped to sseellff--iinnsseerrtt. eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) - When set to OOnn, on operating systems that indicate they support + When set to OOnn, on operating systems that indicate they support it, readline echoes a character corresponding to a signal gener- ated from the keyboard. eeddiittiinngg--mmooddee ((eemmaaccss)) @@ -3237,209 +3342,219 @@ RREEAADDLLIINNEE ilar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or vvii. eemmaaccss--mmooddee--ssttrriinngg ((@@)) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a - key binding, so the standard set of meta- and control prefixes - and backslash escape sequences is available. Use the \1 and \2 - escapes to begin and end sequences of non-printing characters, - which can be used to embed a terminal control sequence into the + key binding, so the standard set of meta- and control prefixes + and backslash escape sequences is available. Use the \1 and \2 + escapes to begin and end sequences of non-printing characters, + which can be used to embed a terminal control sequence into the mode string. + eennaabbllee--aaccttiivvee--rreeggiioonn ((OOnn)) + The _p_o_i_n_t is the current cursor position, and _m_a_r_k refers to a + saved cursor position. The text between the point and mark is + referred to as the _r_e_g_i_o_n. When this variable is set to _O_n, + readline allows certain commands to designate the region as _a_c_- + _t_i_v_e. When the region is active, readline highlights the text + in the region using the terminal's standout mode. The active + region shows the text inserted by bracketed-paste and any match- + ing text found by incremental and non-incremental history + searches. eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOnn)) - When set to OOnn, readline will configure the terminal in a way + When set to OOnn, readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each char- - acter as if it had been read from the keyboard. This can pre- - vent pasted characters from being interpreted as editing com- + acter as if it had been read from the keyboard. This can pre- + vent pasted characters from being interpreted as editing com- mands. eennaabbllee--kkeeyyppaadd ((OOffff)) When set to OOnn, readline will try to enable the application key- pad when it is called. Some systems need this to enable the ar- row keys. eennaabbllee--mmeettaa--kkeeyy ((OOnn)) - When set to OOnn, readline will try to enable any meta modifier - key the terminal claims to support when it is called. On many + When set to OOnn, readline will try to enable any meta modifier + key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. eexxppaanndd--ttiillddee ((OOffff)) - If set to OOnn, tilde expansion is performed when readline at- + If set to OOnn, tilde expansion is performed when readline at- tempts word completion. hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) - If set to OOnn, the history code attempts to place point at the - same location on each history line retrieved with pprreevviioouuss--hhiiss-- + If set to OOnn, the history code attempts to place point at the + same location on each history line retrieved with pprreevviioouuss--hhiiss-- ttoorryy or nneexxtt--hhiissttoorryy. hhiissttoorryy--ssiizzee ((uunnsseett)) - Set the maximum number of history entries saved in the history - list. If set to zero, any existing history entries are deleted + Set the maximum number of history entries saved in the history + list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, - the number of history entries is not limited. By default, the - number of history entries is set to the value of the HHIISSTTSSIIZZEE - shell variable. If an attempt is made to set _h_i_s_t_o_r_y_-_s_i_z_e to a + the number of history entries is not limited. By default, the + number of history entries is set to the value of the HHIISSTTSSIIZZEE + shell variable. If an attempt is made to set _h_i_s_t_o_r_y_-_s_i_z_e to a non-numeric value, the maximum number of history entries will be set to 500. hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line for display, + When set to OOnn, 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. This setting is automatically enabled for terminals + becomes longer than the screen width rather than wrapping to a + new line. This setting is automatically enabled for terminals of height 1. iinnppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will enable eight-bit input (that is, it + If set to OOnn, readline will enable eight-bit input (that is, it will not strip the eighth bit from the characters it reads), re- - gardless of what the terminal claims it can support. The name - mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, - but readline will set it to _O_n if the locale contains eight-bit + gardless of what the terminal claims it can support. The name + mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, + but readline will set it to _O_n if the locale contains eight-bit characters. iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) - The string of characters that should terminate an incremental - search without subsequently executing the character as a com- - mand. If this variable has not been given a value, the charac- + The string of characters that should terminate an incremental + search without subsequently executing the character as a com- + mand. If this variable has not been given a value, the charac- ters _E_S_C and _C_-_J will terminate an incremental search. kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of valid keymap names - is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- - _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is - equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the + Set the current readline keymap. The set of valid keymap names + is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- + _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the value of eeddiittiinngg--mmooddee also affects the default keymap. kkeeyysseeqq--ttiimmeeoouutt ((550000)) - Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when - reading an ambiguous key sequence (one that can form a complete + Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when + reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional - input to complete a longer key sequence). If no input is re- - ceived within the timeout, _r_e_a_d_l_i_n_e will use the shorter but - complete key sequence. The value is specified in milliseconds, - so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for - additional input. If this variable is set to a value less than - or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait - until another key is pressed to decide which key sequence to + input to complete a longer key sequence). If no input is re- + ceived within the timeout, _r_e_a_d_l_i_n_e will use the shorter but + complete key sequence. The value is specified in milliseconds, + so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for + additional input. If this variable is set to a value less than + or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait + until another key is pressed to decide which key sequence to complete. mmaarrkk--ddiirreeccttoorriieess ((OOnn)) If set to OOnn, completed directory names have a slash appended. mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified are dis- + If set to OOnn, history lines that have been modified are dis- played with a preceding asterisk (**). mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) If set to OOnn, completed names which are symbolic links to direc- - tories have a slash appended (subject to the value of mmaarrkk--ddii-- + tories have a slash appended (subject to the value of mmaarrkk--ddii-- rreeccttoorriieess). mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) - This variable, when set to OOnn, causes readline to match files - whose names begin with a `.' (hidden files) when performing - filename completion. If set to OOffff, the leading `.' must be + This variable, when set to OOnn, causes readline to match files + whose names begin with a `.' (hidden files) when performing + filename completion. If set to OOffff, the leading `.' must be supplied by the user in the filename to be completed. mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) - If set to OOnn, menu completion displays the common prefix of the + If set to OOnn, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with the eighth + If set to OOnn, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is _O_f_f, but readline will set it to _O_n if the locale contains eight-bit characters. ppaaggee--ccoommpplleettiioonnss ((OOnn)) - If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- + If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- play a screenful of possible completions at a time. pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) - If set to OOnn, readline will display completions with matches - sorted horizontally in alphabetical order, rather than down the + If set to OOnn, readline will display completions with matches + sorted horizontally in alphabetical order, rather than down the screen. rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) - If set to OOnn, readline will undo all changes to history lines + If set to OOnn, readline will undo all changes to history lines before returning when aacccceepptt--lliinnee is executed. By default, his- - tory lines may be modified and retain individual undo lists + tory lines may be modified and retain individual undo lists across calls to rreeaaddlliinnee. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion functions. + This alters the default behavior of the completion functions. If set to OOnn, words which have more than one possible completion - cause the matches to be listed immediately instead of ringing + cause the matches to be listed immediately instead of ringing the bell. sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) - This alters the default behavior of the completion functions in + This alters the default behavior of the completion functions in a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words - which have more than one possible completion without any possi- - ble partial completion (the possible completions don't share a - common prefix) cause the matches to be listed immediately in- + which have more than one possible completion without any possi- + ble partial completion (the possible completions don't share a + common prefix) cause the matches to be listed immediately in- stead of ringing the bell. sshhooww--mmooddee--iinn--pprroommpptt ((OOffff)) - If set to OOnn, add a string to the beginning of the prompt indi- - cating the editing mode: emacs, vi command, or vi insertion. + If set to OOnn, add a string to the beginning of the prompt indi- + cating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., _e_m_a_c_s_-_m_o_d_e_-_s_t_r_i_n_g). sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) - If set to OOnn, this alters the default completion behavior when - inserting a single match into the line. It's only active when - performing completion in the middle of a word. If enabled, - readline does not insert characters from the completion that - match characters after point in the word being completed, so + If set to OOnn, this alters the default completion behavior when + inserting a single match into the line. It's only active when + performing completion in the middle of a word. If enabled, + readline does not insert characters from the completion that + match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd)))) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is - displayed immediately before the last line of the primary prompt - when vi editing mode is active and in command mode. The value - is expanded like a key binding, so the standard set of meta- and - control prefixes and backslash escape sequences is available. - Use the \1 and \2 escapes to begin and end sequences of non- - printing characters, which can be used to embed a terminal con- - trol sequence into the mode string. - vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss)))) If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt - when vi editing mode is active and in insertion mode. The value + when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non- printing characters, which can be used to embed a terminal con- trol sequence into the mode string. + vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss)))) + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is + displayed immediately before the last line of the primary prompt + when vi editing mode is active and in insertion mode. The value + is expanded like a key binding, so the standard set of meta- and + control prefixes and backslash escape sequences is available. + Use the \1 and \2 escapes to begin and end sequences of non- + printing characters, which can be used to embed a terminal con- + trol sequence into the mode string. vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as reported by - _s_t_a_t(2) is appended to the filename when listing possible com- + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible com- pletions. RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss - 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 + 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. - $$iiff The $$iiff construct allows bindings to be made based on the edit- - ing mode, the terminal being used, or the application using + $$iiff The $$iiff construct allows bindings to be made based on the edit- + ing mode, the terminal being used, or the application using readline. The text of the test, after any comparison operator, - extends to the end of the line; unless otherwise noted, no + extends to the end of the line; unless otherwise noted, no characters are required to isolate it. - mmooddee The mmooddee== form of the $$iiff directive is used to test - whether readline is in emacs or vi mode. This may be - used in conjunction with the sseett kkeeyymmaapp command, for in- - stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and - _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in + mmooddee The mmooddee== form of the $$iiff directive is used to test + whether readline is in emacs or vi mode. This may be + used in conjunction with the sseett kkeeyymmaapp command, for in- + stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and + _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in emacs mode. - tteerrmm The tteerrmm== form may be used to include terminal-specific + tteerrmm The tteerrmm== 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 == is tested against both the full name of the ter- - minal and the portion of the terminal name before the - first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, + minal and the portion of the terminal name before the + first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, for instance. vveerrssiioonn - The vveerrssiioonn test may be used to perform comparisons - against specific readline versions. The vveerrssiioonn expands - to the current readline version. The set of comparison - operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>. - The version number supplied on the right side of the op- - erator consists of a major version number, an optional + The vveerrssiioonn test may be used to perform comparisons + against specific readline versions. The vveerrssiioonn expands + to the current readline version. The set of comparison + operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>. + The version number supplied on the right side of the op- + erator consists of a major version number, an optional decimal point, and an optional minor version (e.g., 77..11). - If the minor version is omitted, it is assumed to be 00. + If the minor version is omitted, it is assumed to be 00. The operator may be separated from the string vveerrssiioonn and from the version number argument by whitespace. aapppplliiccaattiioonn The aapppplliiccaattiioonn construct is used to include application- - specific settings. Each program using the readline li- - brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization + specific settings. Each program using the readline li- + brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, 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 + 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 bbaasshh: $$iiff Bash @@ -3449,12 +3564,12 @@ RREEAADDLLIINNEE _v_a_r_i_a_b_l_e The _v_a_r_i_a_b_l_e construct provides simple equality tests for - readline variables and values. The permitted comparison - operators are _=, _=_=, and _!_=. The variable name must be + readline variables and values. The permitted comparison + operators are _=, _=_=, and _!_=. The variable name must be separated from the comparison operator by whitespace; the - operator may be separated from the value on the right - hand side by whitespace. Both string and boolean vari- - ables may be tested. Boolean variables must be tested + operator may be separated from the value on the right + hand side by whitespace. Both string and boolean vari- + ables may be tested. Boolean variables must be tested against the values _o_n and _o_f_f. $$eennddiiff This command, as seen in the previous example, terminates an $$iiff @@ -3464,51 +3579,51 @@ RREEAADDLLIINNEE test fails. $$iinncclluuddee - This directive takes a single filename as an argument and reads - commands and bindings from that file. For example, the follow- + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the follow- ing directive would read _/_e_t_c_/_i_n_p_u_t_r_c: $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c SSeeaarrcchhiinngg - Readline provides commands for searching through the command history + Readline provides commands for searching through the command history (see HHIISSTTOORRYY below) for lines containing a specified string. There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. - Incremental searches begin before the user has finished typing the - search string. As each character of the search string is typed, read- + Incremental searches begin before the user has finished typing the + search string. As each character of the search string is typed, read- line 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 iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an + 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 iisseeaarrcchh--tteerrmmiinnaattoorrss 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 + 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. - 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 _n_e_w_l_i_n_e will termi- + 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 _n_e_w_l_i_n_e will termi- nate the search and accept the line, thereby executing the command from the history list. Readline remembers the last incremental search string. If two Control- - Rs are typed without any intervening characters defining a new search + Rs are typed without any intervening characters defining a new search string, any remembered search string is used. - Non-incremental searches read the entire search string before starting - to search for matching history lines. The search string may be typed + 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. RReeaaddlliinnee CCoommmmaanndd NNaammeess - The following is a list of the names of the commands and the default + 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 accom- panying key sequence are unbound by default. In the following descrip- - tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to - a cursor position saved by the sseett--mmaarrkk command. The text between the + tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to + a cursor position saved by the sseett--mmaarrkk command. The text between the point and mark is referred to as the _r_e_g_i_o_n. CCoommmmaannddss ffoorr MMoovviinngg @@ -3524,33 +3639,33 @@ RREEAADDLLIINNEE Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of the current or previous word. Words + Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). sshheellll--ffoorrwwaarrdd--wwoorrdd - Move forward to the end of the next word. Words are delimited + Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. sshheellll--bbaacckkwwaarrdd--wwoorrdd - Move back to the start of the current or previous word. Words + Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. pprreevviioouuss--ssccrreeeenn--lliinnee - Attempt to move point to the same physical screen column on the - previous physical screen line. This will not have the desired - effect if the current Readline line does not take up more than - one physical line or if point is not greater than the length of + Attempt to move point to the same physical screen column on the + previous physical screen line. This will not have the desired + effect if the current Readline line does not take up more than + one physical line or if point is not greater than the length of the prompt plus the screen width. nneexxtt--ssccrreeeenn--lliinnee - Attempt to move point to the same physical screen column on the + Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect - if the current Readline line does not take up more than one - physical line or if the length of the current Readline line is + if the current Readline line does not take up more than one + physical line or if the length of the current Readline line is not greater than the length of the prompt plus the screen width. cclleeaarr--ddiissppllaayy ((MM--CC--ll)) - Clear the screen and, if possible, the terminal's scrollback - buffer, then redraw the current line, leaving the current line + Clear the screen and, if possible, the terminal's scrollback + buffer, then redraw the current line, leaving the current line at the top of the screen. cclleeaarr--ssccrreeeenn ((CC--ll)) Clear the screen, then redraw the current line, leaving the cur- - rent line at the top of the screen. With an argument, refresh + rent line at the top of the screen. With an argument, refresh the current line without clearing the screen. rreeddrraaww--ccuurrrreenntt--lliinnee Refresh the current line. @@ -3558,20 +3673,29 @@ RREEAADDLLIINNEE CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) 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 HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history + is non-empty, add it to the history list according to the state + of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history line, then restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) Fetch the previous command from the history list, moving back in the list. nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, moving forward in + Fetch the next command from the history list, moving forward in the list. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. eenndd--ooff--hhiissttoorryy ((MM-->>)) - Move to the end of the input history, i.e., the line currently + Move to the end of the input history, i.e., the line currently being entered. + ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) + Accept the current line for execution and fetch the next line + relative to the current line from the history for editing. A + numeric argument, if supplied, specifies the history entry to + use instead of the current line. + ffeettcchh--hhiissttoorryy + With a numeric argument, fetch that entry from the history list + and make it the current line. Without an argument, move back to + the first entry in the history list. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental @@ -3643,67 +3767,62 @@ RREEAADDLLIINNEE Perform history and alias expansion on the current line. iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__)) A synonym for yyaannkk--llaasstt--aarrgg. - ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) - Accept the current line for execution and fetch the next line - relative to the current line from the history for editing. A - numeric argument, if supplied, specifies the history entry to - use instead of the current line. eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xx CC--ee)) - Invoke an editor on the current command line, and execute the + Invoke an editor on the current command line, and execute the result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL, $$EEDD-- IITTOORR, and _e_m_a_c_s as the editor, in that order. CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt _e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd)) - The character indicating end-of-file as set, for example, by - ``stty''. If this character is read when there are no charac- - ters on the line, and point is at the beginning of the line, + The character indicating end-of-file as set, for example, by + ``stty''. If this character is read when there are no charac- + ters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EEOOFF. ddeelleettee--cchhaarr ((CC--dd)) Delete the character at point. If this function is bound to the same character as the tty EEOOFF character, as CC--dd commonly is, see above for the effects. bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given a numeric + Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr - Delete the character under the cursor, unless the cursor is at + Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cur- sor is deleted. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character typed to the line verbatim. This is how + Add the next character typed to the line verbatim. This is how to insert characters like CC--qq, for example. ttaabb--iinnsseerrtt ((CC--vv TTAABB)) Insert a tab character. sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) Insert the character typed. ttrraannssppoossee--cchhaarrss ((CC--tt)) - 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. + 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. ttrraannssppoossee--wwoorrddss ((MM--tt)) - 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 + 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. uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a negative ar- + Uppercase the current (or following) word. With a negative ar- gument, uppercase the previous word, but do not move point. ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a negative ar- + Lowercase the current (or following) word. With a negative ar- gument, lowercase the previous word, but do not move point. ccaappiittaalliizzee--wwoorrdd ((MM--cc)) Capitalize the current (or following) word. With a negative ar- gument, capitalize the previous word, but do not move point. oovveerrwwrriittee--mmooddee - Toggle overwrite mode. With an explicit positive numeric argu- + Toggle overwrite mode. With an explicit positive numeric argu- ment, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects - only eemmaaccss mode; vvii mode does overwrite differently. Each call + only eemmaaccss mode; vvii mode does overwrite differently. Each call to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- - ters bound to sseellff--iinnsseerrtt replace the text at point rather than - pushing the text to the right. Characters bound to bbaacckk-- - wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a + ters bound to sseellff--iinnsseerrtt replace the text at point rather than + pushing the text to the right. Characters bound to bbaacckk-- + wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a space. By default, this command is unbound. KKiilllliinngg aanndd YYaannkkiinngg @@ -3712,31 +3831,31 @@ RREEAADDLLIINNEE bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) Kill backward to the beginning of the line. uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the line. The + Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter where point + Kill all characters on the current line, no matter where point is. kkiillll--wwoorrdd ((MM--dd)) - 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 ffoorrwwaarrdd--wwoorrdd. - bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind point. Word boundaries are the same as - those used by bbaacckkwwaarrdd--wwoorrdd. - sshheellll--kkiillll--wwoorrdd 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 ffoorrwwaarrdd--wwoorrdd. + bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) + Kill the word behind point. Word boundaries are the same as + those used by bbaacckkwwaarrdd--wwoorrdd. + sshheellll--kkiillll--wwoorrdd + 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 sshheellll--ffoorrwwaarrdd--wwoorrdd. sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd - Kill the word behind point. Word boundaries are the same as + Kill the word behind point. Word boundaries are the same as those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd. uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind point, using white space as a word bound- + Kill the word behind point, using white space as a word bound- ary. The killed text is saved on the kill-ring. uunniixx--ffiilleennaammee--rruubboouutt - Kill the word behind point, using white space and the slash - character as the word boundaries. The killed text is saved on + 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. ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) Delete all spaces and tabs around point. @@ -3745,64 +3864,64 @@ RREEAADDLLIINNEE ccooppyy--rreeggiioonn--aass--kkiillll Copy the text in the region to the kill buffer. ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. The word bound- + Copy the word before point to the kill buffer. The word bound- aries are the same as bbaacckkwwaarrdd--wwoorrdd. ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. The word + Copy the word following point to the kill buffer. The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. yyaannkk ((CC--yy)) Yank the top of the kill ring into the buffer at point. yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only works follow- + Rotate the kill ring, and yank the new top. Only works follow- ing yyaannkk or yyaannkk--ppoopp. NNuummeerriicc AArrgguummeennttss ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulating, or start a + Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument. uunniivveerrssaall--aarrgguummeenntt - 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 fol- + 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 fol- lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the nu- meric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is nei- - ther a digit nor 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 argu- + ther a digit nor 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 argu- ment count four, a second time makes the argument count sixteen, and so on. CCoommpplleettiinngg ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before point. BBaasshh + Attempt to perform completion on the text before point. BBaasshh attempts completion treating the text as a variable (if the text - begins with $$), username (if the text begins with ~~), hostname - (if the text begins with @@), or command (including aliases and + begins with $$), username (if the text begins with ~~), hostname + (if the text begins with @@), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) List the possible completions of the text before point. iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point that would have + Insert all completions of the text before point that would have been generated by ppoossssiibbllee--ccoommpplleettiioonnss. mmeennuu--ccoommpplleettee - Similar to ccoommpplleettee, but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of mmeennuu--ccoommpplleettee steps through the list of possible - completions, inserting each match in turn. At the end of the + Similar to ccoommpplleettee, but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of mmeennuu--ccoommpplleettee 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 bbeellll--ssttyyllee) and the original text is restored. An argument of _n moves _n positions forward in the list of matches; a negative ar- gument may be used to move backward through the list. This com- mand is intended to be bound to TTAABB, but is unbound by default. mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd - Identical to mmeennuu--ccoommpplleettee, but moves backward through the list - of possible completions, as if mmeennuu--ccoommpplleettee had been given a + Identical to mmeennuu--ccoommpplleettee, but moves backward through the list + of possible completions, as if mmeennuu--ccoommpplleettee had been given a negative argument. This command is unbound by default. ddeelleettee--cchhaarr--oorr--lliisstt - Deletes the character under the cursor if not at the beginning - or end of the line (like ddeelleettee--cchhaarr). If at the end of the + Deletes the character under the cursor if not at the beginning + or end of the line (like ddeelleettee--cchhaarr). If at the end of the line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command is unbound by default. ccoommpplleettee--ffiilleennaammee ((MM--//)) @@ -3811,67 +3930,67 @@ RREEAADDLLIINNEE List the possible completions of the text before point, treating it as a filename. ccoommpplleettee--uusseerrnnaammee ((MM--~~)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a username. ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~)) List the possible completions of the text before point, treating it as a username. ccoommpplleettee--vvaarriiaabbllee ((MM--$$)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a shell variable. ppoossssiibbllee--vvaarriiaabbllee--ccoommpplleettiioonnss ((CC--xx $$)) List the possible completions of the text before point, treating it as a shell variable. ccoommpplleettee--hhoossttnnaammee ((MM--@@)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a hostname. ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@)) List the possible completions of the text before point, treating it as a hostname. ccoommpplleettee--ccoommmmaanndd ((MM--!!)) - 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 + 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. ppoossssiibbllee--ccoommmmaanndd--ccoommpplleettiioonnss ((CC--xx !!)) List the possible completions of the text before point, treating it as a command name. ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB)) - Attempt completion on the text before point, comparing the text - against lines from the history list for possible completion + Attempt completion on the text before point, comparing the text + against lines from the history list for possible completion matches. ddaabbbbrreevv--eexxppaanndd - Attempt menu completion on the text before point, comparing the + Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{)) Perform filename completion and insert the list of possible com- - pletions enclosed within braces so the list is available to the + pletions enclosed within braces so the list is available to the shell (see BBrraaccee EExxppaannssiioonn above). KKeeyybbooaarrdd MMaaccrrooss ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current keyboard + Begin saving the characters typed into the current keyboard macro. eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) Stop saving the characters typed into the current keyboard macro and store the definition. ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by making the char- + Re-execute the last keyboard macro defined, by making the char- acters in the macro appear as if typed at the keyboard. pprriinntt--llaasstt--kkbbdd--mmaaccrroo (()) - Print the last keyboard macro defined in a format suitable for + Print the last keyboard macro defined in a format suitable for the _i_n_p_u_t_r_c file. MMiisscceellllaanneeoouuss rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) - Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any + Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any bindings or variable assignments found there. aabboorrtt ((CC--gg)) - Abort the current editing command and ring the terminal's bell + Abort the current editing command and ring the terminal's bell (subject to the setting of bbeellll--ssttyyllee). ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ......)) - If the metafied character _x is uppercase, run the command that + If the metafied character _x is uppercase, run the command that is bound to the corresponding metafied lowercase character. The behavior is undefined if _x is already lowercase. pprreeffiixx--mmeettaa ((EESSCC)) @@ -3879,46 +3998,51 @@ RREEAADDLLIINNEE uunnddoo ((CC--__,, CC--xx CC--uu)) Incremental undo, separately remembered for each line. rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like executing the - uunnddoo command enough times to return the line to its initial + Undo all changes made to this line. This is like executing the + uunnddoo command enough times to return the line to its initial state. ttiillddee--eexxppaanndd ((MM--&&)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) - Set the mark to the point. If a numeric argument is supplied, + Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor position is - set to the saved position, and the old cursor position is saved + 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. cchhaarraacctteerr--sseeaarrcchh ((CC--]])) A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous occur- + that character. A negative count searches for previous occur- rences. cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) - A character is read and point is moved to the previous occur- - rence of that character. A negative count searches for subse- + A character is read and point is moved to the previous occur- + rence of that character. A negative count searches for subse- quent occurrences. sskkiipp--ccssii--sseeqquueennccee - Read enough characters to consume a multi-key sequence such as - those defined for keys like Home and End. Such sequences begin + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this - sequence is bound to "\[", keys producing such sequences will - have no effect unless explicitly bound to a readline command, - instead of inserting stray characters into the editing buffer. + sequence is bound to "\[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. iinnsseerrtt--ccoommmmeenntt ((MM--##)) - Without a numeric argument, the value of the readline ccoomm-- - mmeenntt--bbeeggiinn variable is inserted at the beginning of the current + Without a numeric argument, the value of the readline ccoomm-- + mmeenntt--bbeeggiinn 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 ccoommmmeenntt--bbeeggiinn, the value is inserted, other- + toggle: if the characters at the beginning of the line do not + match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- - ning of the line. In either case, the line is accepted as if a - newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn - causes this command to make the current line a shell comment. - If a numeric argument causes the comment character to be re- + ning of the line. In either case, the line is accepted as if a + newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn + causes this command to make the current line a shell comment. + If a numeric argument causes the comment character to be re- moved, the line will be executed by the shell. + ssppeellll--ccoorrrreecctt--wwoorrdd ((CC--xx ss)) + Perform spelling correction on the current word, treating it as + a directory or filename, in the same way as the ccddssppeellll shell + option. Word boundaries are the same as those used by + sshheellll--ffoorrwwaarrdd--wwoorrdd. gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg)) The word before point is treated as a pattern for pathname ex- pansion, with an asterisk implicitly appended. This pattern is @@ -4295,21 +4419,21 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS vironment and return the exit status of the last command exe- cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, filenames in PPAATTHH are used to find the directory containing - _f_i_l_e_n_a_m_e. The file searched for in PPAATTHH need not be executable. - When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is - searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option - to the sshhoopptt builtin command is turned off, the PPAATTHH is not - searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi- - tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the po- - sitional parameters are unchanged. If the --TT option is enabled, - ssoouurrccee inherits any trap on DDEEBBUUGG; if it is not, any DDEEBBUUGG trap - string is saved and restored around the call to ssoouurrccee, and - ssoouurrccee unsets the DDEEBBUUGG trap while it executes. If --TT is not - set, and the sourced file changes the DDEEBBUUGG trap, the new value - is retained when ssoouurrccee completes. The return status is the - status of the last command exited within the script (0 if no - commands are executed), and false if _f_i_l_e_n_a_m_e is not found or - cannot be read. + _f_i_l_e_n_a_m_e, but _f_i_l_e_n_a_m_e does not need to be executable. The file + searched for in PPAATTHH need not be executable. When bbaasshh is not + in _p_o_s_i_x _m_o_d_e, the current directory is searched if no file is + found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin + command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- + _m_e_n_t_s are supplied, they become the positional parameters when + _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are + unchanged. If the --TT option is enabled, .. inherits any trap on + DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored + around the call to .., and .. unsets the DDEEBBUUGG trap while it exe- + cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG + trap, the new value is retained when .. completes. The return + status is the status of the last command exited within the + script (0 if no commands are executed), and false if _f_i_l_e_n_a_m_e is + not found or cannot be read. aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] AAlliiaass with no arguments or with the --pp option prints the list of @@ -4336,29 +4460,31 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d + bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e Display current rreeaaddlliinnee key and function bindings, bind a key sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee variable. Each non-option argument is a command as it would ap- - pear in _._i_n_p_u_t_r_c, but each binding or command must be passed as - a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. Op- - tions, if supplied, have the following meanings: + pear in a rreeaaddlliinnee initialization file such as _._i_n_p_u_t_r_c, but + each binding or command must be passed as a separate argument; + e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, + have the following meanings: --mm _k_e_y_m_a_p Use _k_e_y_m_a_p as the keymap to be affected by the subsequent bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- - _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, - and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e - is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e + is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- _d_a_r_d. --ll List the names of all rreeaaddlliinnee functions. - --pp Display rreeaaddlliinnee function names and bindings in such a + --pp Display rreeaaddlliinnee function names and bindings in such a way that they can be re-read. --PP List current rreeaaddlliinnee function names and bindings. - --ss Display rreeaaddlliinnee key sequences bound to macros and the - strings they output in such a way that they can be re- + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- read. - --SS Display rreeaaddlliinnee key sequences bound to macros and the + --SS Display rreeaaddlliinnee key sequences bound to macros and the strings they output. - --vv Display rreeaaddlliinnee variable names and values in such a way + --vv Display rreeaaddlliinnee variable names and values in such a way that they can be re-read. --VV List current rreeaaddlliinnee variable names and values. --ff _f_i_l_e_n_a_m_e @@ -4371,14 +4497,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Remove any current binding for _k_e_y_s_e_q. --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en- - tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets - the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- + tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets + the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK - variables to the current location of the insertion point - and the saved insertion point (the mark), respectively. - If the executed command changes the value of any of RREEAADD-- - LLIINNEE__LLIINNEE, RREEAADDLLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new - values will be reflected in the editing state. + variables to the current location of the insertion point + and the saved insertion point (the mark), respectively. + The shell assigns any numeric argument the user supplied + to the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu- + ment, that variable is not set. If the executed command + changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD-- + LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be + reflected in the editing state. --XX List all key sequences bound to shell commands and the associated commands in a format that can be reused as in- put. @@ -4416,137 +4545,140 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r] Change the current directory to _d_i_r. if _d_i_r is not supplied, - the value of the HHOOMMEE shell variable is the default. Any addi- - tional arguments following _d_i_r are ignored. The variable CCDDPPAATTHH - defines the search path for the directory containing _d_i_r: each - directory name in CCDDPPAATTHH is searched for _d_i_r. Alternative di- - rectory names in CCDDPPAATTHH are separated by a colon (:). A null - directory name in CCDDPPAATTHH is the same as the current directory, - i.e., ``..''. If _d_i_r begins with a slash (/), then CCDDPPAATTHH is not - used. The --PP option causes ccdd to use the physical directory - structure by resolving symbolic links while traversing _d_i_r and - before processing instances of _._. in _d_i_r (see also the --PP option - to the sseett builtin command); the --LL option forces symbolic links - to be followed by resolving the link after processing instances - of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing - the immediately previous pathname component from _d_i_r, back to a - slash or the beginning of _d_i_r. If the --ee option is supplied - with --PP, and the current working directory cannot be success- - fully determined after a successful directory change, ccdd will - return an unsuccessful status. On systems that support it, the - --@@ option presents the extended attributes associated with a - file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD - before the directory change is attempted. If a non-empty direc- - tory name from CCDDPPAATTHH is used, or if -- is the first argument, - and the directory change is successful, the absolute pathname of - the new working directory is written to the standard output. - The return value is true if the directory was successfully - changed; false otherwise. + the value of the HHOOMMEE shell variable is the default. The vari- + able CCDDPPAATTHH defines the search path for the directory containing + _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter- + native directory names in CCDDPPAATTHH are separated by a colon (:). + A null directory name in CCDDPPAATTHH is the same as the current di- + rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD-- + PPAATTHH is not used. The --PP option causes ccdd to use the physical + directory structure by resolving symbolic links while traversing + _d_i_r and before processing instances of _._. in _d_i_r (see also the + --PP option to the sseett builtin command); the --LL option forces sym- + bolic links to be followed by resolving the link after process- + ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro- + cessed by removing the immediately previous pathname component + from _d_i_r, back to a slash or the beginning of _d_i_r. If the --ee + option is supplied with --PP, and the current working directory + cannot be successfully determined after a successful directory + change, ccdd will return an unsuccessful status. On systems that + support it, the --@@ option presents the extended attributes asso- + ciated with a file as a directory. An argument of -- is con- + verted to $$OOLLDDPPWWDD before the directory change is attempted. If + a non-empty directory name from CCDDPPAATTHH is used, or if -- is the + first argument, and the directory change is successful, the ab- + solute pathname of the new working directory is written to the + standard output. If the directory change is successful, ccdd sets + the value of the PPWWDD environment variable to the new directory + name, and sets the OOLLDDPPWWDD environment variable to the value of + the current working directory before the change. The return + value is true if the directory was successfully changed; false + otherwise. ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] - Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function + Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function lookup. Only builtin commands or commands found in the PPAATTHH are - executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is - performed using a default value for PPAATTHH that is guaranteed to - find all of the standard utilities. If either the --VV or --vv op- - tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv - option causes a single word indicating the command or filename + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv op- + tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or filename used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a - more verbose description. If the --VV or --vv option is supplied, - the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If + more verbose description. If the --VV or --vv option is supplied, + the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- - not be found, the exit status is 127. Otherwise, the exit sta- + not be found, the exit status is 127. Otherwise, the exit sta- tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] - Generate possible completion matches for _w_o_r_d according to the - _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee - builtin with the exception of --pp and --rr, and write the matches - to the standard output. When using the --FF or --CC options, the - various shell variables set by the programmable completion fa- + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exception of --pp and --rr, and write the matches + to the standard output. When using the --FF or --CC options, the + various shell variables set by the programmable completion fa- cilities, while available, will not have useful values. The matches will be generated in the same way as if the program- mable completion code had generated them directly from a comple- - tion specification with the same flags. If _w_o_r_d is specified, + tion specification with the same flags. If _w_o_r_d is specified, only those completions matching _w_o_r_d will be displayed. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, or no matches were generated. - ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- _p_a_t] [--WW _w_o_r_d_l_i_s_t] - [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- + [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- _f_i_x] _n_a_m_e [_n_a_m_e _._._.] ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...] - Specify how arguments to each _n_a_m_e should be completed. If the - --pp option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them + Specify how arguments to each _n_a_m_e should be completed. If the + --pp 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 --rr option removes a completion spec- - ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- + ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- pletion specifications. The --DD option indicates that other sup- - plied options and actions should apply to the ``default'' com- - mand completion; that is, completion attempted on a command for - which no completion has previously been defined. The --EE option - indicates that other supplied options and actions should apply - to ``empty'' command completion; that is, completion attempted - on a blank line. The --II option indicates that other supplied - options and actions should apply to completion on the initial - non-assignment word on the line, or after a command delimiter - such as ;; or ||, which is usually command name completion. If - multiple options are supplied, the --DD option takes precedence + plied options and actions should apply to the ``default'' com- + mand completion; that is, completion attempted on a command for + which no completion has previously been defined. The --EE option + indicates that other supplied options and actions should apply + to ``empty'' command completion; that is, completion attempted + on a blank line. The --II option indicates that other supplied + options and actions should apply to completion on the initial + non-assignment word on the line, or after a command delimiter + such as ;; or ||, which is usually command name completion. If + multiple options are supplied, the --DD option takes precedence over --EE, and both take precedence over --II. If any of --DD, --EE, or - --II are supplied, any other _n_a_m_e arguments are ignored; these + --II are supplied, any other _n_a_m_e arguments are ignored; these completions only apply to the case specified by the option. - The process of applying these completion specifications when - word completion is attempted is described above under PPrrooggrraamm-- + The process of applying these completion specifications when + word completion is attempted is described above under PPrrooggrraamm-- mmaabbllee CCoommpplleettiioonn. - Other options, if specified, have the following meanings. The - arguments to the --GG, --WW, and --XX options (and, if necessary, the - --PP and --SS options) should be quoted to protect them from expan- + Other options, if specified, have the following meanings. The + arguments to the --GG, --WW, and --XX options (and, if necessary, the + --PP and --SS options) should be quoted to protect them from expan- sion before the ccoommpplleettee builtin is invoked. --oo _c_o_m_p_-_o_p_t_i_o_n - The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- - spec's behavior beyond the simple generation of comple- + The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- + spec's behavior beyond the simple generation of comple- tions. _c_o_m_p_-_o_p_t_i_o_n may be one of: bbaasshhddeeffaauulltt Perform the rest of the default bbaasshh completions if the compspec generates no matches. - ddeeffaauulltt Use readline's default filename completion if + ddeeffaauulltt Use readline's default filename completion if the compspec generates no matches. ddiirrnnaammeess - Perform directory name completion if the comp- + Perform directory name completion if the comp- spec generates no matches. ffiilleennaammeess - Tell readline that the compspec generates file- - names, so it can perform any filename-specific - processing (like adding a slash to directory - names, quoting special characters, or suppress- - ing trailing spaces). Intended to be used with + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with shell functions. - nnooqquuoottee Tell readline not to quote the completed words - if they are filenames (quoting filenames is the + nnooqquuoottee Tell readline not to quote the completed words + if they are filenames (quoting filenames is the default). - nnoossoorrtt Tell readline not to sort the list of possible + nnoossoorrtt Tell readline not to sort the list of possible completions alphabetically. - nnoossppaaccee Tell readline not to append a space (the de- - fault) to words completed at the end of the + nnoossppaaccee Tell readline not to append a space (the de- + fault) to words completed at the end of the line. pplluussddiirrss - After any matches defined by the compspec are + After any matches defined by the compspec are generated, directory name completion is at- tempted and any matches are added to the results of the other actions. --AA _a_c_t_i_o_n - The _a_c_t_i_o_n may be one of the following to generate a + The _a_c_t_i_o_n may be one of the following to generate a list of possible completions: aalliiaass Alias names. May also be specified as --aa. aarrrraayyvvaarr Array variable names. bbiinnddiinngg RReeaaddlliinnee key binding names. - bbuuiillttiinn Names of shell builtin commands. May also be + bbuuiillttiinn Names of shell builtin commands. May also be specified as --bb. ccoommmmaanndd Command names. May also be specified as --cc. ddiirreeccttoorryy @@ -4554,7 +4686,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ddiissaabblleedd Names of disabled shell builtins. eennaabblleedd Names of enabled shell builtins. - eexxppoorrtt Names of exported shell variables. May also be + eexxppoorrtt Names of exported shell variables. May also be specified as --ee. ffiillee File names. May also be specified as --ff. ffuunnccttiioonn @@ -4563,17 +4695,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hheellppttooppiicc Help topics as accepted by the hheellpp builtin. hhoossttnnaammee - Hostnames, as taken from the file specified by + Hostnames, as taken from the file specified by the HHOOSSTTFFIILLEE shell variable. - jjoobb Job names, if job control is active. May also + jjoobb Job names, if job control is active. May also be specified as --jj. - kkeeyywwoorrdd Shell reserved words. May also be specified as + kkeeyywwoorrdd Shell reserved words. May also be specified as --kk. rruunnnniinngg Names of running jobs, if job control is active. sseerrvviiccee Service names. May also be specified as --ss. - sseettoopptt Valid arguments for the --oo option to the sseett + sseettoopptt Valid arguments for the --oo option to the sseett builtin. - sshhoopptt Shell option names as accepted by the sshhoopptt + sshhoopptt Shell option names as accepted by the sshhoopptt builtin. ssiiggnnaall Signal names. ssttooppppeedd Names of stopped jobs, if job control is active. @@ -4582,197 +4714,197 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Names of all shell variables. May also be spec- ified as --vv. --CC _c_o_m_m_a_n_d - _c_o_m_m_a_n_d is executed in a subshell environment, and its + _c_o_m_m_a_n_d is executed in a subshell environment, and its output is used as the possible completions. --FF _f_u_n_c_t_i_o_n - The shell function _f_u_n_c_t_i_o_n is executed in the current - shell environment. When the function is executed, the + The shell function _f_u_n_c_t_i_o_n is executed in the current + shell environment. When the function is executed, the first argument ($$11) is the name of the command whose ar- guments are being completed, the second argument ($$22) is the word being completed, and the third argument ($$33) is - the word preceding the word being completed on the cur- - rent command line. When it finishes, the possible com- - pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + the word preceding the word being completed on the cur- + rent command line. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY array variable. --GG _g_l_o_b_p_a_t - The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to generate the possible completions. --PP _p_r_e_f_i_x - _p_r_e_f_i_x is added at the beginning of each possible com- + _p_r_e_f_i_x is added at the beginning of each possible com- pletion after all other options have been applied. --SS _s_u_f_f_i_x _s_u_f_f_i_x is appended to each possible completion after all other options have been applied. --WW _w_o_r_d_l_i_s_t - The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS - special variable as delimiters, and each resultant word - is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, + The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS + special variable as delimiters, and each resultant word + is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, in order to provide a mechanism for the words to contain - shell metacharacters or characters in the value of IIFFSS. - The possible completions are the members of the resul- + shell metacharacters or characters in the value of IIFFSS. + The possible completions are the members of the resul- tant list which match the word being completed. --XX _f_i_l_t_e_r_p_a_t - _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. It is applied to the list of possible completions gener- - ated by the preceding options and arguments, and each - completion matching _f_i_l_t_e_r_p_a_t is removed from the list. - A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this + ated by the preceding options and arguments, and each + completion matching _f_i_l_t_e_r_p_a_t is removed from the list. + A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. - The return value is true unless an invalid option is supplied, - an option other than --pp or --rr is supplied without a _n_a_m_e argu- - ment, an attempt is made to remove a completion specification + The return value is true unless an invalid option is supplied, + an option other than --pp or --rr is supplied without a _n_a_m_e argu- + ment, an attempt is made to remove a completion specification for a _n_a_m_e for which no specification exists, or an error occurs adding a completion specification. ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e] - Modify completion options for each _n_a_m_e according to the _o_p_- + Modify completion options for each _n_a_m_e according to the _o_p_- _t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are - supplied. If no _o_p_t_i_o_ns are given, display the completion op- - tions for each _n_a_m_e or the current completion. The possible - values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- - scribed above. The --DD option indicates that other supplied op- - tions should apply to the ``default'' command completion; that - is, completion attempted on a command for which no completion + supplied. If no _o_p_t_i_o_ns are given, display the completion op- + tions for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- + scribed above. The --DD option indicates that other supplied op- + tions should apply to the ``default'' command completion; that + is, completion attempted on a command for which no completion has previously been defined. The --EE option indicates that other - supplied options should apply to ``empty'' command completion; - that is, completion attempted on a blank line. The --II option + supplied options should apply to ``empty'' command completion; + that is, completion attempted on a blank line. The --II option indicates that other supplied options should apply to completion - on the initial non-assignment word on the line, or after a com- - mand delimiter such as ;; or ||, which is usually command name + on the initial non-assignment word on the line, or after a com- + mand delimiter such as ;; or ||, which is usually command name completion. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a _n_a_m_e for which no completion specification exists, or an output error occurs. ccoonnttiinnuuee [_n] Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or - sseelleecctt loop. If _n is specified, resume at the _nth enclosing - loop. _n must be >= 1. If _n is greater than the number of en- - closing loops, the last enclosing loop (the ``top-level'' loop) - is resumed. The return value is 0 unless _n is not greater than + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of en- + closing loops, the last enclosing loop (the ``top-level'' loop) + is resumed. The return value is 0 unless _n is not greater than or equal to 1. ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] - Declare variables and/or give them attributes. If no _n_a_m_es are - given then display the values of variables. The --pp option will + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will display the attributes and values of each _n_a_m_e. When --pp is used - with _n_a_m_e arguments, additional options, other than --ff and --FF, - are ignored. When --pp is supplied without _n_a_m_e arguments, it - will display the attributes and values of all variables having + with _n_a_m_e arguments, additional options, other than --ff and --FF, + are ignored. When --pp is supplied without _n_a_m_e arguments, it + will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with --pp, ddeeccllaarree will display the at- - tributes and values of all shell variables. The --ff option will + options are supplied with --pp, ddeeccllaarree will display the at- + tributes and values of all shell variables. The --ff option will restrict the display to shell functions. The --FF option inhibits - the display of function definitions; only the function name and + the display of function definitions; only the function name and attributes are printed. If the eexxttddeebbuugg shell option is enabled - using sshhoopptt, the source file name and line number where each - _n_a_m_e is defined are displayed as well. The --FF option implies + using sshhoopptt, the source file name and line number where each + _n_a_m_e is defined are displayed as well. The --FF option implies --ff. The --gg option forces variables to be created or modified at the global scope, even when ddeeccllaarree is executed in a shell func- - tion. It is ignored in all other cases. The --II option causes - local variables to inherit the attributes (except the _n_a_m_e_r_e_f + tion. It is ignored in all other cases. The --II option causes + local variables to inherit the attributes (except the _n_a_m_e_r_e_f attribute) and value of any existing variable with the same _n_a_m_e - at a surrounding scope. If there is no existing variable, the + at a surrounding scope. If there is no existing variable, the local variable is initially unset. The following options can be - used to restrict output to variables with the specified attri- + used to restrict output to variables with the specified attri- bute or to give variables attributes: - --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss + --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss above). - --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss + --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss above). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when the variable is assigned a value. - --ll When the variable is assigned a value, all upper-case - characters are converted to lower-case. The upper-case + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case attribute is disabled. - --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name - reference to another variable. That other variable is - defined by the value of _n_a_m_e. All references, assign- - ments, and attribute modifications to _n_a_m_e, except those - using or changing the --nn attribute itself, are performed - on the variable referenced by _n_a_m_e's value. The nameref + --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name + reference to another variable. That other variable is + defined by the value of _n_a_m_e. All references, assign- + ments, and attribute modifications to _n_a_m_e, except those + using or changing the --nn attribute itself, are performed + on the variable referenced by _n_a_m_e's value. The nameref attribute cannot be applied to array variables. --rr Make _n_a_m_es readonly. These names cannot then be assigned values by subsequent assignment statements or unset. --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions in- - herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. + herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. The trace attribute has no special meaning for variables. - --uu When the variable is assigned a value, all lower-case - characters are converted to upper-case. The lower-case + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case attribute is disabled. - --xx Mark _n_a_m_es for export to subsequent commands via the en- + --xx Mark _n_a_m_es for export to subsequent commands via the en- vironment. - Using `+' instead of `-' turns off the attribute instead, with - the exceptions that ++aa and ++AA may not be used to destroy array - variables and ++rr will not remove the readonly attribute. When + Using `+' instead of `-' turns off the attribute instead, with + the exceptions that ++aa and ++AA may not be used to destroy array + variables and ++rr will not remove the readonly attribute. When used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as - with the llooccaall command, unless the --gg option is supplied. If a - variable name is followed by =_v_a_l_u_e, the value of the variable - is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- - ment syntax to create array variables, additional attributes do - not take effect until subsequent assignments. The return value + with the llooccaall command, unless the --gg option is supplied. If a + variable name is followed by =_v_a_l_u_e, the value of the variable + is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- + ment syntax to create array variables, additional attributes do + not take effect until subsequent assignments. The return value is 0 unless an invalid option is encountered, an attempt is made to define a function using ``-f foo=bar'', an attempt is made to assign a value to a readonly variable, an attempt is made to as- sign a value to an array variable without using the compound as- - signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a - valid shell variable name, an attempt is made to turn off read- - only status for a readonly variable, an attempt is made to turn + signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a + valid shell variable name, an attempt is made to turn off read- + only status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with --ff. ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]] - Without options, displays the list of currently remembered di- - rectories. The default display is on a single line with direc- - tory names separated by spaces. Directories are added to the - list with the ppuusshhdd command; the ppooppdd command removes entries + Without options, displays the list of currently remembered di- + rectories. The default display is on a single line with direc- + tory names separated by spaces. Directories are added to the + list with the ppuusshhdd command; the ppooppdd command removes entries from the list. The current directory is always the first direc- tory in the stack. - --cc Clears the directory stack by deleting all of the en- + --cc Clears the directory stack by deleting all of the en- tries. - --ll Produces a listing using full pathnames; the default + --ll Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. --pp Print the directory stack with one entry per line. - --vv Print the directory stack with one entry per line, pre- + --vv Print the directory stack with one entry per line, pre- fixing each entry with its index in the stack. ++_n Displays the _nth entry counting from the left of the list shown by ddiirrss when invoked without options, starting with zero. - --_n Displays the _nth entry counting from the right of the + --_n Displays the _nth entry counting from the right of the list shown by ddiirrss when invoked without options, starting with zero. - The return value is 0 unless an invalid option is supplied or _n + The return value is 0 unless an invalid option is supplied or _n indexes beyond the end of the directory stack. ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ... | _p_i_d ... ] - Without options, remove each _j_o_b_s_p_e_c from the table of active - jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr - option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option - is given, each _j_o_b_s_p_e_c is not removed from the table, but is - marked so that SSIIGGHHUUPP is not sent to the job if the shell re- + Without options, remove each _j_o_b_s_p_e_c from the table of active + jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr + option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option + is given, each _j_o_b_s_p_e_c is not removed from the table, but is + marked so that SSIIGGHHUUPP is not sent to the job if the shell re- ceives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is supplied, the --aa option means - to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- + to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- gument restricts operation to running jobs. The return value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job. eecchhoo [--nneeEE] [_a_r_g ...] - Output the _a_r_gs, separated by spaces, followed by a newline. - The return status is 0 unless a write error occurs. If --nn is + Output the _a_r_gs, separated by spaces, followed by a newline. + The return status is 0 unless a write error occurs. If --nn is specified, the trailing newline is suppressed. If the --ee option - is given, interpretation of the following backslash-escaped - characters is enabled. The --EE option disables the interpreta- - tion of these escape characters, even on systems where they are - interpreted by default. The xxppgg__eecchhoo shell option may be used - to dynamically determine whether or not eecchhoo expands these es- - cape characters by default. eecchhoo does not interpret ---- to mean - the end of options. eecchhoo interprets the following escape se- + is given, interpretation of the following backslash-escaped + characters is enabled. The --EE option disables the interpreta- + tion of these escape characters, even on systems where they are + interpreted by default. The xxppgg__eecchhoo shell option may be used + to dynamically determine whether or not eecchhoo expands these es- + cape characters by default. eecchhoo does not interpret ---- to mean + the end of options. eecchhoo interprets the following escape se- quences: \\aa alert (bell) \\bb backspace @@ -4785,194 +4917,200 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS \\tt horizontal tab \\vv vertical tab \\\\ backslash - \\00_n_n_n the eight-bit character whose value is the octal value + \\00_n_n_n the eight-bit character whose value is the octal value _n_n_n (zero to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] - Enable and disable builtin shell commands. Disabling a builtin + Enable and disable builtin shell commands. Disabling a builtin allows a disk command which has the same name as a shell builtin - to be executed without specifying a full pathname, even though - the shell normally searches for builtins before disk commands. - If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- - abled. For example, to use the tteesstt binary found via the PPAATTHH - instead of the shell builtin version, run ``enable -n test''. - The --ff option means to load the new builtin command _n_a_m_e from + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- + abled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - The --dd option will delete a builtin previously loaded with --ff. - If no _n_a_m_e arguments are given, or if the --pp option is supplied, - a list of shell builtins is printed. With no other option argu- - ments, the list consists of all enabled shell builtins. If --nn - is supplied, only disabled builtins are printed. If --aa is sup- - plied, the list printed includes all builtins, with an indica- - tion of whether or not each is enabled. If --ss is supplied, the - output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return - value is 0 unless a _n_a_m_e is not a shell builtin or there is an - error loading a new builtin from a shared object. + Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a + colon-separated list of directories in which to search for _f_i_l_e_- + _n_a_m_e. The default is system-dependent. The --dd option will + delete a builtin previously loaded with --ff. If no _n_a_m_e argu- + ments are given, or if the --pp option is supplied, a list of + shell builtins is printed. With no other option arguments, the + list consists of all enabled shell builtins. If --nn is supplied, + only disabled builtins are printed. If --aa is supplied, the list + printed includes all builtins, with an indication of whether or + not each is enabled. If --ss is supplied, the output is re- + stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup- + plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to + load _n_a_m_e from a shared object named _n_a_m_e, as if the command + were ``enable -f _n_a_m_e _n_a_m_e . The return value is 0 unless a + _n_a_m_e is not a shell builtin or there is an error loading a new + builtin from a shared object. eevvaall [_a_r_g ...] - The _a_r_gs are read and concatenated together into a single com- - mand. This command is then read and executed by the shell, and - its exit status is returned as the value of eevvaall. If there are + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are no _a_r_g_s, or only null arguments, eevvaall returns 0. eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] - If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process - is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If the --ll option is supplied, the shell places a dash at the begin- ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what _l_o_- - _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with - an empty environment. If --aa is supplied, the shell passes _n_a_m_e + _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with + an empty environment. If --aa is supplied, the shell passes _n_a_m_e as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can- - not be executed for some reason, a non-interactive shell exits, - unless the eexxeeccffaaiill shell option is enabled. In that case, it - returns failure. An interactive shell returns failure if the - file cannot be executed. A subshell exits unconditionally if - eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take - effect in the current shell, and the return status is 0. If + not be executed for some reason, a non-interactive shell exits, + unless the eexxeeccffaaiill shell option is enabled. In that case, it + returns failure. An interactive shell returns failure if the + file cannot be executed. A subshell exits unconditionally if + eexxeecc fails. If _c_o_m_m_a_n_d 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. eexxiitt [_n] - Cause the shell to exit with a status of _n. If _n is omitted, + Cause the shell to exit with a status of _n. If _n is omitted, the exit status is that of the last command executed. A trap on EEXXIITT is executed before the shell terminates. eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... eexxppoorrtt --pp - The supplied _n_a_m_e_s are marked for automatic export to the envi- - ronment of subsequently executed commands. If the --ff option is - given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or - if the --pp option is supplied, a list of names of all exported - variables is printed. The --nn option causes the export property + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of names of all exported + variables is printed. The --nn option causes the export property to be removed from each _n_a_m_e. If a variable name is followed by =_w_o_r_d, the value of the variable is set to _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid option is encountered, one - of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- + of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- plied with a _n_a_m_e that is not a function. ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] - The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t - from the history list and displays or edits and re-executes - them. _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 current command number). When listing, a - _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to - the current command (usually the ffcc command); otherwise 0 is - equivalent to -1 and -0 is invalid. 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 + The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t + from the history list and displays or edits and re-executes + them. _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 current command number). When listing, a + _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to + the current command (usually the ffcc command); otherwise 0 is + equivalent to -1 and -0 is invalid. 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 - is given, the commands are listed on standard output. Other- - wise, the editor given by _e_n_a_m_e is invoked on a file containing - those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT - variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. - If neither variable is set, _v_i is used. When editing is com- + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, _v_i is used. When editing is com- plete, the edited commands are echoed and executed. - In the second form, _c_o_m_m_a_n_d is re-executed after each instance - of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as - _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', - so that typing ``r cc'' runs the last command beginning with + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as + _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', + so that typing ``r cc'' runs the last command beginning with ``cc'' and typing ``r'' re-executes the last command. - If the first form is used, the return value is 0 unless an in- - valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history - lines out of range. If the --ee option is supplied, the return + If the first form is used, the return value is 0 unless an in- + valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee 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-exe- - cuted, unless _c_m_d does not specify a valid history line, in + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in which case ffcc returns failure. ffgg [_j_o_b_s_p_e_c] - Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b - is used. The return value is that of the command placed into - the foreground, or failure if run when job control is disabled + 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 _j_o_b_s_p_e_c does not spec- - ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started without job control. ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g _._._.] - ggeettooppttss is used by shell procedures to parse positional parame- - ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- - nized; if a character is followed by a colon, the option is ex- + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is ex- pected 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, ggeettooppttss - places the next option in the shell variable _n_a_m_e, initializing + white space. The colon and question mark characters may not be + used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing _n_a_m_e if it does not exist, and the index of the next argument to be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to 1 each time the shell or a shell script is invoked. When an op- tion requires an argument, ggeettooppttss places that argument into the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically; - it must be manually reset between multiple calls to ggeettooppttss - within the same shell invocation if a new set of parameters is + it must be manually reset between multiple calls to ggeettooppttss + within the same shell invocation if a new set of parameters is to be used. When the end of options is encountered, ggeettooppttss exits with a re- turn value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and _n_a_m_e is set to ?. - ggeettooppttss normally parses the positional parameters, but if more - arguments are supplied as _a_r_g values, ggeettooppttss parses those in- + ggeettooppttss normally parses the positional parameters, but if more + arguments are supplied as _a_r_g values, ggeettooppttss parses those in- stead. - ggeettooppttss can report errors in two ways. If the first character - of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In - normal operation, diagnostic messages are printed when invalid - options or missing option arguments are encountered. If the - variable OOPPTTEERRRR is set to 0, no error messages will be dis- + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation, diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if - not silent, prints an error message and unsets OOPPTTAARRGG. If - ggeettooppttss is silent, the option character found is placed in OOPP-- + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in OOPP-- TTAARRGG and no diagnostic message is printed. - If a required argument is not found, and ggeettooppttss is not silent, - a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a - diagnostic message is printed. If ggeettooppttss is silent, then a - colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option character found. - ggeettooppttss returns true if an option, specified or unspecified, is + ggeettooppttss returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs. hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e - is determined by searching the directories in $$PPAATTHH and remem- + is determined by searching the directories in $$PPAATTHH and remem- bered. Any previously-remembered pathname is discarded. If the --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e - is used as the full filename of the command. The --rr option + is used as the full filename of the command. The --rr option causes the shell to forget all remembered locations. The --dd op- - tion causes the shell to forget the remembered location of each - _n_a_m_e. If the --tt option is supplied, the full pathname to which - each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments + tion causes the shell to forget the remembered location of each + _n_a_m_e. If the --tt option is supplied, the full pathname to which + each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are supplied with --tt, the _n_a_m_e is printed before the hashed full pathname. The --ll option causes output to be displayed in a for- - mat that may be reused as input. If no arguments are given, or + mat that may be reused as input. If no arguments are given, or if only --ll is supplied, information about remembered commands is - printed. The return status is true unless a _n_a_m_e is not found + printed. The return status is true unless a _n_a_m_e is not found or an invalid option is supplied. hheellpp [--ddmmss] [_p_a_t_t_e_r_n] - Display helpful information about builtin commands. If _p_a_t_t_e_r_n - is specified, hheellpp gives detailed help on all commands matching - _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control structures is printed. --dd Display a short description of each _p_a_t_t_e_r_n --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like @@ -4990,70 +5128,70 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] With no options, display the command history list with line num- bers. Lines listed with a ** have been modified. An argument of - _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- - FFOORRMMAATT is set and not null, it is used as a format string for - _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- - played history entry. No intervening blank is printed between - the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is - supplied, it is used as the name of the history file; if not, - the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the following meanings: --cc Clear the history list by deleting all the entries. --dd _o_f_f_s_e_t - Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t + Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t is negative, it is interpreted as relative to one greater than the last history position, so negative indices count - back from the end of the history, and an index of -1 + back from the end of the history, and an index of -1 refers to the current hhiissttoorryy --dd command. --dd _s_t_a_r_t-_e_n_d - Delete the history entries between positions _s_t_a_r_t and - _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t - and _e_n_d are interpreted as described above. - --aa Append the ``new'' history lines to the history file. - These are history lines entered since the beginning of + Delete the range of history entries between positions + _s_t_a_r_t and _e_n_d, inclusive. Positive and negative values + for _s_t_a_r_t and _e_n_d are interpreted as described above. + --aa Append the ``new'' history lines to the history file. + These are history lines entered since the beginning of the current bbaasshh session, but not already appended to the history file. - --nn Read the history lines not already read from the history - file into the current history list. These are lines ap- - pended to the history file since the beginning of the + --nn Read the history lines not already read from the history + file into the current history list. These are lines ap- + pended to the history file since the beginning of the current bbaasshh session. - --rr Read the contents of the history file and append them to + --rr Read the contents of the history file and append them to the current history list. --ww Write the current history list to the history file, over- writing the history file's contents. - --pp Perform history substitution on the following _a_r_g_s and - display the result on the standard output. Does not - store the results in the history list. Each _a_r_g must be + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be quoted to disable normal history expansion. - --ss Store the _a_r_g_s in the history list as a single entry. - The last command in the history list is removed before + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before the _a_r_g_s are added. - If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- - tion associated with each history entry is written to the his- - tory file, marked with the history comment character. When the - history file is read, lines beginning with the history comment - character followed immediately by a digit are interpreted as + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as timestamps for the following history entry. The return value is 0 unless an invalid option is encountered, an error occurs while - reading or writing the history file, an invalid _o_f_f_s_e_t is sup- - plied as an argument to --dd, or the history expansion supplied as - an argument to --pp fails. + reading or writing the history file, an invalid _o_f_f_s_e_t or range + is supplied as an argument to --dd, or the history expansion sup- + plied as an argument to --pp fails. jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ] The first form lists the active jobs. The options have the fol- lowing meanings: --ll List process IDs in addition to the normal information. - --nn Display information only about jobs that have changed + --nn Display information only about jobs that have changed status since the user was last notified of their status. - --pp List only the process ID of the job's process group + --pp List only the process ID of the job's process group leader. --rr Display only running jobs. --ss Display only stopped jobs. - If _j_o_b_s_p_e_c is given, output is restricted to information about - that job. The return status is 0 unless an invalid option is + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is encountered or an invalid _j_o_b_s_p_e_c is supplied. If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in @@ -5062,104 +5200,113 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] - Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes - named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive - signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or - a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not - present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the - signal names. If any arguments are supplied when --ll is given, - the names of the signals corresponding to the arguments are + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to - --ll is a number specifying either a signal number or the exit - status of a process terminated by a signal. The --LL option is - equivalent to --ll. kkiillll returns true if at least one signal was + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. The --LL option is + equivalent to --ll. kkiillll returns true if at least one signal was successfully sent, or false if an error occurs or an invalid op- tion is encountered. lleett _a_r_g [_a_r_g ...] Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- - MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett + MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett returns 1; 0 is returned otherwise. llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ] - For each argument, a local variable named _n_a_m_e is created, and - assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted by ddeeccllaarree. When llooccaall is used within a function, it causes the - variable _n_a_m_e to have a visible scope restricted to that func- - tion and its children. If _n_a_m_e is -, the set of shell options - is made local to the function in which llooccaall is invoked: shell - options changed using the sseett builtin inside the function are - restored to their original values when the function returns. + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. If _n_a_m_e is -, the set of shell options + is made local to the function in which llooccaall is invoked: shell + options changed using the sseett builtin inside the function are + restored to their original values when the function returns. The restore is effected as if a series of sseett commands were exe- - cuted to restore the values that were in place before the func- - tion. With no operands, llooccaall writes a list of local variables - to the standard output. It is an error to use llooccaall when not - within a function. The return status is 0 unless llooccaall is used - outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a + cuted to restore the values that were in place before the func- + tion. With no operands, llooccaall writes a list of local variables + to the standard output. It is an error to use llooccaall when not + within a function. The return status is 0 unless llooccaall is used + outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. - mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC + mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] - Read lines from the standard input into the indexed array vari- - able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- - plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if supplied, have the following meanings: - --dd The first character of _d_e_l_i_m is used to terminate each - input line, rather than newline. If _d_e_l_i_m is the empty + --dd The first character of _d_e_l_i_m is used to terminate each + input line, rather than newline. If _d_e_l_i_m is the empty string, mmaappffiillee will terminate a line when it reads a NUL character. - --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are copied. - --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default index is 0. --ss Discard the first _c_o_u_n_t lines read. - --tt Remove a trailing _d_e_l_i_m (default newline) from each line + --tt Remove a trailing _d_e_l_i_m (default newline) from each line read. - --uu Read lines from file descriptor _f_d instead of the stan- + --uu Read lines from file descriptor _f_d instead of the stan- dard input. - --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The --cc option specifies _q_u_a_n_t_u_m. - --cc Specify the number of lines read between each call to + --cc Specify the number of lines read between each call to _c_a_l_l_b_a_c_k. - If --CC is specified without --cc, the default quantum is 5000. + If --CC is specified without --cc, the default quantum is 5000. When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that - element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after + element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- + If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- _r_a_y before assigning to it. - mmaappffiillee returns successfully unless an invalid option or option - argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if _a_r_r_a_y is not an indexed array. ppooppdd [-nn] [+_n] [-_n] - Removes entries from the directory stack. With no arguments, - removes the top directory from the stack, and performs a ccdd to - the new top directory. Arguments, if supplied, have the follow- - ing meanings: + Removes entries from the directory stack. The elements are num- + bered from 0 starting at the first directory listed by ddiirrss. + With no arguments, ppooppdd removes the top directory from the + stack, and changes to the new top directory. Arguments, if sup- + plied, have the following meanings: --nn Suppresses the normal change of directory when removing directories from the stack, so that only the stack is ma- nipulated. ++_n Removes the _nth entry counting from the left of the list - shown by ddiirrss, starting with zero. For example: ``popd - +0'' removes the first directory, ``popd +1'' the second. + shown by ddiirrss, starting with zero, from the stack. For + example: ``popd +0'' removes the first directory, ``popd + +1'' the second. --_n Removes the _nth entry counting from the right of the list - shown by ddiirrss, starting with zero. For example: ``popd - -0'' removes the last directory, ``popd -1'' the next to + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to last. - If the ppooppdd command is successful, a ddiirrss is performed as well, - and the return status is 0. ppooppdd returns false if an invalid - option is encountered, the directory stack is empty, a non-exis- - tent directory stack entry is specified, or the directory change - fails. + If the top element of the directory stack is modified, and the + _-_n option was not supplied, ppooppdd uses the ccdd builtin to change + to the directory at the top of the stack. If the ccdd fails, ppooppdd + returns a non-zero value. + + Otherwise, ppooppdd returns false if an invalid option is encoun- + tered, the directory stack is empty, or a non-existent directory + stack entry is specified. + + If the ppooppdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack, and the return status is + 0. pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the @@ -5178,15 +5325,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee. %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can be reused as shell input. + %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- + _m_e_n_t before quoting it. %%((_d_a_t_e_f_m_t))TT - causes pprriinnttff to output the date-time string resulting - from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). + causes pprriinnttff to output the date-time string resulting + from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). The corresponding _a_r_g_u_m_e_n_t is an integer representing the - number of seconds since the epoch. Two special argument - values may be used: -1 represents the current time, and - -2 represents the time the shell was invoked. If no ar- + number of seconds since the epoch. Two special argument + values may be used: -1 represents the current time, and + -2 represents the time the shell was invoked. If no ar- gument is specified, conversion behaves as if -1 had been - given. This is an exception to the usual pprriinnttff behav- + given. This is an exception to the usual pprriinnttff behav- ior. The %b, %q, and %T directives all use the field width and preci- @@ -5194,100 +5343,104 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS bytes from (or use that wide a field for) the expanded argument, which usually contains more characters than the original. - Arguments to non-string format specifiers are treated as C con- + Arguments to non-string format specifiers are treated as C con- stants, except that a leading plus or minus sign is allowed, and - if the leading character is a single or double quote, the value + if the leading character is a single or double quote, the value is the ASCII value of the following character. - The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, - the extra format specifications behave as if a zero value or - null string, as appropriate, had been supplied. The return + 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. ppuusshhdd [--nn] [+_n] [-_n] ppuusshhdd [--nn] [_d_i_r] - 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, ppuusshhdd exchanges the top two di- - rectories and returns 0, unless the directory stack is empty. - Arguments, if supplied, have the following meanings: - --nn Suppresses the normal change of directory when rotating - or adding directories to the stack, so that only the + 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, ppuusshhdd exchanges the top two ele- + ments of the directory stack. Arguments, if supplied, have the + following meanings: + --nn Suppresses the normal change of directory when rotating + or adding directories to the stack, so that only the stack is manipulated. - ++_n Rotates the stack so that the _nth directory (counting - from the left of the list shown by ddiirrss, starting with + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with zero) is at the top. - --_n Rotates the stack so that the _nth directory (counting - from the right of the list shown by ddiirrss, starting with + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with zero) is at the top. - _d_i_r Adds _d_i_r to the directory stack at the top, making it the - new current working directory as if it had been supplied - as the argument to the ccdd builtin. + _d_i_r Adds _d_i_r to the directory stack at the top - If the ppuusshhdd command is successful, a ddiirrss is performed as well. - If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r - fails. With the second form, ppuusshhdd returns 0 unless the direc- - tory stack is empty, a non-existent directory stack element is - specified, or the directory change to the specified new current - directory fails. + After the stack has been modified, if the --nn option was not sup- + plied, ppuusshhdd uses the ccdd builtin to change to the directory at + the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero + value. + + Otherwise, if no arguments are supplied, ppuusshhdd returns 0 unless + the directory stack is empty. When rotating the directory + stack, ppuusshhdd returns 0 unless the directory stack is empty or a + non-existent directory stack element is specified. + + If the ppuusshhdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack. ppwwdd [--LLPP] - Print the absolute pathname of the current working directory. + Print the absolute pathname of the current working directory. The pathname printed contains no symbolic links if the --PP option is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command - is enabled. If the --LL option is used, the pathname printed may - contain symbolic links. The return status is 0 unless an error + is enabled. If the --LL 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 in- valid option is supplied. rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] - One line is read from the standard input, or from the file de- + One line is read from the standard input, or from the file de- scriptor _f_d supplied as an argument to the --uu option, split into - words as described above under WWoorrdd SSpplliittttiinngg, and the first - word is assigned to the first _n_a_m_e, the second word to the sec- - ond _n_a_m_e, and so on. If there are more words than names, the + words as described above under WWoorrdd SSpplliittttiinngg, and the first + word is assigned to the first _n_a_m_e, the second word to the sec- + ond _n_a_m_e, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to - the last _n_a_m_e. If there are fewer words read from the input - stream than names, the remaining names are assigned empty val- - ues. The characters in IIFFSS are used to split the line into - words using the same rules the shell uses for expansion (de- - scribed above under WWoorrdd SSpplliittttiinngg). The backslash character + the last _n_a_m_e. If there are fewer words read from the input + stream than names, the remaining names are assigned empty val- + ues. The characters in IIFFSS are used to split the line into + words using the same rules the shell uses for expansion (de- + scribed above under WWoorrdd SSpplliittttiinngg). The backslash character (\\) may be used to remove any special meaning for the next char- - acter read and for line continuation. Options, if supplied, + acter read and for line continuation. Options, if supplied, have the following meanings: --aa _a_n_a_m_e The words are assigned to sequential indices of the array variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any - new values are assigned. Other _n_a_m_e arguments are ig- + new values are assigned. Other _n_a_m_e arguments are ig- nored. --dd _d_e_l_i_m The first character of _d_e_l_i_m is used to terminate the in- - put line, rather than newline. If _d_e_l_i_m is the empty - string, rreeaadd will terminate a line when it reads a NUL + put line, rather than newline. If _d_e_l_i_m is the empty + string, rreeaadd will terminate a line when it reads a NUL character. --ee If the standard input is coming from a terminal, rreeaaddlliinnee - (see RREEAADDLLIINNEE above) is used to obtain the line. Read- - line uses the current (or default, if line editing was - not previously active) editing settings, but uses Read- + (see RREEAADDLLIINNEE above) is used to obtain the line. Read- + line uses the current (or default, if line editing was + not previously active) editing settings, but uses Read- line's default filename completion. --ii _t_e_x_t - If rreeaaddlliinnee is being used to read the line, _t_e_x_t is + If rreeaaddlliinnee is being used to read the line, _t_e_x_t is placed into the editing buffer before editing begins. --nn _n_c_h_a_r_s - rreeaadd returns after reading _n_c_h_a_r_s characters rather than + rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input, but honors a delim- - iter if fewer than _n_c_h_a_r_s characters are read before the + iter if fewer than _n_c_h_a_r_s characters are read before the delimiter. --NN _n_c_h_a_r_s - rreeaadd returns after reading exactly _n_c_h_a_r_s characters - rather than waiting for a complete line of input, unless - EOF is encountered or rreeaadd times out. Delimiter charac- - ters encountered in the input are not treated specially - and do not cause rreeaadd to return until _n_c_h_a_r_s characters - are read. The result is not split on the characters in - IIFFSS; the intent is that the variable is assigned exactly + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. The result is not split on the characters in + IIFFSS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the --rr option below). --pp _p_r_o_m_p_t @@ -5295,25 +5448,26 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS line, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. --rr Backslash does not act as an escape character. The back- - slash is considered to be part of the line. In particu- - lar, a backslash-newline pair may not then be used as a + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not then be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. --tt _t_i_m_e_o_u_t - Cause rreeaadd to time out and return failure if a complete - line of input (or a specified number of characters) is - not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- - mal number with a fractional portion following the deci- - mal point. This option is only effective if rreeaadd is - reading input from a terminal, pipe, or other special - file; it has no effect when reading from regular files. + Cause rreeaadd to time out and return failure if a complete + line of input (or a specified number of characters) is + not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- + mal number with a fractional portion following the deci- + mal point. This option is only effective if rreeaadd is + reading input from a terminal, pipe, or other special + file; it has no effect when reading from regular files. If rreeaadd times out, rreeaadd saves any partial input read into - the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- - turns immediately, without trying to read any data. The - exit status is 0 if input is available on the specified - file descriptor, non-zero otherwise. The exit status is - greater than 128 if the timeout is exceeded. + the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- + turns immediately, without trying to read any data. The + exit status is 0 if input is available on the specified + file descriptor, or the read will return EOF, non-zero + otherwise. The exit status is greater than 128 if the + timeout is exceeded. --uu _f_d Read input from file descriptor _f_d. If no _n_a_m_e_s are supplied, the line read, without the ending de- @@ -5361,18 +5515,18 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS associated with the RREETTUURRNN trap is executed before execution re- sumes after the function or script. - sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - Without options, the name and value of each shell variable are - displayed in a format that can be reused as input for setting or - resetting the currently-set variables. Read-only variables can- - not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. - The output is sorted according to the current locale. When op- - tions are specified, they set or unset shell attributes. Any - arguments remaining after option processing are treated as val- - ues for the positional parameters and are assigned, in order, to - $$11, $$22, ...... $$_n. Options, if specified, have the following - meanings: + sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + Without options, display the name and value of each shell vari- + able in a format that can be reused as input for setting or re- + setting the currently-set variables. Read-only variables cannot + be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. The + output is sorted according to the current locale. When options + are specified, they set or unset shell attributes. Any argu- + ments remaining after option processing are treated as values + for the positional parameters and are assigned, in order, to $$11, + $$22, ...... $$_n. Options, if specified, have the following mean- + ings: --aa Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. @@ -5495,9 +5649,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS plied 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. + --rr Enable restricted shell mode. This option cannot be un- + set once it has been set. --tt Exit after reading and executing one command. --uu Treat unset variables and parameters other than the spe- - cial parameters "@" and "*" as an error when performing + cial parameters "@" and "*", or array variables sub- + scripted with "@" or "*", as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero @@ -5635,6 +5792,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ccoommppaatt4422 ccoommppaatt4433 ccoommppaatt4444 + ccoommppaatt5500 These control aspects of the shell's compatibility mode (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below). @@ -5742,6 +5900,11 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS between AA and BB, and upper-case and lower-case ASCII characters will collate together. + gglloobbsskkiippddoottss + If set, pathname expansion will never match the file- + names ````..'''' and ````....'''', even if the pattern begins with + a ````..''''. This option is enabled by default. + gglloobbssttaarr If set, the pattern **** used in a pathname expansion con- text will match all files and zero or more directories @@ -5840,46 +6003,63 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS tution word expansions, or when filtering possible com- pletions as part of programmable completion. + nnooeexxppaanndd__ttrraannssllaattiioonn + If set, bbaasshh encloses the translated results of $"..." + quoting in single quotes instead of double quotes. If + the string is not translated, this has no effect. + nnuullllgglloobb If set, bbaasshh allows patterns which match no files (see PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, rather than themselves. + ppaattssuubb__rreeppllaacceemmeenntt + If set, bbaasshh expands occurrences of && in the replacement + string of pattern substitution to the text matched by + the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn + above. This option is enabled by default. + pprrooggccoommpp If set, the programmable completion facilities (see PPrroo-- ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is enabled by default. pprrooggccoommpp__aalliiaass - If set, and programmable completion is enabled, bbaasshh - treats a command name that doesn't have any completions - as a possible alias and attempts alias expansion. If it - has an alias, bbaasshh attempts programmable completion us- + If set, and programmable completion is enabled, bbaasshh + treats a command name that doesn't have any completions + as a possible alias and attempts alias expansion. If it + has an alias, bbaasshh attempts programmable completion us- ing the command word resulting from the expanded alias. pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- - mand substitution, arithmetic expansion, and quote re- - moval after being expanded as described in PPRROOMMPPTTIINNGG + mand substitution, arithmetic expansion, and quote re- + moval after being expanded as described in PPRROOMMPPTTIINNGG above. This option is enabled by default. rreessttrriicctteedd__sshheellll - The shell sets this option if it is started in re- - stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value - may not be changed. This is not reset when the startup - files are executed, allowing the startup files to dis- + The shell sets this option if it is started in re- + stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- cover whether or not a shell is restricted. sshhiifftt__vveerrbboossee - If set, the sshhiifftt builtin prints an error message when + If set, the sshhiifftt builtin prints an error message when the shift count exceeds the number of positional parame- ters. ssoouurrcceeppaatthh - If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to - find the directory containing the file supplied as an + If set, the .. (ssoouurrccee) builtin uses the value of PPAATTHH to + find the directory containing the file supplied as an argument. This option is enabled by default. + vvaarrrreeddiirr__cclloossee + If set, the shell automatically closes file descriptors + assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE-- + DDIIRREECCTTIIOONN above) instead of leaving them open when the + command completes. + xxppgg__eecchhoo If set, the eecchhoo builtin expands backslash-escape se- quences by default. @@ -5943,11 +6123,15 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS is the one-argument test of the second argument. Other- wise, the expression is false. 4 arguments + The following conditions are applied in the order listed. If the first argument is !!, the result is the negation of - the three-argument expression composed of the remaining - arguments. Otherwise, the expression is parsed and eval- - uated according to precedence using the rules listed - above. + the three-argument expression composed of the remaining + arguments. the two-argument test using the second and + third arguments. If the first argument is exactly (( and + the fourth argument is exactly )), the result is the two- + argument test of the second and third arguments. Other- + wise, the expression is parsed and evaluated according to + precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence using the rules listed above. @@ -6115,7 +6299,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS NNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECCOONNDDSS, or SSRRAANNDDOOMM are unset, they lose their special properties, even if they are sub- sequently reset. The exit status is true unless a _n_a_m_e is read- - only. + only or may not be unset. wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d _._._.] Wait for each specified child process and return its termination @@ -6268,33 +6452,39 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE input. Bash-5.1 suppresses that message when the --ll op- tion is supplied. + ccoommppaatt5511 + +o The uunnsseett builtin treats attempts to unset array sub- + scripts @@ and ** differently depending on whether the ar- + ray is indexed or associative, and differently than in + previous versions. + RREESSTTRRIICCTTEEDD SSHHEELLLL If bbaasshh is started with the name rrbbaasshh, or the --rr 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 bbaasshh with the exception that the following are + 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 bbaasshh with the exception that the following are disallowed or not performed: +o changing directories with ccdd - +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, + +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, or BBAASSHH__EENNVV +o specifying command names containing // - +o specifying a filename containing a // as an argument to the .. + +o specifying a filename containing a // as an argument to the .. builtin command - +o specifying a filename containing a slash as an argument to the + +o specifying a filename containing a slash as an argument to the hhiissttoorryy builtin command - +o specifying a filename containing a slash as an argument to the + +o specifying a filename containing a slash as an argument to the --pp option to the hhaasshh builtin command - +o importing function definitions from the shell environment at + +o importing function definitions from the shell environment at startup - +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at + +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at startup +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- @@ -6303,15 +6493,16 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o using the eexxeecc builtin command to replace the shell with another command - +o adding or deleting builtin commands with the --ff and --dd options + +o adding or deleting builtin commands with the --ff and --dd options to the eennaabbllee builtin command - +o using the eennaabbllee builtin command to enable disabled shell + +o using the eennaabbllee builtin command to enable disabled shell builtins +o specifying the --pp option to the ccoommmmaanndd builtin command - +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd. + +o turning off restricted mode with sseett ++rr or sshhoopptt --uu rree-- + ssttrriicctteedd__sshheellll. These restrictions are enforced after any startup files are read. @@ -6343,6 +6534,9 @@ FFIILLEESS _~_/_._b_a_s_h___l_o_g_o_u_t The individual login shell cleanup file, executed when a login shell exits + _~_/_._b_a_s_h___h_i_s_t_o_r_y + The default value of HHIISSTTFFIILLEE, the file in which bash saves the + command history _~_/_._i_n_p_u_t_r_c Individual _r_e_a_d_l_i_n_e initialization file @@ -6355,9 +6549,10 @@ AAUUTTHHOORRSS BBUUGG RREEPPOORRTTSS If you find a bug in bbaasshh,, 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 bbaasshh. The latest version is always available from - _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/. + make sure that it really is a bug, and that it appears in the latest + version of bbaasshh. The latest version is always available from + _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/ and _h_t_t_p_:_/_/_g_i_t_._s_a_v_a_n_- + _n_a_h_._g_n_u_._o_r_g_/_c_g_i_t_/_b_a_s_h_._g_i_t_/_s_n_a_p_s_h_o_t_/_b_a_s_h_-_m_a_s_t_e_r_._t_a_r_._g_z. Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g command to submit a bug report. If you have a fix, you are encouraged @@ -6402,4 +6597,4 @@ BBUUGGSS -GNU Bash 5.1 2020 October 29 BASH(1) +GNU Bash 5.2 2021 December 26 BASH(1) diff --git a/doc/bash.1 b/doc/bash.1 index 5af7d428..d35468da 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -5,12 +5,12 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Wed Sep 23 09:28:31 EDT 2020 +.\" Last Change: Sun Dec 26 16:02:07 EST 2021 .\" .\" bash_builtins, strip all but Built-Ins section .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2020 October 29" "GNU Bash 5.1" +.TH BASH 1 "2021 December 26" "GNU Bash 5.2" .\" .\" There's some problem with having a `@' .\" in a tagged paragraph with the BSD man macros. @@ -50,8 +50,8 @@ bash \- GNU Bourne-Again SHell [options] [command_string | file] .SH COPYRIGHT -.if n Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc. -.if t Bash is Copyright \(co 1989-2020 by the Free Software Foundation, Inc. +.if n Bash is Copyright (C) 1989-2021 by the Free Software Foundation, Inc. +.if t Bash is Copyright \(co 1989-2021 by the Free Software Foundation, Inc. .SH DESCRIPTION .B Bash is an \fBsh\fR-compatible command language interpreter that @@ -281,7 +281,7 @@ An \fIinteractive\fP shell is one started without non-option arguments (unless \fB\-s\fP is specified) and without the .B \-c -option +option, whose standard input and error are both connected to terminals (as determined by .IR isatty (3)), @@ -511,6 +511,7 @@ command (only \fBin\fP and \fBdo\fP are valid): .if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] .if t .RE .SH "SHELL GRAMMAR" +This section describes the syntax of the various forms of shell commands. .SS Simple Commands A \fIsimple command\fP is a sequence of optional variable assignments followed by \fBblank\fP-separated words and redirections, and @@ -529,24 +530,24 @@ or \fB|&\fP. The format for a pipeline is: .RS .PP -[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ] +[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ] .RE .PP The standard output of -.I command +.I command1 is connected via a pipe to the standard input of .IR command2 . This connection is performed before any redirections specified by the -command (see +.IR command1 (see .SM .B REDIRECTION below). -If \fB|&\fP is used, \fIcommand\fP's standard error, in addition to its +If \fB|&\fP is used, \fIcommand1\fP's standard error, in addition to its standard output, is connected to \fIcommand2\fP's standard input through the pipe; it is shorthand for \fB2>&1 |\fP. This implicit redirection of the standard error to the standard output is -performed after any redirections specified by the command. +performed after any redirections specified by \fIcommand1\fP. .PP The return status of a pipeline is the exit status of the last command, unless the \fBpipefail\fP option is enabled. @@ -588,15 +589,16 @@ The variable may be used to specify the format of the time information. .PP -Each command in a pipeline is executed as a separate process (i.e., in a -subshell). +Each command in a pipeline is executed in a \fIsubshell\fP, which is a +separate process. See .SM \fBCOMMAND EXECUTION ENVIRONMENT\fP -for a description of a subshell environment. +for a description of subshells and a subshell environment. If the \fBlastpipe\fP option is enabled using the \fBshopt\fP builtin (see the description of \fBshopt\fP below), -the last element of a pipeline may be run by the shell process. +the last element of a pipeline may be run by the shell process +when job control is not active. .SS Lists A \fIlist\fP is a sequence of one or more pipelines separated by one of the operators @@ -671,10 +673,10 @@ the rest of the command by one or more newlines, and may be followed by a newline in place of a semicolon. .TP (\fIlist\fP) -\fIlist\fP is executed in a subshell environment (see +\fIlist\fP is executed in a subshell (see .SM \fBCOMMAND EXECUTION ENVIRONMENT\fP -below). +below for a description of a subshell environment). 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 @@ -698,8 +700,12 @@ 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. +otherwise the return status is 1. +The \fIexpression\fP +undergoes the same expansions +as if it were within double quotes, +but double quote characters in \fIexpression\fP are not treated specially +and are removed. .TP \fB[[\fP \fIexpression\fP \fB]]\fP Return a status of 0 or 1 depending on the evaluation of @@ -707,11 +713,12 @@ 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. +The words between the \fB[[\fP and \fB]]\fP do not undergo word splitting +and pathname expansion. +The shell performs tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal on those words +(the expansions that would occur if the words were enclosed in double quotes). Conditional operators such as \fB\-f\fP must be unquoted to be recognized as primaries. .if t .sp 0.5 @@ -749,12 +756,14 @@ If the .B nocasematch shell option is enabled, the match is performed without regard to the case of alphabetic characters. -Any part of the pattern may be quoted to force the quoted portion -to be matched as a string. -Bracket expressions in regular expressions must be treated carefully, -since normal quoting characters lose their meanings between brackets. +If any part of the pattern is quoted, the quoted portion is matched literally. +This means every character in the quoted portion matches itself, +instead of having any special pattern matching meaning. If the pattern is stored in a shell variable, quoting the variable -expansion forces the entire pattern to be matched as a string. +expansion forces the entire pattern to be matched literally. +Treat bracket expressions in regular expressions carefully, +since normal quoting and pattern characters lose their meanings +between brackets. .if t .sp 0.5 .if n .sp 1 The pattern will match if it matches any part of the string. @@ -888,7 +897,7 @@ expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution and quote removal. Each \fIpattern\fP examined is expanded using tilde expansion, parameter and variable expansion, arithmetic expansion, -command substitution, and process substitution. +command substitution, process substitution, and quote removal. If the .B nocasematch shell option is enabled, the match is performed without regard to the case @@ -944,17 +953,36 @@ A coprocess is executed asynchronously in a subshell, as if the command had been terminated with the \fB&\fP control operator, with a two-way pipe established between the executing shell and the coprocess. .PP -The format for a coprocess is: +The syntax for a coprocess is: .RS .PP \fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP] .RE .PP This creates a coprocess named \fINAME\fP. +\fIcommand\fP may be either a simple command or a compound +command (see above). +\fINAME\fP is a shell variable name. If \fINAME\fP is not supplied, the default name is \fBCOPROC\fP. -\fINAME\fP must not be supplied if \fIcommand\fP is a \fIsimple -command\fP (see above); otherwise, it is interpreted as the first word -of the simple command. +.PP +The recommended form to use for a coprocess is +.RS +.PP +\fBcoproc\fP \fINAME\fP { \fIcommand\fP [\fIredirections\fP]; } +.RE +.PP +This form is recommended because simple commands result in the coprocess +always being named \fBCOPROC\fP, and it is simpler to use and more complete +than the other compound commands. +.PP +If \fIcommand\fP is a compound command, \fINAME\fP is optional. The +word following \fBcoproc\fP determines whether that word is interpreted +as a variable name: it is interpreted as \fINAME\fP if it is not a +reserved word that introduces a compound command. +If \fIcommand\fP is a simple command, \fINAME\fP is not allowed; this +is to avoid confusion between \fINAME\fP and the first word of the simple +command. +.PP When the coprocess is executed, the shell creates an array variable (see .B Arrays below) named \fINAME\fP in the context of the executing shell. @@ -975,6 +1003,7 @@ The file descriptors can be utilized as arguments to shell commands and redirections using standard word expansions. Other than those created to execute command and process substitutions, the file descriptors are not available in subshells. +.PP The process ID of the shell spawned to execute the coprocess is available as the value of the variable \fINAME\fP_PID. The \fBwait\fP @@ -1000,9 +1029,9 @@ The \fIbody\fP of the function is the compound command .I compound\-command (see \fBCompound Commands\fP above). That command is usually a \fIlist\fP of commands between { and }, but -may be any command listed under \fBCompound Commands\fP above, -with one exception: If the \fBfunction\fP reserved word is used, but the -parentheses are not supplied, the braces are required. +may be any command listed under \fBCompound Commands\fP above. +If the \fBfunction\fP reserved word is used, but the +parentheses are not supplied, the braces are recommended. \fIcompound\-command\fP is executed whenever \fIfname\fP is specified as the name of a simple command. When in \fIposix mode\fP, \fIfname\fP must be a valid shell \fIname\fP @@ -1116,10 +1145,11 @@ quotes (see .B PARAMETERS below). .PP -Words of the form \fB$\fP\(aq\fIstring\fP\(aq are treated specially. The -word expands to \fIstring\fP, with backslash-escaped characters replaced -as specified by the ANSI C standard. Backslash escape sequences, if -present, are decoded as follows: +Character sequences of the form \fB$\fP\(aq\fIstring\fP\(aq are treated +as a special variant of single quotes. +The sequence expands to \fIstring\fP, with backslash-escaped characters +in \fIstring\fP replaced as specified by the ANSI C standard. +Backslash escape sequences, if present, are decoded as follows: .RS .PD 0 .TP @@ -1187,14 +1217,23 @@ not been present. .PP A double-quoted string preceded by a dollar sign (\fB$\fP\(dq\fIstring\fP\(dq) will cause the string to be translated according to the current locale. -The \fIgettext\fP infrastructure performs the message catalog lookup and -translation, using the \fBLC_MESSAGES\fP and \fBTEXTDOMAIN\fP shell -variables. +The \fIgettext\fP infrastructure performs the lookup and +translation, using the \fBLC_MESSAGES\fP, \fBTEXTDOMAINDIR\fP, +and \fBTEXTDOMAIN\fP shell variables. If the current locale is \fBC\fP or \fBPOSIX\fP, -or if there are no translations available, +if there are no translations available, +or if the string is not translated, the dollar sign is ignored. -If the string is translated and replaced, the replacement is -double-quoted. +This is a form of double quoting, so the string remains double-quoted +by default, whether or not it is translated and replaced. +If the \fBnoexpand_translation\fP option is enabled +using the \fBshopt\fP builtin, +translated strings are single-quoted instead of double-quoted. +See the description of +.B shopt +below under +.SM +.BR SHELL BUILTIN COMMANDS . .SH PARAMETERS A .I parameter @@ -1250,10 +1289,7 @@ 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. +Word splitting and pathname expansion are not performed. Assignment statements may also appear as arguments to the .BR alias , .BR declare , @@ -1407,7 +1443,7 @@ builtin command, or those set by the shell itself option). .TP .B $ -Expands to the process ID of the shell. In a () subshell, it +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 @@ -1926,6 +1962,16 @@ If is unset, it loses its special properties, even if it is subsequently reset. .TP +.B READLINE_ARGUMENT +Any numeric argument given to a Readline command that was defined using +.if t \f(CWbind -x\fP +.if n "bind -x" +(see +.SM +.B "SHELL BUILTIN COMMANDS" +below) +when it was invoked. +.TP .B READLINE_LINE The contents of the .B readline @@ -1968,14 +2014,14 @@ 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 +referenced, it expands to the number of seconds since shell invocation. +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. -The number of seconds at shell invocation and the current time is always +The number of seconds at shell invocation and the current time are always determined by querying the system clock. If .SM @@ -2782,9 +2828,15 @@ destroys the array element at index \fIsubscript\fP, for both indexed and associative arrays. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. -\fBunset\fP \fIname\fP, where \fIname\fP is an array, or +\fBunset\fP \fIname\fP, where \fIname\fP is an array, +removes the entire array. \fBunset\fP \fIname\fP[\fIsubscript\fP], where -\fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array. +\fIsubscript\fP is \fB*\fP or \fB@\fP, behaves differently depending on +whether \fIname\fP is an indexed or associative array. +If \fIname\fP is an associative array, this unsets the element with +subscript \fB*\fP or \fB@\fP. +If \fIname\fP is an indexed array, unset removes all of the elements but +does not remove the array itself. .PP When using a variable name with a subscript as an argument to a command, such as with \fBunset\fP, without using the word expansion syntax @@ -2875,7 +2927,7 @@ For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'. .PP A sequence expression takes the form \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP, -where \fIx\fP and \fIy\fP are either integers or single characters, +where \fIx\fP and \fIy\fP are either integers or single letters, and \fIincr\fP, an optional increment, is an integer. When integers are supplied, the expression expands to each number between \fIx\fP and \fIy\fP, inclusive. @@ -2884,10 +2936,11 @@ same width. When either \fIx\fP or \fPy\fP begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. -When characters are supplied, the expression expands to each character +When letters are supplied, the expression expands to each character lexicographically between \fIx\fP and \fIy\fP, inclusive, using the default C locale. -Note that both \fIx\fP and \fIy\fP must be of the same type. +Note that both \fIx\fP and \fIy\fP must be of the same type +(integer or letter). When the increment is supplied, it is used as the difference between each term. The default increment is 1 or \-1 as appropriate. .PP @@ -3289,22 +3342,49 @@ 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} +.TP +${\fIparameter\fP\fB/#\fP\fIpattern\fP\fB/\fP\fIstring\fP} +.TP +${\fIparameter\fP\fB/%\fP\fIpattern\fP\fB/\fP\fIstring\fP} +.PD \fBPattern substitution\fP. The \fIpattern\fP is expanded to produce a pattern just as in -pathname expansion, +pathname expansion. \fIParameter\fP is expanded and the longest match of \fIpattern\fP against its value is replaced with \fIstring\fP. +\fIstring\fP undergoes tilde expansion, parameter and variable expansion, +arithmetic expansion, command and process substitution, and quote removal. The match is performed using the rules described under .B Pattern Matching below. -If \fIpattern\fP begins with \fB/\fP, all matches of \fIpattern\fP are -replaced with \fIstring\fP. Normally only the first match is replaced. -If \fIpattern\fP begins with \fB#\fP, it must match at the beginning -of the expanded value of \fIparameter\fP. -If \fIpattern\fP begins with \fB%\fP, it must match at the end -of the expanded value of \fIparameter\fP. -If \fIstring\fP is null, matches of \fIpattern\fP are deleted +In the first form above, only the first match is replaced. +If there are two slashes separating \fIparameter\fP and \fIpattern\fP +(the second form above), all matches of \fIpattern\fP are +replaced with \fIstring\fP. +If \fIpattern\fP is preceded by \fB#\fP (the third form above), +it must match at the beginning of the expanded value of \fIparameter\fP. +If \fIpattern\fP is preceded by \fB%\fP (the fourth form above), +it must match at the end of the expanded value of \fIparameter\fP. +If the expansion of \fIstring\fP is null, +matches of \fIpattern\fP are deleted. +If \fIstring\fP is null, +matches of \fIpattern\fP are deleted and the \fB/\fP following \fIpattern\fP may be omitted. +If the \fBpatsub_replacement\fP shell option is enabled using \fBshopt\fP, +any unquoted instances of \fB&\fP in \fIstring\fP are replaced with the +matching portion of \fIpattern\fP. +Backslash is used to quote \fB&\fP in \fIstring\fP; the backslash is removed +in order to permit a literal \fB&\fP in the replacement string. +Users should take care +if \fIstring\fP is double-quoted to avoid unwanted interactions between +the backslash and double-quoting. +Pattern substitution performs the check for \fB&\fP after expanding +\fIstring\fP; shell programmers should quote backslashes intended to escape +the \fB&\fP and inhibit replacement so they survive any quote removal +performed by the expansion of \fIstring\fP. If the .B nocasematch shell option is enabled, the match is performed without regard to the case @@ -3414,6 +3494,10 @@ indexed and associative arrays as a sequence of quoted key-value pairs .B a The expansion is a string consisting of flag values representing \fIparameter\fP's attributes. +.TP +.B k +Like the K transformation, but expands the keys and values of +indexed and associative arrays to separate words after word splitting. .PD .PP If @@ -3483,8 +3567,10 @@ and the substitution of the result. The format for arithmetic expansion is: .PP The .I expression -is treated as if it were within double quotes, but a double quote -inside the parentheses is not treated specially. +undergoes the same expansions +as if it were within double quotes, +but double quote characters in \fIexpression\fP are not treated specially +and are removed. All tokens in the expression undergo parameter and variable expansion, command substitution, and quote removal. The result is treated as the arithmetic expression to be evaluated. @@ -3648,14 +3734,23 @@ at the start of a name or immediately following a slash must be matched explicitly, unless the shell option .B dotglob is set. -The filenames +In order to match the filenames .B ``.'' and -.B ``..'' -must always be matched explicitly, even if +.BR ``..'' , +the pattern must begin with ``.'' (for example, ``.?''), +even if .B dotglob is set. -In other cases, the +If the +.B globskipdots +shell option is enabled, the filenames +.B ``.'' +and +.BR ``..'' +are never matched, even if the pattern begins with a +.BR ``.'' . +When not matching pathnames, the .B ``.'' character is not treated specially. When matching a pathname, the slash character must always be @@ -3672,6 +3767,7 @@ below under for a description of the .BR nocaseglob , .BR nullglob , +.BR globskipdots , .BR failglob , and .B dotglob @@ -3833,7 +3929,7 @@ the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol .PD .PP If the \fBextglob\fP shell option is enabled using the \fBshopt\fP -builtin, several extended pattern matching operators are recognized. +builtin, the shell recognizes several extended pattern matching operators. 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 @@ -3859,6 +3955,16 @@ Matches anything except one of the given patterns .RE .PD .PP +When matching filenames, the \fBdotglob\fP shell option determines +the set of filenames that are tested: +when \fBdotglob\fP is enabled, the set of filenames includes all files +beginning with ``.'', but ``.'' and ``..'' must be matched by a +pattern or sub-pattern that begins with a dot; +when it is disabled, the set does not +include any filenames beginning with ``.'' unless the pattern +or sub-pattern begins with a ``.''. +As above, ``.'' only has a special meaning when matching filenames. +.PP Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings contain multiple matches. @@ -3876,7 +3982,7 @@ Before a command is executed, its input and output may be .I redirected using a special notation interpreted by the shell. -Redirection allows commands' file handles to be +\fIRedirection\fP allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. @@ -3900,7 +4006,8 @@ by {\fIvarname\fP}, the value of \fIvarname\fP defines the file descriptor to close. If {\fIvarname\fP} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor himself. +the file descriptor's lifetime manually. +The \fBvarredir_close\fP shell option manages this behavior. .PP In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is @@ -4287,7 +4394,7 @@ command, and removed with the command. .PP There is no mechanism for using arguments in the replacement text. -If arguments are needed, a shell function should be used (see +If arguments are needed, use a shell function (see .SM .B FUNCTIONS below). @@ -4453,7 +4560,8 @@ or 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 +Functions may be exported so that child shell processes +(those created when executing a separate shell invocation) automatically have them defined with the .B \-f option to the @@ -4777,7 +4885,11 @@ 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 +shell environment. +In the case of such a command (one that consists only of assignment +statements and redirections), assignment statements are performed before +redirections. +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. @@ -4842,8 +4954,10 @@ to the command are set to the arguments given, if any. 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 +containing shell commands, and the shell creates a +new instance of itself +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 @@ -4899,8 +5013,8 @@ of \fB$$\fP, and the value of 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. +the following. +Unless otherwise noted, the values are inherited from the shell. .if n .sp 1 .IP \(bu the shell's open files, plus any modifications and additions specified @@ -4919,6 +5033,8 @@ shell's parent, and traps ignored by the shell are ignored A command invoked in this separate environment cannot affect the shell's execution environment. .PP +A \fIsubshell\fP is a copy of the shell process. +.PP Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, @@ -5020,6 +5136,9 @@ while they execute. All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments. .PP +The exit status of the last command is available in the special +parameter $?. +.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 @@ -5111,6 +5230,63 @@ 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. +.PP +When job control is not enabled, and \fBbash\fP is waiting for a foreground +command to complete, the shell receives keyboard-generated signals +such as +.SM +.B SIGINT +(usually generated by \fB^C\fP) that users commonly intend to send +to that command. +This happens because the shell and the command are in the +same process group as the terminal, and \fB^C\fP sends +.SM +.B SIGINT +to all processes in that process group. +.PP +When \fBbash\fP is running without job control enabled and receives +.SM +.B SIGINT +while waiting for a foreground command, it waits until that foreground +command terminates and then decides what to do about the +.SM +.BR SIGINT : +.IP 1. +If the command terminates due to the +.SM +.BR SIGINT , +\fBbash\fP concludes +that the user meant to end the entire script, and acts on the +.SM +.B SIGINT +(e.g., by running a +.SM +.B SIGINT +trap or exiting itself); +.IP 2. +If the command does not terminate due to +.SM +.BR SIGINT , +the program handled the +.SM +.B SIGINT +itself and did not treat it as a fatal signal. +In that case, \fBbash\fP does not treat +.SM +.B SIGINT +as a fatal signal, either, instead assuming that the +.SM +.B SIGINT +was used as part of the program's normal operation +(e.g., emacs uses it to abort editing +commands) or deliberately discarded. +However, \fBbash\fP will run any +trap set on +.SM +.BR SIGINT , +as it does with any other trapped signal it +receives while it is waiting for the foreground command to +complete, for compatibility. .SH "JOB CONTROL" .I Job control refers to the ability to selectively stop (\fIsuspend\fP) @@ -5375,7 +5551,8 @@ the version of \fBbash\fP (e.g., 2.00) the release of \fBbash\fP, version + patch level (e.g., 2.00.0) .TP .B \ew -the current working directory, with +the value of the \fBPWD\fP shell variable (\fB$PWD\fP), +with .SM .B $HOME abbreviated with a tilde @@ -5385,7 +5562,8 @@ abbreviated with a tilde variable) .TP .B \eW -the basename of the current working directory, with +the basename of \fB$PWD\fP, +with .SM .B $HOME abbreviated with a tilde @@ -5751,6 +5929,9 @@ If set to \fBOn\fP, when listing completions, readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. +If there is a color definition in \fB$LS_COLORS\fP for the custom suffix +"readline-colored-completion-prefix", readline uses this color for +the common prefix instead of its default. .TP .B colored\-stats (Off) If set to \fBOn\fP, readline displays possible completions using different @@ -5800,6 +5981,8 @@ If the number of possible completions is greater than or equal to the value of this variable, readline will ask whether or not the user wishes to view them; otherwise they are simply listed on the terminal. +A zero value means readline should never ask; negative values are +treated as zero. .TP .B convert\-meta (On) If set to \fBOn\fP, readline will convert characters with the @@ -5838,6 +6021,17 @@ Use the \e1 and \e2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. .TP +.B enable\-active\-region (On) +The \fIpoint\fP is the current cursor position, and \fImark\fP refers +to a saved cursor position. +The text between the point and mark is referred to as the \fIregion\fP. +When this variable is set to \fIOn\fP, readline allows certain commands +to designate the region as \fIactive\fP. +When the region is active, readline highlights the text in the region using +the terminal's standout mode. +The active region shows the text inserted by bracketed-paste and any +matching text found by incremental and non-incremental history searches. +.TP .B enable\-bracketed\-paste (On) When set to \fBOn\fP, readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a @@ -6256,6 +6450,18 @@ Move to the first line in the history. Move to the end of the input history, i.e., the line currently being entered. .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. +A numeric argument, if supplied, specifies the history entry to use instead +of the current line. +.TP +.B +fetch\-history +With a numeric argument, fetch that entry from the history list +and make it the current line. +Without an argument, move back to the first entry in the history list. +.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. @@ -6355,12 +6561,6 @@ Perform history and alias expansion on the current line. .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. -A numeric argument, if supplied, specifies the history entry to use instead -of the current line. -.TP .B edit\-and\-execute\-command (C\-x C\-e) Invoke an editor on the current command line, and execute the result as shell commands. @@ -6735,6 +6935,11 @@ a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. .TP +.B spell\-correct\-word (C\-x s) +Perform spelling correction on the current word, treating it as a directory +or filename, in the same way as the \fBcdspell\fP shell option. +Word boundaries are the same as those used by \fBshell\-forward\-word\fP. +.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 @@ -7426,7 +7631,8 @@ does not contain a slash, filenames in .SM .B PATH are used to find the directory containing -.IR filename . +.IR filename , +but \fIfilename\fP does not need to be executable. The file searched for in .SM .B PATH @@ -7446,12 +7652,12 @@ 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. -If the \fB\-T\fP option is enabled, \fBsource\fP inherits any trap on +If the \fB\-T\fP option is enabled, \fB.\fP inherits any trap on \fBDEBUG\fP; if it is not, any \fBDEBUG\fP trap string is saved and -restored around the call to \fBsource\fP, and \fBsource\fP unsets the +restored around the call to \fB.\fP, and \fB.\fP unsets the \fBDEBUG\fP trap while it executes. If \fB\-T\fP is not set, and the sourced file changes -the \fBDEBUG\fP trap, the new value is retained when \fBsource\fP completes. +the \fBDEBUG\fP trap, the new value is retained when \fB.\fP completes. 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 @@ -7496,6 +7702,8 @@ or was started without job control. \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIreadline\-command\fP +.TP +\fBbind\fP \fIreadline-command-line\fP .PD Display current .B readline @@ -7504,7 +7712,9 @@ key and function bindings, bind a key sequence to a function or macro, or set a .B readline variable. -Each non-option argument is a command as it would appear in +Each non-option argument is a command as it would appear in a +.B readline +initialization file such as .IR .inputrc , but each binding or command must be passed as a separate argument; e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'. @@ -7577,6 +7787,11 @@ and .B READLINE_MARK variables to the current location of the insertion point and the saved insertion point (the mark), respectively. +The shell assigns any numeric argument the user supplied to the +.SM +.B READLINE_ARGUMENT +variable. +If there was no argument, that variable is not set. If the executed command changes the value of any of .SM .BR READLINE_LINE , @@ -7643,7 +7858,6 @@ if \fIdir\fP is not supplied, the value of the .SM .B HOME shell variable is the default. -Any additional arguments following \fIdir\fP are ignored. The variable .SM .B CDPATH @@ -7702,6 +7916,10 @@ is used, or if \fB\-\fP is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. +If the directory change is successful, \fBcd\fP sets the value of the +\fBPWD\fP environment variable to the new directory name, and sets the +\fBOLDPWD\fP environment variable to the value of the current working +directory before the change. The return value is true if the directory was successfully changed; false otherwise. .TP @@ -8335,7 +8553,11 @@ option means to load the new builtin command .I name from shared object .IR filename , -on systems that support dynamic loading. The +on systems that support dynamic loading. +Bash will use the value of the \fBBASH_LOADABLES_PATH\fP variable as a +colon-separated list of directories in which to search for \fIfilename\fP. +The default is system-dependent. +The .B \-d option will delete a builtin previously loaded with .BR \-f . @@ -8349,6 +8571,11 @@ 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. +If no options are supplied and a \fIname\fP is not a shell builtin, +\fBenable\fP will attempt to load \fIname\fP from a shared object named +\fIname\fP, as if the command were +.if t \f(CWenable \-f\fP \fIname name\fP . +.if n ``enable -f \fIname name\fP . The return value is 0 unless a .I name is not a shell builtin or there is an error loading a new builtin @@ -8780,8 +9007,9 @@ end of the history, and an index of \-1 refers to the current \fBhistory -d\fP command. .TP \fB\-d\fP \fIstart\fP\-\fIend\fP -Delete the history entries between positions \fIstart\fP and \fIend\fP, -inclusive. Positive and negative values for \fIstart\fP and \fIend\fP +Delete the range of history entries between positions \fIstart\fP and +\fIend\fP, inclusive. +Positive and negative values for \fIstart\fP and \fIend\fP are interpreted as described above. .TP .B \-a @@ -8829,7 +9057,7 @@ comment character followed immediately by a digit are interpreted as timestamps for the following history entry. 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 +\fIoffset\fP or range is supplied as an argument to \fB\-d\fP, or the history expansion supplied as an argument to \fB\-p\fP fails. .RE .TP @@ -9057,10 +9285,12 @@ argument is supplied, \fIarray\fP is invalid or unassignable, or if .RE .TP \fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP] -Removes entries from the directory stack. With no arguments, -removes the top directory from the stack, and performs a -.B cd -to the new top directory. +Removes entries from the directory stack. +The elements are numbered from 0 starting at the first directory +listed by \fBdirs\fP. +With no arguments, \fBpopd\fP +removes the top directory from the stack, and +changes to the new top directory. Arguments, if supplied, have the following meanings: .RS .PD 0 @@ -9073,7 +9303,8 @@ from the stack, so that only the stack is manipulated. Removes the \fIn\fPth entry counting from the left of the list shown by .BR dirs , -starting with zero. For example: +starting with zero, from the stack. +For example: .if n ``popd +0'' .if t \f(CWpopd +0\fP removes the first directory, @@ -9094,15 +9325,23 @@ removes the last directory, the next to last. .PD .PP -If the -.B popd -command is successful, a -.B dirs -is performed as well, and the return status is 0. +If the top element of the directory stack is modified, and +the \fI-n\fP option was not supplied, \fBpopd\fP uses the \fBcd\fP +builtin to change to the directory at the top of the stack. +If the \fBcd\fP fails, \fBpopd\fP returns a non-zero value. +.PP +Otherwise, .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. +is empty, or a non-existent directory stack entry is specified. +.PP +If the +.B popd +command is successful, +bash runs +.B dirs +to show the final contents of the directory stack, +and the return status is 0. .RE .TP \fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP] @@ -9131,6 +9370,10 @@ in the same way as \fBecho \-e\fP. causes \fBprintf\fP to output the corresponding \fIargument\fP in a format that can be reused as shell input. .TP +.B %Q +like \fB%q\fP, but applies any supplied precision to the \fIargument\fP +before quoting it. +.TP .B %(\fIdatefmt\fP)T causes \fBprintf\fP to output the date-time string resulting from using \fIdatefmt\fP as a format string for \fIstrftime\fP(3). @@ -9166,8 +9409,9 @@ The return value is zero on success, non-zero on failure. .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, \fBpushd\fP exchanges the top two directories -and returns 0, unless the directory stack is empty. +directory. +With no arguments, \fBpushd\fP exchanges the top two elements of +the directory stack. Arguments, if supplied, have the following meanings: .RS .PD 0 @@ -9192,26 +9436,28 @@ starting with zero) is at the top. .I dir Adds .I dir -to the directory stack at the top, making it the -new current working directory as if it had been supplied as the argument -to the \fBcd\fP builtin. +to the directory stack at the top .PD .PP +After the stack has been modified, if the \fB\-n\fP option was not +supplied, \fBpushd\fP uses the \fBcd\fP builtin to change to the +directory at the top of the stack. +If the \fBcd\fP fails, \fBpushd\fP returns a non-zero value. +.PP +Otherwise, if no arguments are supplied, +.B pushd +returns 0 unless the directory stack is empty. +When rotating the directory stack, +.B pushd +returns 0 unless the directory stack is empty or +a non-existent directory stack element is specified. +.PP If the .B pushd -command is successful, a +command is successful, +bash runs .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. +to show the final contents of the directory stack. .RE .TP \fBpwd\fP [\fB\-LP\fP] @@ -9331,8 +9577,10 @@ from regular files. If \fBread\fP times out, \fBread\fP saves any partial input read into the specified variable \fIname\fP. If \fItimeout\fP is 0, \fBread\fP returns immediately, without trying to -read any data. The exit status is 0 if input is available on -the specified file descriptor, non-zero otherwise. +read any data. +The exit status is 0 if input is available on the specified file descriptor, +or the read will return EOF, +non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded. .TP .B \-u \fIfd\fP @@ -9426,12 +9674,12 @@ function and not during execution of a script by \fB.\fP\^ or \fBsource\fP. Any command associated with the \fBRETURN\fP trap is executed before execution resumes after the function or script. .TP -\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...] +\fBset\fP [\fB\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...] .PD 0 .TP -\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fIarg\fP ...] +\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...] .PD -Without options, the name and value of each shell variable are displayed +Without options, display the name and value of each shell variable in a format that can be reused as input for setting or resetting the currently-set variables. Read-only variables cannot be reset. @@ -9705,12 +9953,18 @@ 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 \-r +Enable restricted shell mode. +This option cannot be unset once it has been set. +.TP 8 .B \-t Exit after reading and executing one command. .TP 8 .B \-u Treat unset variables and parameters other than the special -parameters "@" and "*" as an error when performing +parameters "@" and "*", +or array variables subscripted with "@" or "*", +as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero status. @@ -9961,6 +10215,8 @@ history is enabled, as described above under .B compat43 .TP 8 .B compat44 +.TP 8 +.B compat50 .PD These control aspects of the shell's compatibility mode (see @@ -10114,6 +10370,15 @@ and .BR B , and upper-case and lower-case ASCII characters will collate together. .TP 8 +.B globskipdots +If set, pathname expansion will never match the filenames +.B ``.'' +and +.BR ``..'' , +even if the pattern begins with a +.BR ``.'' . +This option is enabled by default. +.TP 8 .B globstar If set, the pattern \fB**\fP used in a pathname expansion context will match all files and zero or more directories and subdirectories. @@ -10236,6 +10501,13 @@ while executing \fBcase\fP or \fB[[\fP conditional commands, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion. .TP 8 +.B noexpand_translation +If set, +.B bash +encloses the translated results of $"..." quoting in single quotes +instead of double quotes. +If the string is not translated, this has no effect. +.TP 8 .B nullglob If set, .B bash @@ -10245,6 +10517,13 @@ files (see above) to expand to a null string, rather than themselves. .TP 8 +.B patsub_replacement +If set, \fBbash\fP +expands occurrences of \fB&\fP in the replacement string of pattern +substitution to the text matched by the pattern, as described +under \fBParameter Expansion\fP above. +This option is enabled by default. +.TP 8 .B progcomp If set, the programmable completion facilities (see \fBProgrammable Completion\fP above) are enabled. @@ -10265,7 +10544,8 @@ expansion, and quote removal after being expanded as described in 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 +The shell sets this option if it is started in restricted mode +(see .SM .B "RESTRICTED SHELL" below). @@ -10281,12 +10561,19 @@ number of positional parameters. .TP 8 .B sourcepath If set, the -\fBsource\fP (\fB.\fP) builtin uses the value of +\fB.\fP (\fBsource\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 varredir_close +If set, the shell automatically closes file descriptors assigned using the +\fI{varname}\fP redirection syntax (see +.SM +.B REDIRECTION +above) instead of leaving them open when the command completes. +.TP 8 .B xpg_echo If set, the \fBecho\fP builtin expands backslash-escape sequences by default. @@ -10392,8 +10679,13 @@ argument. Otherwise, the expression is false. .TP 4 arguments +The following conditions are applied in the order listed. If the first argument is \fB!\fP, the result is the negation of the three-argument expression composed of the remaining arguments. +the two-argument test using the second and third arguments. +If the first argument is exactly \fB(\fP and the fourth argument is +exactly \fB)\fP, the result is the two-argument test of the second +and third arguments. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above. .TP @@ -10843,7 +11135,7 @@ or are unset, they lose their special properties, even if they are subsequently reset. The exit status is true unless a .I name -is readonly. +is readonly or may not be unset. .TP \fBwait\fP [\fB\-fn\fP] [\fP\-p\fP \fIvarname\fP] [\fIid ...\fP] Wait for each specified child process and return its termination status. @@ -11076,6 +11368,16 @@ output that can be reused as input. Bash-5.1 suppresses that message when the \fB\-l\fP option is supplied. .RE .PD +.TP +\fBcompat51\fP +.PD 0 +.RS +.IP \(bu +The \fBunset\fP builtin treats attempts to unset array subscripts \fB@\fP +and \fB*\fP differently depending on whether the array is indexed or +associative, and differently than in previous versions. +.RE +.PD .\" bash_builtins .if \n(zZ=1 .ig zZ .SH "RESTRICTED SHELL" @@ -11160,7 +11462,7 @@ option to the builtin command .IP \(bu turning off restricted mode with -\fBset +r\fP or \fBset +o restricted\fP. +\fBset +r\fP or \fBshopt -u restricted_shell\fP. .PP These restrictions are enforced after any startup files are read. .PP @@ -11214,6 +11516,10 @@ The individual per-interactive-shell startup file .FN ~/.bash_logout The individual login shell cleanup file, executed when a login shell exits .TP +.FN ~/.bash_history +The default value of \fBHISTFILE\fP, the file in which bash saves the +command history +.TP .FN ~/.inputrc Individual \fIreadline\fP initialization file .PD @@ -11233,7 +11539,8 @@ make sure that it really is a bug, and that it appears in the latest version of .BR bash . The latest version is always available from -\fIftp://ftp.gnu.org/pub/gnu/bash/\fP. +\fIftp://ftp.gnu.org/pub/gnu/bash/\fP and +\fIhttp://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz\fP. .PP Once you have determined that a bug actually exists, use the .I bashbug diff --git a/doc/bash.html b/doc/bash.html index adb9e760..87259ee4 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -3,7 +3,7 @@ -
BASH(1)2020 October 29BASH(1) +BASH(1)2021 December 26BASH(1)

Index @@ -54,7 +54,7 @@ bash - GNU Bourne-Again SHell

COPYRIGHT

-Bash is Copyright © 1989-2020 by the Free Software Foundation, Inc. +Bash is Copyright © 1989-2021 by the Free Software Foundation, Inc.  

DESCRIPTION

@@ -368,7 +368,7 @@ An interactive shell is one started without non-option arguments and without the -c -option +option, whose standard input and error are both connected to terminals (as determined by isatty(3)), @@ -685,6 +685,7 @@ command (only in and do are valid):  

SHELL GRAMMAR

+This section describes the syntax of the various forms of shell commands.  

Simple Commands

@@ -711,29 +712,30 @@ The format for a pipeline is:

-[time [-p]] [ ! ] command [ [|||&] command2 ... ] +[time [-p]] [ ! ] command1 [ [|||&] command2 ... ]

The standard output of -command +command1 is connected via a pipe to the standard input of command2. This connection is performed before any redirections specified by the -command (see +command1(see + REDIRECTION below). -If |& is used, command's standard error, in addition to its +If |& is used, command1's standard error, in addition to its standard output, is connected to command2's standard input through the pipe; it is shorthand for 2>&1 |. This implicit redirection of the standard error to the standard output is -performed after any redirections specified by the command. +performed after any redirections specified by command1.

The return status of a pipeline is the exit status of the last @@ -785,14 +787,15 @@ variable may be used to specify the format of the time information.

-Each command in a pipeline is executed as a separate process (i.e., in a -subshell). +Each command in a pipeline is executed in a subshell, which is a +separate process. See COMMAND EXECUTION ENVIRONMENT -for a description of a subshell environment. +for a description of subshells and a subshell environment. If the lastpipe option is enabled using the shopt builtin (see the description of shopt below), -the last element of a pipeline may be run by the shell process. +the last element of a pipeline may be run by the shell process +when job control is not active.  

Lists

@@ -899,9 +902,9 @@ the rest of the command by one or more newlines, and may be followed by a newline in place of a semicolon.
(list)
-list is executed in a subshell environment (see +list is executed in a subshell (see COMMAND EXECUTION ENVIRONMENT -below). +below for a description of a subshell environment). 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 @@ -924,8 +927,12 @@ below under 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 -let "expression". +otherwise the return status is 1. +The expression +undergoes the same expansions +as if it were within double quotes, +but double quote characters in expression are not treated specially +and are removed.
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression. @@ -933,11 +940,12 @@ Expressions are composed of the primaries described below under CONDITIONAL EXPRESSIONS. -Word splitting and pathname expansion are not performed on the words -between the [[ and ]]; tilde expansion, -parameter and variable expansion, -arithmetic expansion, command substitution, process -substitution, and quote removal are performed. +The words between the [[ and ]] do not undergo word splitting +and pathname expansion. +The shell performs tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal on those words +(the expansions that would occur if the words were enclosed in double quotes). Conditional operators such as -f must be unquoted to be recognized as primaries.

@@ -980,12 +988,14 @@ If the shell option is enabled, the match is performed without regard to the case of alphabetic characters. -Any part of the pattern may be quoted to force the quoted portion -to be matched as a string. -Bracket expressions in regular expressions must be treated carefully, -since normal quoting characters lose their meanings between brackets. +If any part of the pattern is quoted, the quoted portion is matched literally. +This means every character in the quoted portion matches itself, +instead of having any special pattern matching meaning. If the pattern is stored in a shell variable, quoting the variable -expansion forces the entire pattern to be matched as a string. +expansion forces the entire pattern to be matched literally. +Treat bracket expressions in regular expressions carefully, +since normal quoting and pattern characters lose their meanings +between brackets.

@@ -1143,7 +1153,7 @@ expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution and quote removal. Each pattern examined is expanded using tilde expansion, parameter and variable expansion, arithmetic expansion, -command substitution, and process substitution. +command substitution, process substitution, and quote removal. If the nocasematch @@ -1203,7 +1213,7 @@ had been terminated with the & control operator, with a two-way pipe established between the executing shell and the coprocess.

-The format for a coprocess is: +The syntax for a coprocess is:

@@ -1213,10 +1223,35 @@ The format for a coprocess is:

This creates a coprocess named NAME. +command may be either a simple command or a compound +command (see above). +NAME is a shell variable name. If NAME is not supplied, the default name is COPROC. -NAME must not be supplied if command is a simple -command (see above); otherwise, it is interpreted as the first word -of the simple command. +

+ +The recommended form to use for a coprocess is +

+

+ +coproc NAME { command [redirections]; } +

+ +

+ +This form is recommended because simple commands result in the coprocess +always being named COPROC, and it is simpler to use and more complete +than the other compound commands. +

+ +If command is a compound command, NAME is optional. The +word following coproc determines whether that word is interpreted +as a variable name: it is interpreted as NAME if it is not a +reserved word that introduces a compound command. +If command is a simple command, NAME is not allowed; this +is to avoid confusion between NAME and the first word of the simple +command. +

+ When the coprocess is executed, the shell creates an array variable (see Arrays @@ -1241,6 +1276,8 @@ The file descriptors can be utilized as arguments to shell commands and redirections using standard word expansions. Other than those created to execute command and process substitutions, the file descriptors are not available in subshells. +

+ The process ID of the shell spawned to execute the coprocess is available as the value of the variable NAME_PID. The wait @@ -1269,9 +1306,9 @@ The body of the function is the compound command (see Compound Commands above). That command is usually a list of commands between { and }, but -may be any command listed under Compound Commands above, -with one exception: If the function reserved word is used, but the -parentheses are not supplied, the braces are required. +may be any command listed under Compound Commands above. +If the function reserved word is used, but the +parentheses are not supplied, the braces are recommended. compound-command is executed whenever fname is specified as the name of a simple command. When in posix mode, fname must be a valid shell name @@ -1425,10 +1462,11 @@ quotes (see below).

-Words of the form $aqstringaq are treated specially. The -word expands to string, with backslash-escaped characters replaced -as specified by the ANSI C standard. Backslash escape sequences, if -present, are decoded as follows: +Character sequences of the form $aqstringaq are treated +as a special variant of single quotes. +The sequence expands to string, with backslash-escaped characters +in string replaced as specified by the ANSI C standard. +Backslash escape sequences, if present, are decoded as follows:

@@ -1518,14 +1556,25 @@ not been present. A double-quoted string preceded by a dollar sign ($dqstringdq) will cause the string to be translated according to the current locale. -The gettext infrastructure performs the message catalog lookup and -translation, using the LC_MESSAGES and TEXTDOMAIN shell -variables. +The gettext infrastructure performs the lookup and +translation, using the LC_MESSAGES, TEXTDOMAINDIR, +and TEXTDOMAIN shell variables. If the current locale is C or POSIX, -or if there are no translations available, +if there are no translations available, +or if the string is not translated, the dollar sign is ignored. -If the string is translated and replaced, the replacement is -double-quoted. +This is a form of double quoting, so the string remains double-quoted +by default, whether or not it is translated and replaced. +If the noexpand_translation option is enabled +using the shopt builtin, +translated strings are single-quoted instead of double-quoted. +See the description of +shopt + +below under +SHELLBUILTINCOMMANDS. + +  

PARAMETERS

@@ -1605,11 +1654,7 @@ not used (see Arithmetic Expansion below). -Word splitting is not performed, with the exception -of "$@" as explained below under -Special Parameters. - -Pathname expansion is not performed. +Word splitting and pathname expansion are not performed. Assignment statements may also appear as arguments to the alias, @@ -1797,7 +1842,7 @@ option).
$
-Expands to the process ID of the shell. In a () subshell, it +Expands to the process ID of the shell. In a subshell, it expands to the process ID of the current shell, not the subshell.
! @@ -2445,6 +2490,18 @@ If is unset, it loses its special properties, even if it is subsequently reset. +
READLINE_ARGUMENT + +
+Any numeric argument given to a Readline command that was defined using +bind -x + +(see +SHELL BUILTIN COMMANDS + + +below) +when it was invoked.
READLINE_LINE
@@ -2500,15 +2557,15 @@ builtin command when no arguments are supplied.
Each time this parameter is -referenced, the number of seconds since shell invocation is returned. If a -value is assigned to +referenced, it expands to the number of seconds since shell invocation. +If a value is assigned to SECONDS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned. -The number of seconds at shell invocation and the current time is always +The number of seconds at shell invocation and the current time are always determined by querying the system clock. If SECONDS @@ -3509,9 +3566,15 @@ destroys the array element at index subscript, for both indexed and associative arrays. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. -unset name, where name is an array, or +unset name, where name is an array, +removes the entire array. unset name[subscript], where -subscript is * or @, removes the entire array. +subscript is * or @, behaves differently depending on +whether name is an indexed or associative array. +If name is an associative array, this unsets the element with +subscript * or @. +If name is an indexed array, unset removes all of the elements but +does not remove the array itself.

When using a variable name with a subscript as an argument to a command, @@ -3635,7 +3698,7 @@ For example, a{d,c,b}e expands into `ade ace abe'. A sequence expression takes the form {x..y[..incr]}, -where x and y are either integers or single characters, +where x and y are either integers or single letters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x and y, inclusive. @@ -3644,10 +3707,11 @@ same width. When either x or y begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. -When characters are supplied, the expression expands to each character +When letters are supplied, the expression expands to each character lexicographically between x and y, inclusive, using the default C locale. -Note that both x and y must be of the same type. +Note that both x and y must be of the same type +(integer or letter). When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.

@@ -4122,23 +4186,47 @@ or the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

${parameter/pattern/string}
+ +
${parameter//pattern/string}
+
${parameter/#pattern/string}
+
${parameter/%pattern/string}
+ Pattern substitution. The pattern is expanded to produce a pattern just as in -pathname expansion, +pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. +string undergoes tilde expansion, parameter and variable expansion, +arithmetic expansion, command and process substitution, and quote removal. The match is performed using the rules described under Pattern Matching below. -If pattern begins with /, all matches of pattern are -replaced with string. Normally only the first match is replaced. -If pattern begins with #, it must match at the beginning -of the expanded value of parameter. -If pattern begins with %, it must match at the end -of the expanded value of parameter. -If string is null, matches of pattern are deleted +In the first form above, only the first match is replaced. +If there are two slashes separating parameter and pattern +(the second form above), all matches of pattern are +replaced with string. +If pattern is preceded by # (the third form above), +it must match at the beginning of the expanded value of parameter. +If pattern is preceded by % (the fourth form above), +it must match at the end of the expanded value of parameter. +If the expansion of string is null, +matches of pattern are deleted. +If string is null, +matches of pattern are deleted and the / following pattern may be omitted. +If the patsub_replacement shell option is enabled using shopt, +any unquoted instances of & in string are replaced with the +matching portion of pattern. +Backslash is used to quote & in string; the backslash is removed +in order to permit a literal & in the replacement string. +Users should take care +if string is double-quoted to avoid unwanted interactions between +the backslash and double-quoting. +Pattern substitution performs the check for & after expanding +string; shell programmers should quote backslashes intended to escape +the & and inhibit replacement so they survive any quote removal +performed by the expansion of string. If the nocasematch @@ -4266,6 +4354,11 @@ indexed and associative arrays as a sequence of quoted key-value pairs
The expansion is a string consisting of flag values representing parameter's attributes. +
k + +
+Like the K transformation, but expands the keys and values of +indexed and associative arrays to separate words after word splitting.

@@ -4364,8 +4457,10 @@ and the substitution of the result. The format for arithmetic expansion is: The expression -is treated as if it were within double quotes, but a double quote -inside the parentheses is not treated specially. +undergoes the same expansions +as if it were within double quotes, +but double quote characters in expression are not treated specially +and are removed. All tokens in the expression undergo parameter and variable expansion, command substitution, and quote removal. The result is treated as the arithmetic expression to be evaluated. @@ -4575,17 +4670,30 @@ must be matched explicitly, unless the shell option dotglob is set. -The filenames +In order to match the filenames +``.'' + +and +``..'', + +the pattern must begin with ``.'' (for example, ``.?''), +even if +dotglob + +is set. +If the +globskipdots + +shell option is enabled, the filenames ``.'' and ``..'' -must always be matched explicitly, even if -dotglob +are never matched, even if the pattern begins with a +``.''. -is set. -In other cases, the +When not matching pathnames, the ``.'' character is not treated specially. @@ -4608,6 +4716,8 @@ for a description of the nullglob, +globskipdots, + failglob, and @@ -4827,7 +4937,7 @@ the syntax [.symbol.] matches the collating symbol

If the extglob shell option is enabled using the shopt -builtin, several extended pattern matching operators are recognized. +builtin, the shell recognizes several extended pattern matching operators. In the following description, a pattern-list is a list of one or more patterns separated by a |. Composite patterns may be formed using one or more of the following @@ -4851,6 +4961,17 @@ Matches anything except one of the given patterns

+When matching filenames, the dotglob shell option determines +the set of filenames that are tested: +when dotglob is enabled, the set of filenames includes all files +beginning with ``.'', but ``.'' and ``..'' must be matched by a +pattern or sub-pattern that begins with a dot; +when it is disabled, the set does not +include any filenames beginning with ``.'' unless the pattern +or sub-pattern begins with a ``.''. +As above, ``.'' only has a special meaning when matching filenames. +

+ Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings contain multiple matches. @@ -4875,7 +4996,7 @@ may be redirected using a special notation interpreted by the shell. -Redirection allows commands' file handles to be +Redirection allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. @@ -4902,7 +5023,8 @@ by {varname}, the value of varname defines the file descriptor to close. If {varname} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor himself. +the file descriptor's lifetime manually. +The varredir_close shell option manages this behavior.

In the following descriptions, if the file descriptor number is @@ -5448,7 +5570,7 @@ command.

There is no mechanism for using arguments in the replacement text. -If arguments are needed, a shell function should be used (see +If arguments are needed, use a shell function (see FUNCTIONS @@ -5650,7 +5772,8 @@ or will list the function names only (and optionally the source file and line number, if the extdebug shell option is enabled). -Functions may be exported so that subshells +Functions may be exported so that child shell processes +(those created when executing a separate shell invocation) automatically have them defined with the -f @@ -6054,7 +6177,11 @@ and quote removal before being assigned to the variable.

If no command name results, the variable assignments affect the current -shell environment. Otherwise, the variables are added to the environment +shell environment. +In the case of such a command (one that consists only of assignment +statements and redirections), assignment statements are performed before +redirections. +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. @@ -6134,8 +6261,10 @@ to the command are set to the arguments given, if any. 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 shell script, a file -containing shell commands. A subshell is spawned to execute -it. This subshell reinitializes itself, so +containing shell commands, and the shell creates a +new instance of itself +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 @@ -6199,8 +6328,8 @@ of $$, and the value of 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. +the following. +Unless otherwise noted, the values are inherited from the shell.

*
@@ -6223,6 +6352,9 @@ A command invoked in this separate environment cannot affect the shell's execution environment.

+A subshell is a copy of the shell process. +

+ Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, @@ -6354,6 +6486,10 @@ All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments.

+The exit status of the last command is available in the special +parameter $?. +

+ Bash 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 exit builtin @@ -6475,6 +6611,79 @@ When bash is waiting for an asynchronous command via the wait builtin, the reception of a signal for which a trap has been set will cause the wait builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. +

+ +When job control is not enabled, and bash is waiting for a foreground +command to complete, the shell receives keyboard-generated signals +such as +SIGINT + + +(usually generated by ^C) that users commonly intend to send +to that command. +This happens because the shell and the command are in the +same process group as the terminal, and ^C sends +SIGINT + + +to all processes in that process group. +

+ +When bash is running without job control enabled and receives +SIGINT + + +while waiting for a foreground command, it waits until that foreground +command terminates and then decides what to do about the +SIGINT: + + +

+
1.
+If the command terminates due to the +SIGINT, + + +bash concludes +that the user meant to end the entire script, and acts on the +SIGINT + + +(e.g., by running a +SIGINT + + +trap or exiting itself); +
2.
+If the command does not terminate due to +SIGINT, + + +the program handled the +SIGINT + + +itself and did not treat it as a fatal signal. +In that case, bash does not treat +SIGINT + + +as a fatal signal, either, instead assuming that the +SIGINT + + +was used as part of the program's normal operation +(e.g., emacs uses it to abort editing +commands) or deliberately discarded. +However, bash will run any +trap set on +SIGINT, + + +as it does with any other trapped signal it +receives while it is waiting for the foreground command to +complete, for compatibility. +
 

JOB CONTROL

@@ -6832,7 +7041,8 @@ the release of bash, version + patch level (e.g., 2.00.0)
\w
-the current working directory, with +the value of the PWD shell variable ($PWD), +with $HOME @@ -6845,7 +7055,8 @@ variable)
\W
-the basename of the current working directory, with +the basename of $PWD, +with $HOME @@ -7341,6 +7552,9 @@ If set to On, when listing completions, readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. +If there is a color definition in $LS_COLORS for the custom suffix +"readline-colored-completion-prefix", readline uses this color for +the common prefix instead of its default.
colored-stats (Off)
@@ -7400,6 +7614,8 @@ If the number of possible completions is greater than or equal to the value of this variable, readline will ask whether or not the user wishes to view them; otherwise they are simply listed on the terminal. +A zero value means readline should never ask; negative values are +treated as zero.
convert-meta (On)
@@ -7445,6 +7661,18 @@ backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. +
enable-active-region (On) + +
+The point is the current cursor position, and mark refers +to a saved cursor position. +The text between the point and mark is referred to as the region. +When this variable is set to On, readline allows certain commands +to designate the region as active. +When the region is active, readline highlights the text in the region using +the terminal's standout mode. +The active region shows the text inserted by bracketed-paste and any +matching text found by incremental and non-incremental history searches.
enable-bracketed-paste (On)
@@ -7956,6 +8184,19 @@ Move to the first line in the history.
Move to the end of the input history, i.e., the line currently being entered. +
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. +A numeric argument, if supplied, specifies the history entry to use instead +of the current line. +
fetch-history + +
+With a numeric argument, fetch that entry from the history list +and make it the current line. +Without an argument, move back to the first entry in the history list.
reverse-search-history (C-r)
@@ -8075,13 +8316,6 @@ Perform history and alias expansion on the current line.
A synonym for yank-last-arg. -
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. -A numeric argument, if supplied, specifies the history entry to use instead -of the current line.
edit-and-execute-command (C-x C-e)
@@ -8563,6 +8797,12 @@ The default value of a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. +
spell-correct-word (C-x s) + +
+Perform spelling correction on the current word, treating it as a directory +or filename, in the same way as the cdspell shell option. +Word boundaries are the same as those used by shell-forward-word.
glob-complete-word (M-g)
@@ -9445,8 +9685,9 @@ does not contain a slash, filenames in are used to find the directory containing -filename. +filename, +but filename does not need to be executable. The file searched for in PATH @@ -9471,12 +9712,12 @@ is not searched. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. -If the -T option is enabled, source inherits any trap on +If the -T option is enabled, . inherits any trap on DEBUG; if it is not, any DEBUG trap string is saved and -restored around the call to source, and source unsets the +restored around the call to ., and . unsets the DEBUG trap while it executes. If -T is not set, and the sourced file changes -the DEBUG trap, the new value is retained when source completes. +the DEBUG trap, the new value is retained when . completes. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename @@ -9519,6 +9760,7 @@ or was started without job control.
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command
+
bind readline-command-line
Display current readline @@ -9530,7 +9772,10 @@ function or macro, or set a readline variable. -Each non-option argument is a command as it would appear in +Each non-option argument is a command as it would appear in a +readline + +initialization file such as .inputrc, but each binding or command must be passed as a separate argument; @@ -9624,6 +9869,12 @@ and variables to the current location of the insertion point and the saved insertion point (the mark), respectively. +The shell assigns any numeric argument the user supplied to the +READLINE_ARGUMENT + + +variable. +If there was no argument, that variable is not set. If the executed command changes the value of any of READLINE_LINE, @@ -9702,7 +9953,6 @@ if dir is not supplied, the value of the shell variable is the default. -Any additional arguments following dir are ignored. The variable CDPATH @@ -9777,6 +10027,10 @@ is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. +If the directory change is successful, cd sets the value of the +PWD environment variable to the new directory name, and sets the +OLDPWD environment variable to the value of the current working +directory before the change. The return value is true if the directory was successfully changed; false otherwise.
command [-pVv] command [arg ...]
@@ -10538,7 +10792,11 @@ option means to load the new builtin command from shared object filename, -on systems that support dynamic loading. The +on systems that support dynamic loading. +Bash will use the value of the BASH_LOADABLES_PATH variable as a +colon-separated list of directories in which to search for filename. +The default is system-dependent. +The -d option will delete a builtin previously loaded with @@ -10555,6 +10813,11 @@ If -a is supplied, the list printed includes all builtins, with an indication of whether or not each is enabled. If -s is supplied, the output is restricted to the POSIX special builtins. +If no options are supplied and a name is not a shell builtin, +enable will attempt to load name from a shared object named +name, as if the command were +enable -f name name . + The return value is 0 unless a name @@ -11080,8 +11343,9 @@ than the last history position, so negative indices count back from the end of the history, and an index of -1 refers to the current history -d command.
-d start-end
-Delete the history entries between positions start and end, -inclusive. Positive and negative values for start and end +Delete the range of history entries between positions start and +end, inclusive. +Positive and negative values for start and end are interpreted as described above.
-a @@ -11140,7 +11404,7 @@ comment character followed immediately by a digit are interpreted as timestamps for the following history entry. The return value is 0 unless an invalid option is encountered, an error occurs while reading or writing the history file, an invalid -offset is supplied as an argument to -d, or the +offset or range is supplied as an argument to -d, or the history expansion supplied as an argument to -p fails.
@@ -11433,11 +11697,12 @@ argument is supplied, array is invalid or unassignable, or if
popd [-n] [+n] [-n]
-Removes entries from the directory stack. With no arguments, -removes the top directory from the stack, and performs a -cd - -to the new top directory. +Removes entries from the directory stack. +The elements are numbered from 0 starting at the first directory +listed by dirs. +With no arguments, popd +removes the top directory from the stack, and +changes to the new top directory. Arguments, if supplied, have the following meanings:
@@ -11452,7 +11717,8 @@ Removes the nth entry counting from the left of the list shown by dirs, -starting with zero. For example: +starting with zero, from the stack. +For example: popd +0 removes the first directory, @@ -11475,18 +11741,28 @@ the next to last.

-If the -popd +If the top element of the directory stack is modified, and +the -n option was not supplied, popd uses the cd +builtin to change to the directory at the top of the stack. +If the cd fails, popd returns a non-zero value. +

-command is successful, a -dirs - -is performed as well, and the return status is 0. +Otherwise, 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. +is empty, or a non-existent directory stack entry is specified. +

+ +If the +popd + +command is successful, +bash runs +dirs + +to show the final contents of the directory stack, +and the return status is 0.

printf [-v var] format [arguments]
@@ -11517,6 +11793,11 @@ in the same way as echo -e.
causes printf to output the corresponding argument in a format that can be reused as shell input. +
%Q + +
+like %q, but applies any supplied precision to the argument +before quoting it.
%(datefmt)T
@@ -11557,8 +11838,9 @@ The return value is zero on success, non-zero on failure. 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, pushd exchanges the top two directories -and returns 0, unless the directory stack is empty. +directory. +With no arguments, pushd exchanges the top two elements of +the directory stack. Arguments, if supplied, have the following meanings:
@@ -11587,33 +11869,36 @@ starting with zero) is at the top. Adds dir -to the directory stack at the top, making it the -new current working directory as if it had been supplied as the argument -to the cd builtin. +to the directory stack at the top

+After the stack has been modified, if the -n option was not +supplied, pushd uses the cd builtin to change to the +directory at the top of the stack. +If the cd fails, pushd returns a non-zero value. +

+ +Otherwise, if no arguments are supplied, +pushd + +returns 0 unless the directory stack is empty. +When rotating the directory stack, +pushd + +returns 0 unless the directory stack is empty or +a non-existent directory stack element is specified. +

+ If the pushd -command is successful, a +command is successful, +bash runs dirs -is performed as well. -If the first form is used, -pushd - -returns 0 unless the cd to -dir - -fails. With the second form, -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. +to show the final contents of the directory stack.

pwd [-LP]
@@ -11756,8 +12041,10 @@ from regular files. If read times out, read saves any partial input read into the specified variable name. If timeout is 0, read returns immediately, without trying to -read any data. The exit status is 0 if input is available on -the specified file descriptor, non-zero otherwise. +read any data. +The exit status is 0 if input is available on the specified file descriptor, +or the read will return EOF, +non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded.
-u fd @@ -11871,11 +12158,11 @@ is used outside a function and not during execution of a script by . or source. Any command associated with the RETURN trap is executed before execution resumes after the function or script. -
set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
+
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
-
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
+
set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [arg ...]
-Without options, the name and value of each shell variable are displayed +Without options, display the name and value of each shell variable in a format that can be reused as input for setting or resetting the currently-set variables. Read-only variables cannot be reset. @@ -12238,6 +12525,11 @@ If the -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. +
-r + +
+Enable restricted shell mode. +This option cannot be unset once it has been set.
-t
@@ -12246,7 +12538,9 @@ Exit after reading and executing one command.
Treat unset variables and parameters other than the special -parameters "@" and "*" as an error when performing +parameters "@" and "*", +or array variables subscripted with "@" or "*", +as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero status. @@ -12572,6 +12866,9 @@ history is enabled, as described above under
compat44 +
+
compat50 +
These control aspects of the shell's compatibility mode @@ -12765,6 +13062,19 @@ and B, and upper-case and lower-case ASCII characters will collate together. +
globskipdots + +
+If set, pathname expansion will never match the filenames +``.'' + +and +``..'', + +even if the pattern begins with a +``.''. + +This option is enabled by default.
globstar
@@ -12922,6 +13232,15 @@ matches patterns in a case-insensitive fashion when performing matching while executing case or [[ conditional commands, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion. +
noexpand_translation + +
+If set, +bash + +encloses the translated results of $"..." quoting in single quotes +instead of double quotes. +If the string is not translated, this has no effect.
nullglob
@@ -12934,6 +13253,14 @@ files (see above) to expand to a null string, rather than themselves. +
patsub_replacement + +
+If set, bash +expands occurrences of & in the replacement string of pattern +substitution to the text matched by the pattern, as described +under Parameter Expansion above. +This option is enabled by default.
progcomp
@@ -12960,7 +13287,8 @@ above. This option is enabled by default.
restricted_shell
-The shell sets this option if it is started in restricted mode (see +The shell sets this option if it is started in restricted mode +(see RESTRICTED SHELL @@ -12980,12 +13308,21 @@ number of positional parameters.
If set, the -source (.) builtin uses the value of +. (source) builtin uses the value of PATH to find the directory containing the file supplied as an argument. This option is enabled by default. +
varredir_close + +
+If set, the shell automatically closes file descriptors assigned using the +{varname} redirection syntax (see +REDIRECTION + + +above) instead of leaving them open when the command completes.
xpg_echo
@@ -13104,8 +13441,13 @@ exactly ), the result is the one-argument test of the second argument. Otherwise, the expression is false.
4 arguments
+The following conditions are applied in the order listed. If the first argument is !, the result is the negation of the three-argument expression composed of the remaining arguments. +the two-argument test using the second and third arguments. +If the first argument is exactly ( and the fourth argument is +exactly ), the result is the two-argument test of the second +and third arguments. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above.
5 or more arguments
@@ -13696,7 +14038,7 @@ are unset, they lose their special properties, even if they are subsequently reset. The exit status is true unless a name -is readonly. +is readonly or may not be unset.
wait [-fn] [-p varname] [id ...]
Wait for each specified child process and return its termination status. Each @@ -13963,6 +14305,17 @@ when the -l option is supplied. +
compat51
+ +
+
+
*
+The unset builtin treats attempts to unset array subscripts @ +and * differently depending on whether the array is indexed or +associative, and differently than in previous versions. +
+ + @@ -14074,7 +14427,7 @@ option to the builtin command
*
turning off restricted mode with -set +r or set +o restricted. +set +r or shopt -u restricted_shell.

@@ -14143,6 +14496,12 @@ The individual per-interactive-shell startup file

The individual login shell cleanup file, executed when a login shell exits
+~/.bash_history + +
+The default value of HISTFILE, the file in which bash saves the +command history +
~/.inputrc
@@ -14174,7 +14533,8 @@ version of bash. The latest version is always available from -ftp://ftp.gnu.org/pub/gnu/bash/. +ftp://ftp.gnu.org/pub/gnu/bash/ and +http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

Once you have determined that a bug actually exists, use the @@ -14257,7 +14617,7 @@ There may be only one active coprocess at a time.


-
GNU Bash 5.12020 October 29BASH(1) +GNU Bash 5.22021 December 26BASH(1)

@@ -14363,7 +14723,7 @@ There may be only one active coprocess at a time.
BUGS

-This document was created by man2html from bash.1.
-Time: 18 November 2020 15:13:09 EST +This document was created by man2html from /usr/local/src/bash/bash-20220105/doc/bash.1.
+Time: 11 January 2022 15:02:14 EST diff --git a/doc/bash.info b/doc/bash.info index 2fd137a9..a090315c 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -1,13 +1,12 @@ -This is bash.info, produced by makeinfo version 6.7 from -bashref.texi. +This is bash.info, produced by makeinfo version 6.8 from bashref.texi. This text is a brief description of the features that are present in the -Bash shell (version 5.1, 29 October 2020). +Bash shell (version 5.2, 26 December 2021). - This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.1. + This is Edition 5.2, last updated 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -27,11 +26,11 @@ Bash Features ************* This text is a brief description of the features that are present in the -Bash shell (version 5.1, 29 October 2020). The Bash home page is +Bash shell (version 5.2, 26 December 2021). The Bash home page is . - This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.1. + This is Edition 5.2, last updated 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. Bash contains features that appear in other popular shells, and some features that only appear in Bash. Some of the shells that Bash has @@ -359,11 +358,11 @@ as such, and to prevent parameter expansion. Each of the shell metacharacters (*note 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 (*note -History Interaction::), the HISTORY EXPANSION character, usually '!', +History Interaction::), the "history expansion" character, usually '!', must be quoted to prevent history expansion. *Note Bash History Facilities::, for more details concerning history expansion. - There are three quoting mechanisms: the ESCAPE CHARACTER, single + There are three quoting mechanisms: the "escape character", single quotes, and double quotes.  @@ -419,10 +418,11 @@ File: bash.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double 3.1.2.4 ANSI-C Quoting ...................... -Words of the form '$'STRING'' are treated specially. The word expands -to STRING, with backslash-escaped characters replaced as specified by -the ANSI C standard. Backslash escape sequences, if present, are -decoded as follows: +Character sequences of the form $'STRING' are treated as a special kind +of single quotes. The sequence expands to STRING, with +backslash-escaped characters in STRING replaced as specified by the ANSI +C standard. Backslash escape sequences, if present, are decoded as +follows: '\a' alert (bell) @@ -473,22 +473,114 @@ File: bash.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting 3.1.2.5 Locale-Specific Translation ................................... -A double-quoted string preceded by a dollar sign ('$') will cause the -string to be translated according to the current locale. The GETTEXT -infrastructure performs the message catalog lookup and translation, -using the 'LC_MESSAGES' and 'TEXTDOMAIN' shell variables, as explained -below. See the gettext documentation for additional details. If the -current locale is 'C' or 'POSIX', or if there are no translations -available, the dollar sign is ignored. If the string is translated and -replaced, the replacement is double-quoted. +* Menu: - Some systems use the message catalog selected by the 'LC_MESSAGES' -shell variable. Others create the name of the message catalog from the -value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of -'.mo'. If you use the 'TEXTDOMAIN' variable, you may need to set the -'TEXTDOMAINDIR' variable to the location of the message catalog files. -Still others use both variables in this fashion: -'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo. +* Creating Internationalized Scripts:: How to use translations and different + languages in your scripts. + +Prefixing a double-quoted string with a dollar sign ('$'), such as +$"hello, world", will cause the string to be translated according to the +current locale. The 'gettext' infrastructure performs the lookup and +translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN' +shell variables, as explained below. See the gettext documentation for +additional details not covered here. If the current locale is 'C' or +'POSIX', if there are no translations available, of if the string is not +translated, the dollar sign is ignored. Since this is a form of double +quoting, the string remains double-quoted by default, whether or not it +is translated and replaced. If the 'noexpand_translation' option is +enabled using the 'shopt' builtin (*note The Shopt Builtin::), +translated strings are single-quoted instead of double-quoted. + + The rest of this section is a brief overview of how you use gettext +to create translations for strings in a shell script named SCRIPTNAME. +There are more details in the gettext documentation. + + +File: bash.info, Node: Creating Internationalized Scripts, Up: Locale Translation + +Once you've marked the strings in your script that you want to translate +using $"...", you create a gettext "template" file using the command + + bash --dump-po-strings SCRIPTNAME > DOMAIN.pot + +The DOMAIN is your "message domain". It's just an arbitrary string +that's used to identify the files gettext needs, like a package or +script name. It needs to be unique among all the message domains on +systems where you install the translations, so gettext knows which +translations correspond to your script. You'll use the template file to +create translations for each target language. The template file +conventionally has the suffix '.pot'. + + You copy this template file to a separate file for each target +language you want to support (called "PO" files, which use the suffix +'.po'). PO files use various naming conventions, but when you are +working to translate a template file into a particular language, you +first copy the template file to a file whose name is the language you +want to target, with the '.po' suffix. For instance, the Spanish +translations of your strings would be in a file named 'es.po', and to +get started using a message domain named "example," you would run + + cp example.pot es.po + +Ultimately, PO files are often named DOMAIN.po and installed in +directories that contain multiple translation files for a particular +language. + + Whichever naming convention you choose, you will need to translate +the strings in the PO files into the appropriate languages. This has to +be done manually. + + When you have the translations and PO files complete, you'll use the +gettext tools to produce what are called "MO" files, which are compiled +versions of the PO files the gettext tools use to look up translations +efficiently. MO files are also called "message catalog" files. You use +the 'msgfmt' program to do this. For instance, if you had a file with +Spanish translations, you could run + + msgfmt -o es.mo es.po + +to produce the corresponding MO file. + + Once you have the MO files, you decide where to install them and use +the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +are. Make sure to use the same message domain to name the MO files as +you did for the PO files when you install them. + + Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to +select the desired language. + + You set the 'TEXTDOMAIN' variable to the script's message domain. As +above, you use the message domain to name your translation files. + + You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the +name of a directory where the message catalog files are stored. If you +install the message files into the system's standard message catalog +directory, you don't need to worry about this variable. + + The directory where the message catalog files are stored varies +between systems. Some use the message catalog selected by the +'LC_MESSAGES' shell variable. Others create the name of the message +catalog from the value of the 'TEXTDOMAIN' shell variable, possibly +adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may +need to set the 'TEXTDOMAINDIR' variable to the location of the message +catalog files, as above. It's common to use both variables in this +fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. + + If you used that last convention, and you wanted to store the message +catalog files with Spanish (es) and Esperanto (eo) translations into a +local directory you use for custom translation files, you could run + + TEXTDOMAIN=example + TEXTDOMAINDIR=/usr/local/share/locale + + cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo + cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo + + When all of this is done, and the message catalog files containing +the compiled translations are installed in the correct location, your +users will be able to see translated strings in any of the supported +languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +before running your script.  File: bash.info, Node: Comments, Prev: Quoting, Up: Shell Syntax @@ -582,13 +674,13 @@ the control operators '|' or '|&'. The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command's output. This connection is performed before any redirections -specified by the command. +specified by COMMAND1. If '|&' is used, COMMAND1's standard error, in addition to its standard output, is connected to COMMAND2's standard input through the pipe; it is shorthand for '2>&1 |'. This implicit redirection of the standard error to the standard output is performed after any -redirections specified by the command. +redirections specified by COMMAND1. The reserved word 'time' causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of @@ -612,11 +704,11 @@ information. If the pipeline is not executed asynchronously (*note Lists::), the shell waits for all commands in the pipeline to complete. - Each command in a pipeline is executed in its own subshell, which is -a separate process (*note Command Execution Environment::). If the + Each command in a pipeline is executed in its own "subshell", which +is a separate process (*note Command Execution Environment::). If the 'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt Builtin::), the last element of a pipeline may be run by the shell -process. +process when job control is not active. The exit status of a pipeline is the exit status of the last command in the pipeline, unless the 'pipefail' option is enabled (*note The Set @@ -645,8 +737,8 @@ commands, equivalent to a semicolon. If a command is terminated by the control operator '&', the shell executes the command asynchronously in a subshell. This is known as -executing the command in the BACKGROUND, and these are referred to as -ASYNCHRONOUS commands. The shell does not wait for the command to +executing the command in the "background", and these are referred to as +"asynchronous" commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (*note Job Control::), the standard input for asynchronous commands, in the absence of any explicit redirections, is redirected @@ -814,7 +906,8 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: substitution, arithmetic expansion, and quote removal (*note Shell Parameter Expansion::) before matching is attempted. Each PATTERN undergoes tilde expansion, parameter expansion, command - substitution, and arithmetic expansion. + substitution, arithmetic expansion, process substitution, and quote + removal. There may be an arbitrary number of 'case' clauses, each terminated by a ';;', ';&', or ';;&'. The first pattern that matches @@ -883,11 +976,11 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: (( EXPRESSION )) The arithmetic EXPRESSION is evaluated according to the rules - described below (*note 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 - let "EXPRESSION" - *Note Bash Builtins::, for a full description of the 'let' builtin. + described below (*note Shell Arithmetic::). The EXPRESSION + undergoes the same expansions as if it were within double quotes, + but double quote characters in EXPRESSION are not treated specially + are removed. If the value of the expression is non-zero, the + return status is 0; otherwise the return status is 1. '[[...]]' [[ EXPRESSION ]] @@ -895,12 +988,13 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Return a status of 0 or 1 depending on the evaluation of the conditional expression EXPRESSION. Expressions are composed of the primaries described below in *note Bash Conditional Expressions::. - Word splitting and filename expansion are not performed on the - words between the '[[' and ']]'; tilde expansion, parameter and - variable expansion, arithmetic expansion, command substitution, - process substitution, and quote removal are performed. Conditional - operators such as '-f' must be unquoted to be recognized as - primaries. + The words between the '[[' and ']]' do not undergo word splitting + and filename expansion. The shell performs tilde expansion, + parameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal on those + words (the expansions that would occur if the words were enclosed + in double quotes). Conditional operators such as '-f' must be + unquoted to be recognized as primaries. When used with '[[', the '<' and '>' operators sort lexicographically using the current locale. @@ -913,67 +1007,92 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: 'shopt' in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. The return value is 0 if the string matches ('==') or does not match - ('!=') the pattern, and 1 otherwise. Any part of the pattern may - be quoted to force the quoted portion to be matched as a string. + ('!=') the pattern, and 1 otherwise. + + If you quote any part of the pattern, using any of the shell's + quoting mechanisms, the quoted portion is matched literally. This + means every character in the quoted portion matches itself, instead + of having any special pattern matching meaning. An additional binary operator, '=~', is available, with the same - precedence as '==' and '!='. When it is used, the string to the + precedence as '==' and '!='. When you use '=~', the string to the right of the operator is considered a POSIX extended regular - expression and matched accordingly (using the POSIX 'regcomp' and - 'regexec' interfaces usually described in regex(3)). The return - value is 0 if the string matches the pattern, and 1 otherwise. If - the regular expression is syntactically incorrect, the conditional - expression's return value is 2. If the 'nocasematch' shell option - (see the description of 'shopt' in *note The Shopt Builtin::) is - enabled, the match is performed without regard to the case of - alphabetic characters. Any part of the pattern may be quoted to - force the quoted portion to be matched as a string. Bracket - expressions in regular expressions must be treated carefully, since - normal quoting characters lose their meanings between brackets. If - the pattern is stored in a shell variable, quoting the variable - expansion forces the entire pattern to be matched as a string. + expression pattern and matched accordingly (using the POSIX + 'regcomp' and 'regexec' interfaces usually described in regex(3)). + The return value is 0 if the string matches the pattern, and 1 if + it does not. If the regular expression is syntactically incorrect, + the conditional expression returns 2. If the 'nocasematch' shell + option (see the description of 'shopt' in *note The Shopt + Builtin::) is enabled, the match is performed without regard to the + case of alphabetic characters. - The pattern will match if it matches any part of the string. - Anchor the pattern using the '^' and '$' regular expression - operators to force it to match the entire string. The array - variable 'BASH_REMATCH' records which parts of the string matched - the pattern. The element of 'BASH_REMATCH' with index 0 contains - the portion of the string matching the entire regular expression. - Substrings matched by parenthesized subexpressions within the - regular expression are saved in the remaining 'BASH_REMATCH' - indices. The element of 'BASH_REMATCH' with index N is the portion - of the string matching the Nth parenthesized subexpression. + You can quote any part of the pattern to force the quoted portion + to be matched literally instead of as a regular expression (see + above). If the pattern is stored in a shell variable, quoting the + variable expansion forces the entire pattern to be matched + literally. + + The pattern will match if it matches any part of the string. If + you want to force the pattern to match the entire string, anchor + the pattern using the '^' and '$' regular expression operators. For example, the following will match a line (stored in the shell - variable LINE) if there is a sequence of characters anywhere in the - value consisting of any number, including zero, of characters in - the 'space' character class, zero or one instances of 'a', then a - 'b': + variable 'line') if there is a sequence of characters anywhere in + the value consisting of any number, including zero, of characters + in the 'space' character class, immediately followed by zero or one + instances of 'a', then a 'b': + [[ $line =~ [[:space:]]*(a)?b ]] - That means values like 'aab' and ' aaaaaab' will match, as will a - line containing a 'b' anywhere in its value. + That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and ' + ab' will all match, as will a line containing a 'b' anywhere in its + value. + + If you want to match a character that's special to the regular + expression grammar ('^$|[]()\.*+?'), it has to be quoted to remove + its special meaning. This means that in the pattern 'xxx.txt', the + '.' matches any character in the string (its usual regular + expression meaning), but in the pattern '"xxx.txt"', it can only + match a literal '.'. + + Likewise, if you want to include a character in your pattern that + has a special meaning to the regular expression grammar, you must + make sure it's not quoted. If you want to anchor a pattern at the + beginning or end of the string, for instance, you cannot quote the + '^' or '$' characters using any form of shell quoting. + + If you want to match 'initial string' at the start of a line, the + following will work: + [[ $line =~ ^"initial string" ]] + but this will not: + [[ $line =~ "^initial string" ]] + because in the second example the '^' is quoted and doesn't have + its usual special meaning. + + It is sometimes difficult to specify a regular expression properly + without using quotes, or to keep track of the quoting used by + regular expressions while paying attention to shell quoting and the + shell's quote removal. Storing the regular expression in a shell + variable is often a useful way to avoid problems with quoting + characters that are special to the shell. For example, the + following is equivalent to the pattern used above: - Storing the regular expression in a shell variable is often a - useful way to avoid problems with quoting characters that are - special to the shell. It is sometimes difficult to specify a - regular expression literally without using quotes, or to keep track - of the quoting used by regular expressions while paying attention - to the shell's quote removal. Using a shell variable to store the - pattern decreases these problems. For example, the following is - equivalent to the above: pattern='[[:space:]]*(a)?b' [[ $line =~ $pattern ]] - If you want to match a character that's special to the regular - expression grammar, it has to be quoted to remove its special - meaning. This means that in the pattern 'xxx.txt', the '.' matches - any character in the string (its usual regular expression meaning), - but in the pattern '"xxx.txt"' it can only match a literal '.'. Shell programmers should take special care with backslashes, since - backslashes are used both by the shell and regular expressions to - remove the special meaning from the following character. The - following two sets of commands are _not_ equivalent: + backslashes are used by both the shell and regular expressions to + remove the special meaning from the following character. This + means that after the shell's word expansions complete (*note Shell + Expansions::), any backslashes remaining in parts of the pattern + that were originally not quoted can remove the special meaning of + pattern characters. If any part of the pattern is quoted, the + shell does its best to ensure that the regular expression treats + those remaining backslashes as literal, if they appeared in a + quoted portion. + + The following two sets of commands are _not_ equivalent: + pattern='\.' [[ . =~ $pattern ]] @@ -984,12 +1103,46 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern - to be matched. In the first two examples, the backslash removes - the special meaning from '.', so the literal '.' matches. If the + to be matched. In the first two examples, the pattern passed to + the regular expression parser is '\.'. The backslash removes the + special meaning from '.', so the literal '.' matches. In the + second two examples, the pattern passed to the regular expression + parser has the backslash quoted (e.g., '\\\.'), which will not + match the string, since it does not contain a backslash. If the string in the first examples were anything other than '.', say 'a', the pattern would not match, because the quoted '.' in the pattern loses its special meaning of matching any single character. + Bracket expressions in regular expressions can be sources of errors + as well, since characters that are normally special in regular + expressions lose their special meanings between brackets. However, + you can use bracket expressions to match special pattern characters + without quoting them, so they are sometimes useful for this + purpose. + + Though it might seem like a strange way to write it, the following + pattern will match a '.' in the string: + + [[ . =~ [.] ]] + + The shell performs any word expansions before passing the pattern + to the regular expression functions, so you can assume that the + shell's quoting takes precedence. As noted above, the regular + expression parser will interpret any unquoted backslashes remaining + in the pattern after shell expansion according to its own rules. + The intention is to avoid making shell programmers quote things + twice as much as possible, so shell quoting should be sufficient to + quote special pattern characters where that's necessary. + + The array variable 'BASH_REMATCH' records which parts of the string + matched the pattern. The element of 'BASH_REMATCH' with index 0 + contains the portion of the string matching the entire regular + expression. Substrings matched by parenthesized subexpressions + within the regular expression are saved in the remaining + 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N + is the portion of the string matching the Nth parenthesized + subexpression. + Expressions may be combined using the following operators, listed in decreasing order of precedence: @@ -1024,9 +1177,9 @@ list may be redirected to a single stream. '()' ( LIST ) - Placing a list of commands between parentheses causes a subshell - environment to be created (*note Command Execution Environment::), - and each of the commands in LIST to be executed in that subshell. + Placing a list of commands between parentheses forces the shell to + create a subshell (*note Command Execution Environment::), and each + of the commands in LIST is executed in that subshell environment. Since the LIST is executed in a subshell, variable assignments do not remain in effect after the subshell completes. @@ -1039,10 +1192,10 @@ list may be redirected to a single stream. In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The -braces are 'reserved words', so they must be separated from the LIST by -'blank's or other shell metacharacters. The parentheses are -'operators', and are recognized as separate tokens by the shell even if -they are not separated from the LIST by whitespace. +braces are reserved words, so they must be separated from the LIST by +'blank's or other shell metacharacters. The parentheses are operators, +and are recognized as separate tokens by the shell even if they are not +separated from the LIST by whitespace. The exit status of both of these constructs is the exit status of LIST. @@ -1058,29 +1211,51 @@ A coprocess is executed asynchronously in a subshell, as if the command had been terminated with the '&' control operator, with a two-way pipe established between the executing shell and the coprocess. - The format for a coprocess is: + The syntax for a coprocess is: + coproc [NAME] COMMAND [REDIRECTIONS] -This creates a coprocess named NAME. If NAME is not supplied, the -default name is COPROC. NAME must not be supplied if COMMAND is a -simple command (*note Simple Commands::); otherwise, it is interpreted -as the first word of the simple command. +This creates a coprocess named NAME. COMMAND may be either a simple +command (*note Simple Commands::) or a compound command (*note Compound +Commands::). NAME is a shell variable name. If NAME is not supplied, +the default name is 'COPROC'. + + The recommended form to use for a coprocess is + + coproc NAME { COMMAND; } + +This form is recommended because simple commands result in the coprocess +always being named 'COPROC', and it is simpler to use and more complete +than the other compound commands. + + There are other forms of coprocesses: + + coproc NAME COMPOUND-COMMAND + coproc COMPOUND-COMMAND + coproc SIMPLE-COMMAND + +If COMMAND is a compound command, NAME is optional. The word following +'coproc' determines whether that word is interpreted as a variable name: +it is interpreted as NAME if it is not a reserved word that introduces a +compound command. If COMMAND is a simple command, NAME is not allowed; +this is to avoid confusion between NAME and the first word of the simple +command. When the coprocess is executed, the shell creates an array variable -(*note Arrays::) named 'NAME' in the context of the executing shell. -The standard output of COMMAND is connected via a pipe to a file +(*note Arrays::) named NAME in the context of the executing shell. The +standard output of COMMAND is connected via a pipe to a file descriptor +in the executing shell, and that file descriptor is assigned to NAME[0]. +The standard input of COMMAND is connected via a pipe to a file descriptor in the executing shell, and that file descriptor is assigned -to 'NAME'[0]. The standard input of COMMAND is connected via a pipe to -a file descriptor in the executing shell, and that file descriptor is -assigned to 'NAME'[1]. This pipe is established before any redirections -specified by the command (*note Redirections::). The file descriptors -can be utilized as arguments to shell commands and redirections using -standard word expansions. Other than those created to execute command -and process substitutions, the file descriptors are not available in +to NAME[1]. This pipe is established before any redirections specified +by the command (*note Redirections::). The file descriptors can be +utilized as arguments to shell commands and redirections using standard +word expansions. Other than those created to execute command and +process substitutions, the file descriptors are not available in subshells. The process ID of the shell spawned to execute the coprocess is -available as the value of the variable 'NAME'_PID. The 'wait' builtin +available as the value of the variable 'NAME_PID'. The 'wait' builtin command may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the @@ -1105,88 +1280,9 @@ line, different ways to specify the input source, and so on). Parallel can replace 'xargs' or feed commands from its input sources to several different instances of Bash. - For a complete description, refer to the GNU Parallel documentation. -A few examples should provide a brief introduction to its use. - - For example, it is easy to replace 'xargs' to gzip all html files in -the current directory and its subdirectories: - find . -type f -name '*.html' -print | parallel gzip -If you need to protect special characters such as newlines in file -names, use find's '-print0' option and parallel's '-0' option. - - You can use Parallel to move files from the current directory when -the number of files is too large to process with one 'mv' invocation: - printf '%s\n' * | parallel mv {} destdir - - As you can see, the {} is replaced with each line read from standard -input. While using 'ls' will work in most instances, it is not -sufficient to deal with all filenames. 'printf' is a shell builtin, and -therefore is not subject to the kernel's limit on the number of -arguments to a program, so you can use '*' (but see below about the -'dotglob' shell option). If you need to accommodate special characters -in filenames, you can use - - printf '%s\0' * | parallel -0 mv {} destdir - -as alluded to above. - - This will run as many 'mv' commands as there are files in the current -directory. You can emulate a parallel 'xargs' by adding the '-X' -option: - printf '%s\0' * | parallel -0 -X mv {} destdir - - (You may have to modify the pattern if you have the 'dotglob' option -enabled.) - - GNU Parallel can replace certain common idioms that operate on lines -read from a file (in this case, filenames listed one per line): - while IFS= read -r x; do - do-something1 "$x" "config-$x" - do-something2 < "$x" - done < file | process-output - -with a more compact syntax reminiscent of lambdas: - cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" | - process-output - - Parallel provides a built-in mechanism to remove filename extensions, -which lends itself to batch file transformations or renaming: - ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}" -This will recompress all files in the current directory with names -ending in .gz using bzip2, running one job per CPU (-j+0) in parallel. -(We use 'ls' for brevity here; using 'find' as above is more robust in -the face of filenames containing unexpected characters.) Parallel can -take arguments from the command line; the above can also be written as - - parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz - - If a command generates output, you may want to preserve the input -order in the output. For instance, the following command - { - echo foss.org.my ; - echo debian.org ; - echo freenetproject.org ; - } | parallel traceroute -will display as output the traceroute invocation that finishes first. -Adding the '-k' option - { - echo foss.org.my ; - echo debian.org ; - echo freenetproject.org ; - } | parallel -k traceroute -will ensure that the output of 'traceroute foss.org.my' is displayed -first. - - Finally, Parallel can be used to run a sequence of shell commands in -parallel, similar to 'cat file | bash'. It is not uncommon to take a -list of filenames, create a series of shell commands to operate on them, -and feed that list of commands to a shell. Parallel can speed this up. -Assuming that 'file' contains a list of shell commands, one per line, - - parallel -j 10 < file - -will evaluate the commands using the shell (since no explicit command is -supplied as an argument), in blocks of ten shell jobs at a time. + For a complete description, refer to the GNU Parallel documentation, +which is available at +.  File: bash.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features @@ -1210,15 +1306,15 @@ new process is created to interpret them. This defines a shell function named FNAME. The reserved word 'function' is optional. If the 'function' reserved word is supplied, -the parentheses are optional. The BODY of the function is the compound -command COMPOUND-COMMAND (*note Compound Commands::). That command is -usually a LIST enclosed between { and }, but may be any compound command -listed above, with one exception: If the 'function' reserved word is -used, but the parentheses are not supplied, the braces are required. +the parentheses are optional. The "body" of the function is the +compound command COMPOUND-COMMAND (*note Compound Commands::). That +command is usually a LIST enclosed between { and }, but may be any +compound command listed above. If the 'function' reserved word is used, +but the parentheses are not supplied, the braces are recommended. COMPOUND-COMMAND is executed whenever FNAME is specified as the name of -a command. When the shell is in POSIX mode (*note Bash POSIX Mode::), -FNAME must be a valid shell NAME and may not be the same as one of the -special builtins (*note Special Builtins::). In default mode, a +a simple command. When the shell is in POSIX mode (*note Bash POSIX +Mode::), FNAME must be a valid shell name and may not be the same as one +of the special builtins (*note Special Builtins::). In default mode, a function name can be any unquoted shell word that does not contain '$'. Any redirections (*note Redirections::) associated with the shell function are performed when the function is executed. A function @@ -1281,7 +1377,7 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible. - The shell uses DYNAMIC SCOPING to control a variable's visibility + The shell uses "dynamic scoping" to control a variable's visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a @@ -1290,10 +1386,10 @@ that caller is the "global" scope or another shell function. This is also the value that a local variable declaration "shadows", and the value that is restored when the function returns. - For example, if a variable VAR is declared as local in function -FUNC1, and FUNC1 calls another function FUNC2, references to VAR made -from within FUNC2 will resolve to the local variable VAR from FUNC1, -shadowing any global variable named VAR. + For example, if a variable 'var' is declared as local in function +'func1', and 'func1' calls another function 'func2', references to 'var' +made from within 'func2' will resolve to the local variable 'var' from +'func1', shadowing any global variable named 'var'. The following script demonstrates this behavior. When executed, the script displays @@ -1328,7 +1424,8 @@ been shadowed will become visible. the 'declare' ('typeset') builtin command (*note Bash Builtins::). The '-F' option to 'declare' or 'typeset' will list the function names only (and optionally the source file and line number, if the 'extdebug' shell -option is enabled). Functions may be exported so that subshells +option is enabled). Functions may be exported so that child shell +processes (those created when executing a separate shell invocation) automatically have them defined with the '-f' option to the 'export' builtin (*note Bourne Shell Builtins::). @@ -1348,11 +1445,12 @@ File: bash.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell * Positional Parameters:: The shell's command-line arguments. * Special Parameters:: Parameters denoted by special characters. -A PARAMETER is an entity that stores values. It can be a 'name', a -number, or one of the special characters listed below. A VARIABLE is a -parameter denoted by a 'name'. A variable has a VALUE and zero or more -ATTRIBUTES. Attributes are assigned using the 'declare' builtin command -(see the description of the 'declare' builtin in *note Bash Builtins::). +A "parameter" is an entity that stores values. It can be a 'name', a +number, or one of the special characters listed below. A "variable" is +a parameter denoted by a 'name'. A variable has a 'value' and zero or +more 'attributes'. Attributes are assigned using the 'declare' builtin +command (see the description of the 'declare' builtin in *note 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 @@ -1362,24 +1460,23 @@ the 'unset' builtin command. NAME=[VALUE] If VALUE is not given, the variable is assigned the null string. All VALUEs undergo tilde expansion, parameter and variable expansion, -command substitution, arithmetic expansion, and quote removal (detailed -below). If the variable has its 'integer' attribute set, then VALUE is -evaluated as an arithmetic expression even if the '$((...))' expansion -is not used (*note Arithmetic Expansion::). Word splitting is not -performed, with the exception of '"$@"' as explained below. Filename -expansion is not performed. Assignment statements may also appear as -arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly', -and 'local' builtin commands (DECLARATION commands). When in POSIX mode -(*note Bash POSIX Mode::), these builtins may appear in a command after -one or more instances of the 'command' builtin and retain these -assignment statement properties. +command substitution, arithmetic expansion, and quote removal (*note +Shell Parameter Expansion::). If the variable has its 'integer' +attribute set, then VALUE is evaluated as an arithmetic expression even +if the '$((...))' expansion is not used (*note Arithmetic Expansion::). +Word splitting and filename expansion are not performed. Assignment +statements may also appear as arguments to the 'alias', 'declare', +'typeset', 'export', 'readonly', and 'local' builtin commands +("declaration" commands). When in POSIX mode (*note Bash POSIX Mode::), +these builtins may appear in a command after one or more instances of +the 'command' builtin and retain these assignment statement properties. In the context where an assignment statement is assigning a value to a shell variable or array index (*note Arrays::), the '+=' operator can be used to append to or add to the variable's previous value. This includes arguments to builtin commands such as 'declare' that accept -assignment statements (DECLARATION commands). When '+=' is applied to a -variable for which the INTEGER attribute has been set, VALUE is +assignment statements (declaration commands). When '+=' is applied to a +variable for which the 'integer' attribute has been set, VALUE is evaluated as an arithmetic expression and added to the variable's current value, which is also evaluated. When '+=' is applied to an array variable using compound assignment (*note Arrays::), the @@ -1389,9 +1486,9 @@ maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. When applied to a string-valued variable, VALUE is expanded and appended to the variable's value. - A variable can be assigned the NAMEREF attribute using the '-n' + A variable can be assigned the 'nameref' attribute using the '-n' option to the 'declare' or 'local' builtin commands (*note Bash -Builtins::) to create a NAMEREF, or a reference to another variable. +Builtins::) to create a "nameref", or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref attribute @@ -1401,9 +1498,9 @@ shell functions to refer to a variable whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 -inside the function creates a nameref variable REF whose value is the +inside the function creates a nameref variable 'ref' whose value is the variable name passed as the first argument. References and assignments -to REF, and changes to its attributes, are treated as references, +to 'ref', and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was passed as '$1'. @@ -1423,7 +1520,7 @@ File: bash.info, Node: Positional Parameters, Next: Special Parameters, Up: S 3.4.1 Positional Parameters --------------------------- -A POSITIONAL PARAMETER is a parameter denoted by one or more digits, +A "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 'set' builtin command. Positional parameter 'N' may be @@ -1488,9 +1585,8 @@ only be referenced; assignment to them is not allowed. shell itself (such as the '-i' option). '$' - ($$) Expands to the process ID of the shell. In a '()' subshell, - it expands to the process ID of the invoking shell, not the - subshell. + ($$) Expands to the process ID of the shell. In a subshell, it + expands to the process ID of the invoking shell, not the subshell. '!' ($!) Expands to the process ID of the job most recently placed @@ -1544,13 +1640,13 @@ 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: PROCESS SUBSTITUTION. This is performed at the same time as -tilde, parameter, variable, and arithmetic expansion and command +available: "process substitution". This is performed at the same time +as tilde, parameter, variable, and arithmetic expansion and command substitution. After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves (QUOTE -REMOVAL). +original word are removed unless they have been quoted themselves +("quote removal"). Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions expand a @@ -1568,7 +1664,7 @@ File: bash.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expa --------------------- Brace expansion is a mechanism by which arbitrary strings may be -generated. This mechanism is similar to FILENAME EXPANSION (*note +generated. This mechanism is similar to "filename expansion" (*note Filename Expansion::), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional PREAMBLE, followed by either a series of comma-separated strings or a sequence @@ -1583,17 +1679,17 @@ are not sorted; left to right order is preserved. For example, ade ace abe A sequence expression takes the form '{X..Y[..INCR]}', where X and Y -are either integers or single characters, and INCR, an optional -increment, is an integer. When integers are supplied, the expression -expands to each number between X and Y, inclusive. Supplied integers -may be prefixed with '0' to force each term to have the same width. -When either X or Y begins with a zero, the shell attempts to force all -generated terms to contain the same number of digits, zero-padding where -necessary. When characters are supplied, the expression expands to each -character lexicographically between X and Y, inclusive, using the -default C locale. Note that both X and Y must be of the same type. -When the increment is supplied, it is used as the difference between -each term. The default increment is 1 or -1 as appropriate. +are either integers or letters, and INCR, an optional increment, is an +integer. When integers are supplied, the expression expands to each +number between X and Y, inclusive. Supplied integers may be prefixed +with '0' to force each term to have the same width. When either X or Y +begins with a zero, the shell attempts to force all generated terms to +contain the same number of digits, zero-padding where necessary. When +letters are supplied, the expression expands to each character +lexicographically between X and Y, inclusive, using the default C +locale. Note that both X and Y must be of the same type (integer or +letter). When the increment is supplied, it is used as the difference +between each term. The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It @@ -1623,9 +1719,9 @@ File: bash.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev If a word begins with an unquoted tilde character ('~'), all of the characters up to the first unquoted slash (or all characters, if there -is no unquoted slash) are considered a TILDE-PREFIX. If none of the +is no unquoted slash) are considered a "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 LOGIN NAME. +tilde-prefix following the tilde are treated as a possible "login name". If this login name is the null string, the tilde is replaced with the value of the 'HOME' shell variable. If 'HOME' is unset, the home directory of the user executing the shell is substituted instead. @@ -1681,7 +1777,7 @@ assigns the expanded value. Bash also performs tilde expansion on words satisfying the conditions of variable assignments (*note Shell Parameters::) when they appear as arguments to simple commands. Bash does not do this, except for the -DECLARATION commands listed above, when in POSIX mode. +declaration commands listed above, when in POSIX mode.  File: bash.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions @@ -1708,7 +1804,7 @@ parameter with more than one digit, or when PARAMETER is followed by a character that is not to be interpreted as part of its name. If the first character of PARAMETER is an exclamation point (!), and -PARAMETER is not a NAMEREF, it introduces a level of indirection. Bash +PARAMETER is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of PARAMETER as the new PARAMETER; this is then expanded and that value is used in the rest of the expansion, rather than the expansion of the original PARAMETER. @@ -1734,22 +1830,39 @@ omitted, the operator tests only for existence. If PARAMETER is unset or null, the expansion of WORD is substituted. Otherwise, the value of PARAMETER is substituted. + $ v=123 + $ echo ${v-unset} + 123 + '${PARAMETER:=WORD}' If PARAMETER is unset or null, the expansion of WORD is assigned to PARAMETER. The value of PARAMETER is then substituted. Positional parameters and special parameters may not be assigned to in this way. + $ var= + $ : ${var:=DEFAULT} + $ echo $var + DEFAULT + '${PARAMETER:?WORD}' If PARAMETER is null or unset, the expansion of WORD (or a message to that effect if WORD is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of PARAMETER is substituted. + $ var= + $ : ${var:?var is unset or null} + bash: var: var is unset or null + '${PARAMETER:+WORD}' If PARAMETER is null or unset, nothing is substituted, otherwise the expansion of WORD is substituted. + $ var=123 + $ echo ${var:+var is set and not null} + var is set and not null + '${PARAMETER:OFFSET}' '${PARAMETER:OFFSET:LENGTH}' This is referred to as Substring Expansion. It expands to up to @@ -1940,26 +2053,72 @@ omitted, the operator tests only for existence. array in turn, and the expansion is the resultant list. '${PARAMETER/PATTERN/STRING}' - +'${PARAMETER//PATTERN/STRING}' +'${PARAMETER/#PATTERN/STRING}' +'${PARAMETER/%PATTERN/STRING}' The PATTERN is expanded to produce a pattern just as in filename expansion. PARAMETER is expanded and the longest match of PATTERN - against its value is replaced with STRING. The match is performed - according to the rules described below (*note Pattern Matching::). - If PATTERN begins with '/', all matches of PATTERN are replaced - with STRING. Normally only the first match is replaced. If - PATTERN begins with '#', it must match at the beginning of the - expanded value of PARAMETER. If PATTERN begins with '%', it must - match at the end of the expanded value of PARAMETER. If STRING is - null, matches of PATTERN are deleted and the '/' following PATTERN - may be omitted. If the 'nocasematch' shell option (see the - description of 'shopt' in *note The Shopt Builtin::) is enabled, - the match is performed without regard to the case of alphabetic - characters. If PARAMETER is '@' or '*', the substitution operation - is applied to each positional parameter in turn, and the expansion - is the resultant list. If PARAMETER is an array variable - subscripted with '@' or '*', the substitution operation is applied - to each member of the array in turn, and the expansion is the - resultant list. + against its value is replaced with STRING. STRING undergoes tilde + expansion, parameter and variable expansion, arithmetic expansion, + command and process substitution, and quote removal. The match is + performed according to the rules described below (*note Pattern + Matching::). + + In the first form above, only the first match is replaced. If + there are two slashes separating PARAMETER and PATTERN (the second + form above), all matches of PATTERN are replaced with STRING. If + PATTERN is preceded by '#' (the third form above), it must match at + the beginning of the expanded value of PARAMETER. If PATTERN is + preceded by '%' (the fourth form above), it must match at the end + of the expanded value of PARAMETER. If the expansion of STRING is + null, matches of PATTERN are deleted. If STRING is null, matches + of PATTERN are deleted and the '/' following PATTERN may be + omitted. + + If the 'patsub_replacement' shell option is enabled using 'shopt', + any unquoted instances of '&' in STRING are replaced with the + matching portion of PATTERN. This is intended to duplicate a + common 'sed' idiom. Backslash is used to quote '&' in STRING; the + backslash is removed in order to permit a literal '&' in the + replacement string. Pattern substitution performs the check for + '&' after expanding STRING, so users should take care to quote + backslashes intended to escape the '&' and inhibit replacement so + they survive any quote removal performed by the expansion of + STRING. For instance, + + var=abcdef + echo ${var/abc/& } + echo "${var/abc/& }" + echo ${var/abc/"& "} + + will display three lines of "abc def", while + + var=abcdef + echo ${var/abc/\& } + echo "${var/abc/\& }" + echo ${var/abc/"\& "} + + will display two lines of "abc def" and a third line of "& def". + The first two are replaced because the backslash is removed by + quote removal performed during the expansion of STRING (the + expansion is performed in a context that doesn't take any enclosing + double quotes into account, as with other word expansions). In the + third case, the double quotes affect the expansion of '\&', and, + because '&' is not one of the characters for which backslash is + special in double quotes, the backslash survives the expansion, + inhibits the replacement, but is removed because it is treated + specially. One could use '\\&', unquoted, as the replacement + string to achive the same effect. It should rarely be necessary to + enclose only STRING in double quotes. + + If the 'nocasematch' shell option (see the description of 'shopt' + in *note The Shopt Builtin::) is enabled, the match is performed + without regard to the case of alphabetic characters. If PARAMETER + is '@' or '*', the substitution operation is applied to each + positional parameter in turn, and the expansion is the resultant + list. If PARAMETER is an array variable subscripted with '@' or + '*', the substitution operation is applied to each member of the + array in turn, and the expansion is the resultant list. '${PARAMETER^PATTERN}' '${PARAMETER^^PATTERN}' @@ -1970,18 +2129,22 @@ omitted, the operator tests only for existence. filename expansion. Each character in the expanded value of PARAMETER is tested against PATTERN, and, if it matches the pattern, its case is converted. The pattern should not attempt to - match more than one character. The '^' operator converts lowercase - letters matching PATTERN to uppercase; the ',' operator converts - matching uppercase letters to lowercase. The '^^' and ',,' - expansions convert each matched character in the expanded value; - the '^' and ',' expansions match and convert only the first - character in the expanded value. If PATTERN is omitted, it is - treated like a '?', which matches every character. If PARAMETER is - '@' or '*', the case modification operation is applied to each - positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the case modification operation is applied to each member of - the array in turn, and the expansion is the resultant list. + match more than one character. + + The '^' operator converts lowercase letters matching PATTERN to + uppercase; the ',' operator converts matching uppercase letters to + lowercase. The '^^' and ',,' expansions convert each matched + character in the expanded value; the '^' and ',' expansions match + and convert only the first character in the expanded value. If + PATTERN is omitted, it is treated like a '?', which matches every + character. + + If PARAMETER is '@' or '*', the case modification operation is + applied to each positional parameter in turn, and the expansion is + the resultant list. If PARAMETER is an array variable subscripted + with '@' or '*', the case modification operation is applied to each + member of the array in turn, and the expansion is the resultant + list. '${PARAMETER@OPERATOR}' The expansion is either a transformation of the value of PARAMETER @@ -2021,6 +2184,10 @@ omitted, the operator tests only for existence. 'a' The expansion is a string consisting of flag values representing PARAMETER's attributes. + 'k' + Like the 'K' transformation, but expands the keys and values + of indexed and associative arrays to separate words after word + splitting. If PARAMETER is '@' or '*', the operation is applied to each positional parameter in turn, and the expansion is the resultant @@ -2075,12 +2242,12 @@ is: $(( EXPRESSION )) - The expression is treated as if it were within double quotes, but a -double quote inside the parentheses is not treated specially. All -tokens in the expression undergo parameter and variable expansion, -command substitution, and quote removal. The result is treated as the -arithmetic expression to be evaluated. Arithmetic expansions may be -nested. + The EXPRESSION undergoes the same expansions as if it were within +double quotes, but double quote characters in EXPRESSION are not treated +specially and are removed. All tokens in the expression undergo +parameter and variable expansion, command substitution, and quote +removal. The result is treated as the arithmetic expression to be +evaluated. Arithmetic expansions may be nested. The evaluation is performed according to the rules listed below (*note Shell Arithmetic::). If the expression is invalid, Bash prints a @@ -2175,9 +2342,12 @@ characters. When a pattern is used for filename expansion, the character '.' at the start of a filename or immediately following a slash must be matched -explicitly, unless the shell option 'dotglob' is set. The filenames '.' -and '..' must always be matched explicitly, even if 'dotglob' is set. -In other cases, the '.' character is not treated specially. +explicitly, unless the shell option 'dotglob' is set. In order to match +the filenames '.' and '..', the pattern must begin with '.' (for +example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell +option is enabled, the filenames '.' and '..' are never matched, even if +the pattern begins with a '.'. When not matching filenames, the '.' +character is not treated specially. When matching a filename, the slash character must always be matched explicitly by a slash in the pattern, but in other matching contexts it @@ -2185,8 +2355,8 @@ can be matched by a special pattern character as described below (*note Pattern Matching::). See the description of 'shopt' in *note The Shopt Builtin::, for a -description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob' -options. +description of the 'nocaseglob', 'nullglob', 'globskipdots', 'failglob', +and 'dotglob' options. The 'GLOBIGNORE' shell variable may be used to restrict the set of file names matching a pattern. If 'GLOBIGNORE' is set, each matching @@ -2245,7 +2415,7 @@ characters must be quoted if they are to be matched literally. setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the value 'C', or enable the 'globasciiranges' shell option. - Within '[' and ']', CHARACTER CLASSES can be specified using the + Within '[' and ']', "character classes" can be specified using the syntax '[:'CLASS':]', where CLASS is one of the following classes defined in the POSIX standard: alnum alpha ascii blank cntrl digit graph lower @@ -2254,8 +2424,8 @@ characters must be quoted if they are to be matched literally. The 'word' character class matches letters, digits, and the character '_'. - Within '[' and ']', an EQUIVALENCE CLASS can be specified using the - syntax '[='C'=]', which matches all characters with the same + Within '[' and ']', an "equivalence class" can be specified using + the syntax '[='C'=]', which matches all characters with the same collation weight (as defined by the current locale) as the character C. @@ -2263,10 +2433,12 @@ characters must be quoted if they are to be matched literally. symbol SYMBOL. If the 'extglob' shell option is enabled using the 'shopt' builtin, -several extended pattern matching operators are recognized. In the -following description, a PATTERN-LIST is a list of one or more patterns -separated by a '|'. Composite patterns may be formed using one or more -of the following sub-patterns: +the shell recognizes several extended pattern matching operators. In +the following description, a PATTERN-LIST is a list of one or more +patterns separated by a '|'. When matching filenames, the 'dotglob' +shell option determines the set of filenames that are tested, as +described above. Composite patterns may be formed using one or more of +the following sub-patterns: '?(PATTERN-LIST)' Matches zero or one occurrence of the given patterns. @@ -2283,6 +2455,14 @@ of the following sub-patterns: '!(PATTERN-LIST)' Matches anything except one of the given patterns. + When matching filenames, the 'dotglob' shell option determines the +set of filenames that are tested: when 'dotglob' is enabled, the set of +filenames includes all files beginning with '.', but the filenames '.' +and '..' must be matched by a pattern or sub-pattern that begins with a +dot; when it is disabled, the set does not include any filenames +beginning with "." unless the pattern or sub-pattern begins with a '.'. +As above, '.' only has a special meaning when matching filenames. + Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings contain multiple matches. Using separate matches against shorter @@ -2305,8 +2485,8 @@ File: bash.info, Node: Redirections, Next: Executing Commands, Prev: Shell Ex 3.6 Redirections ================ -Before a command is executed, its input and output may be REDIRECTED -using a special notation interpreted by the shell. Redirection allows +Before a command is executed, its input and output may be "redirected" +using a special notation interpreted by the shell. "Redirection" allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2322,7 +2502,8 @@ file descriptor greater than 10 and assign it to {VARNAME}. If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines the file descriptor to close. If {VARNAME} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor's lifetime manually. +the file descriptor's lifetime manually. The 'varredir_close' shell +option manages this behavior (*note The Shopt Builtin::). In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is '<', the @@ -2584,11 +2765,13 @@ following order. expansion, and quote removal before being assigned to the variable. 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. +current shell environment. In the case of such a command (one that +consists only of assignment statements and redirections), assignment +statements are performed before redirections. 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 @@ -2642,8 +2825,8 @@ taken. 5. 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 - SHELL SCRIPT and the shell executes it as described in *note Shell - Scripts::. + "shell script" and the shell executes it as described in *note + Shell Scripts::. 6. If the command was not begun asynchronously, the shell waits for the command to complete and collects its exit status. @@ -2654,7 +2837,8 @@ File: bash.info, Node: Command Execution Environment, Next: Environment, Prev 3.7.3 Command Execution Environment ----------------------------------- -The shell has an EXECUTION ENVIRONMENT, which consists of the following: +The shell has an "execution environment", which consists of the +following: * open files inherited by the shell at invocation, as modified by redirections supplied to the 'exec' builtin @@ -2705,6 +2889,8 @@ inherited from the shell. A command invoked in this separate environment cannot affect the shell's execution environment. + A "subshell" is a copy of the shell process. + Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the @@ -2729,12 +2915,12 @@ File: bash.info, Node: Environment, Next: Exit Status, Prev: Command Executio ----------------- When a program is invoked it is given an array of strings called the -ENVIRONMENT. This is a list of name-value pairs, of the form +"environment". This is a list of name-value pairs, of the form '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 EXPORT to child +for each name found, automatically marking it for 'export' to child processes. Executed commands inherit the environment. The 'export' and 'declare -x' commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the @@ -2765,11 +2951,11 @@ File: bash.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Ex ----------------- The exit status of an executed command is the value returned by the -WAITPID system call or equivalent function. Exit statuses fall between -0 and 255, though, as explained below, the shell may use values above -125 specially. Exit statuses from shell builtins and compound commands -are also limited to this range. Under certain circumstances, the shell -will use special values to indicate specific failure modes. +'waitpid' system call or equivalent function. Exit statuses fall +between 0 and 255, though, as explained below, the shell may use values +above 125 specially. Exit statuses from shell builtins and compound +commands are also limited to this range. Under certain circumstances, +the shell will use special values to indicate specific failure modes. For the shell's purposes, a command which exits with a zero exit status has succeeded. A non-zero exit status indicates failure. This @@ -2795,6 +2981,9 @@ conditional and list constructs. All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments. + The exit status of the last command is available in the special +parameter $? (*note Special Parameters::). +  File: bash.info, Node: Signals, Prev: Exit Status, Up: Executing Commands @@ -2835,6 +3024,33 @@ the 'wait' builtin, the reception of a signal for which a trap has been set will cause the 'wait' builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. + When job control is not enabled, and Bash is waiting for a foreground +command to complete, the shell receives keyboard-generated signals such +as 'SIGINT' (usually generated by '^C') that users commonly intend to +send to that command. This happens because the shell and the command +are in the same process group as the terminal, and '^C' sends 'SIGINT' +to all processes in that process group. See *note Job Control::, for a +more in-depth discussion of process groups. + + When Bash is running without job control enabled and receives +'SIGINT' while waiting for a foreground command, it waits until that +foreground command terminates and then decides what to do about the +'SIGINT': + + 1. If the command terminates due to the 'SIGINT', Bash concludes that + the user meant to end the entire script, and acts on the 'SIGINT' + (e.g., by running a 'SIGINT' trap or exiting itself); + + 2. If the pipeline does not terminate due to 'SIGINT', the program + handled the 'SIGINT' itself and did not treat it as a fatal signal. + In that case, Bash does not treat 'SIGINT' as a fatal signal, + either, instead assuming that the 'SIGINT' was used as part of the + program's normal operation (e.g., 'emacs' uses it to abort editing + commands) or deliberately discarded. However, Bash will run any + trap set on 'SIGINT', as it does with any other trapped signal it + receives while it is waiting for the foreground command to + complete, for compatibility. +  File: bash.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features @@ -2857,8 +3073,8 @@ parameters are unset. A shell script may be made executable by using the 'chmod' command to turn on the execute bit. When Bash finds such a file while searching -the '$PATH' for a command, it spawns a subshell to execute it. In other -words, executing +the '$PATH' for a command, it creates a new instance of itself to +execute it. In other words, executing filename ARGUMENTS is equivalent to executing bash filename ARGUMENTS @@ -2962,19 +3178,19 @@ standard. Read and execute commands from the FILENAME argument in the current shell context. If FILENAME does not contain a slash, the 'PATH' - variable is used to find FILENAME. When Bash is not in POSIX mode, - the current directory is searched if FILENAME is not found in - '$PATH'. If any ARGUMENTS are supplied, they become the positional - parameters when FILENAME is executed. Otherwise the positional - parameters are unchanged. If the '-T' option is enabled, 'source' - inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string - is saved and restored around the call to 'source', and 'source' - unsets the 'DEBUG' trap while it executes. If '-T' is not set, and - the sourced file changes the 'DEBUG' trap, the new value is - retained when 'source' completes. The return status is the exit - status of the last command executed, or zero if no commands are - executed. If FILENAME is not found, or cannot be read, the return - status is non-zero. This builtin is equivalent to 'source'. + variable is used to find FILENAME, but FILENAME does not need to be + executable. When Bash is not in POSIX mode, the current directory + is searched if FILENAME is not found in '$PATH'. If any ARGUMENTS + are supplied, they become the positional parameters when FILENAME + is executed. Otherwise the positional parameters are unchanged. + If the '-T' option is enabled, '.' inherits any trap on 'DEBUG'; if + it is not, any 'DEBUG' trap string is saved and restored around the + call to '.', and '.' unsets the 'DEBUG' trap while it executes. If + '-T' is not set, and the sourced file changes the 'DEBUG' trap, the + new value is retained when '.' completes. The return status is the + exit status of the last command executed, or zero if no commands + are executed. If FILENAME is not found, or cannot be read, the + return status is non-zero. This builtin is equivalent to 'source'. 'break' break [N] @@ -2988,10 +3204,9 @@ standard. cd [-L|[-P [-e]] [-@] [DIRECTORY] Change the current working directory to DIRECTORY. If DIRECTORY is - not supplied, the value of the 'HOME' shell variable is used. Any - additional arguments following DIRECTORY are ignored. If the shell - variable 'CDPATH' exists, it is used as a search path: each - directory name in 'CDPATH' is searched for DIRECTORY, with + not supplied, the value of the 'HOME' shell variable is used. If + the shell variable 'CDPATH' exists, it is used as a search path: + each directory name in 'CDPATH' is searched for DIRECTORY, with alternative directory names in 'CDPATH' separated by a colon (':'). If DIRECTORY begins with a slash, 'CDPATH' is not used. @@ -3022,6 +3237,11 @@ standard. absolute pathname of the new working directory is written to the standard output. + If the directory change is successful, 'cd' sets the value of the + 'PWD' environment variable to the new directory name, and sets the + 'OLDPWD' environment variable to the value of the current working + directory before the change. + The return status is zero if the directory is successfully changed, non-zero otherwise. @@ -3073,7 +3293,7 @@ standard. Mark each NAME to be passed to child processes in the environment. If the '-f' option is supplied, the NAMEs refer to shell functions; otherwise the names refer to shell variables. The '-n' option - means to no longer mark each NAME for export. If no NAMES are + means to no longer mark each NAME for export. If no NAMEs are supplied, or if the '-p' option is given, a list of names of all exported variables is displayed. The '-p' option displays output in a form that may be reused as input. If a variable name is @@ -3277,10 +3497,16 @@ standard. 4. Otherwise, the expression is false. 4 arguments - If the first argument is '!', 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. + The following conditions are applied in the order listed. + + 1. If the first argument is '!', the result is the negation + of the three-argument expression composed of the + remaining arguments. + 2. If the first argument is exactly '(' and the fourth + argument is exactly ')', the result is the two-argument + test of the second and third arguments. + 3. Otherwise, the expression is parsed and evaluated + according to precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence @@ -3369,7 +3595,7 @@ standard. given, each NAME refers to a shell variable and that variable is removed. If the '-f' option is given, the NAMEs refer to shell functions, and the function definition is removed. If the '-n' - option is supplied, and NAME is a variable with the NAMEREF + option is supplied, and NAME is a variable with the 'nameref' attribute, NAME will be unset rather than the variable it references. '-n' has no effect if the '-f' option is supplied. If no options are supplied, each NAME refers to a variable; if there @@ -3377,7 +3603,8 @@ standard. unset. Readonly variables and functions may not be unset. Some shell variables lose their special behavior if they are unset; such behavior is noted in the description of the individual variables. - The return status is zero unless a NAME is readonly. + The return status is zero unless a NAME is readonly or may not be + unset.  File: bash.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands @@ -3406,6 +3633,7 @@ standard. bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND + bind READLINE-COMMAND-LINE Display current Readline (*note Command Line Editing::) key and function bindings, bind a key sequence to a Readline function or @@ -3470,10 +3698,13 @@ standard. 'READLINE_LINE' variable to the contents of the Readline line buffer and the 'READLINE_POINT' and 'READLINE_MARK' variables to the current location of the insertion point and the saved - insertion point (the MARK), respectively. If the executed - command changes the value of any of 'READLINE_LINE', - 'READLINE_POINT', or 'READLINE_MARK', those new values will be - reflected in the editing state. + insertion point (the MARK), respectively. The shell assigns + any numeric argument the user supplied to the + 'READLINE_ARGUMENT' variable. If there was no argument, that + variable is not set. If the executed command changes the + value of any of 'READLINE_LINE', 'READLINE_POINT', or + 'READLINE_MARK', those new values will be reflected in the + editing state. '-X' List all key sequences bound to shell commands and the @@ -3556,7 +3787,7 @@ standard. It is ignored in all other cases. The '-I' option causes local variables to inherit the attributes - (except the NAMEREF attribute) and value of any existing variable + (except the 'nameref' attribute) and value of any existing variable with the same NAME at a surrounding scope. If there is no existing variable, the local variable is initially unset. @@ -3583,7 +3814,7 @@ standard. attribute is disabled. '-n' - Give each NAME the NAMEREF attribute, making it a name + Give each NAME the 'nameref' attribute, making it a name reference to another variable. That other variable is defined by the value of NAME. All references, assignments, and attribute modifications to NAME, except for those using or @@ -3626,7 +3857,7 @@ standard. 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 (*note Arrays::), one of the - NAMES is not a valid shell variable name, an attempt is made to + 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 '-f'. @@ -3699,13 +3930,20 @@ standard. The '-f' option means to load the new builtin command NAME from shared object FILENAME, on systems that support dynamic loading. - The '-d' option will delete a builtin loaded with '-f'. + Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a + colon-separated list of directories in which to search for + FILENAME. The default is system-dependent. The '-d' option will + delete a builtin loaded with '-f'. If there are no options, a list of the shell builtins is displayed. The '-s' option restricts 'enable' to the POSIX special builtins. If '-s' is used with '-f', the new builtin becomes a special builtin (*note Special Builtins::). + If no options are supplied and a NAME is not a shell builtin, + 'enable' will attempt to load NAME from a shared object named NAME, + as if the command were 'enable -f NAME NAME'. + The return status is zero unless a NAME is not a shell builtin or there is an error loading a new builtin from a shared object. @@ -3826,6 +4064,9 @@ standard. '%q' Causes 'printf' to output the corresponding ARGUMENT in a format that can be reused as shell input. + '%Q' + like '%q', but applies any supplied precision to the ARGUMENT + before quoting it. '%(DATEFMT)T' Causes 'printf' to output the date-time string resulting from using DATEFMT as a format string for 'strftime'(3). The @@ -3934,8 +4175,9 @@ standard. partial input read into the specified variable NAME. If TIMEOUT is 0, 'read' returns immediately, without trying to read any data. The exit status is 0 if input is available on - the specified file descriptor, non-zero otherwise. The exit - status is greater than 128 if the timeout is exceeded. + the specified file descriptor, or the read will return EOF, + non-zero otherwise. The exit status is greater than 128 if + the timeout is exceeded. '-u FD' Read input from file descriptor FD. @@ -3991,7 +4233,7 @@ standard. If the '-f' option is used, 'type' does not attempt to find shell functions, as with the 'command' builtin. - The return status is zero if all of the NAMES are found, non-zero + The return status is zero if all of the NAMEs are found, non-zero if any are not found. 'typeset' @@ -4135,8 +4377,8 @@ allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. 'set' - set [--abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [ARGUMENT ...] - set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [ARGUMENT ...] + set [-abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [--] [-] [ARGUMENT ...] + set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [--] [-] [ARGUMENT ...] If no options or arguments are supplied, 'set' displays the names and values of all shell variables and functions, sorted according @@ -4317,14 +4559,19 @@ parameters, or to display the names and values of shell variables. causes the effective user and group ids to be set to the real user and group ids. + '-r' + Enable restricted shell mode. This option cannot be unset + once it has been set. + '-t' Exit after reading and executing one command. '-u' Treat unset variables and parameters other than the special - parameters '@' or '*' as an error when performing parameter - expansion. An error message will be written to the standard - error, and a non-interactive shell will exit. + parameters '@' or '*', or array variables subscripted with '@' + or '*', as an error when performing parameter expansion. An + error message will be written to the standard error, and a + non-interactive shell will exit. '-v' Print shell input lines as they are read. @@ -4421,7 +4668,7 @@ This builtin allows you to change additional shell optional behavior. option is used, those available with the '-o' option to the 'set' builtin command (*note The Set Builtin::). With no options, or with the '-p' option, a list of all settable options is displayed, - with an indication of whether or not each is set; if OPTNAMES are + with an indication of whether or not each is set; if OPTNAMEs are supplied, the output is restricted to those options. The '-p' option causes output to be displayed in a form that may be reused as input. Other options have the following meanings: @@ -4435,7 +4682,7 @@ This builtin allows you to change additional shell optional behavior. '-q' Suppresses normal output; the return status indicates whether the OPTNAME is set or unset. If multiple OPTNAME arguments - are given with '-q', the return status is zero if all OPTNAMES + are given with '-q', the return status is zero if all OPTNAMEs are enabled; non-zero otherwise. '-o' @@ -4448,7 +4695,7 @@ This builtin allows you to change additional shell optional behavior. Unless otherwise noted, the 'shopt' options are disabled (off) by default. - The return status when listing options is zero if all OPTNAMES are + The return status when listing options is zero if all OPTNAMEs are enabled, non-zero otherwise. When setting or unsetting options, the return status is zero unless an OPTNAME is not a valid shell option. @@ -4616,6 +4863,11 @@ This builtin allows you to change additional shell optional behavior. upper-case and lower-case ASCII characters will collate together. + 'globskipdots' + If set, filename expansion will never match the filenames '.' + and '..', even if the pattern begins with a '.'. This option + is enabled by default. + 'globstar' If set, the pattern '**' used in a filename expansion context will match all files and zero or more directories and @@ -4675,7 +4927,7 @@ This builtin allows you to change additional shell optional behavior. 'localvar_inherit' If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope - before any new value is assigned. The NAMEREF attribute is + before any new value is assigned. The 'nameref' attribute is not inherited. 'localvar_unset' @@ -4706,14 +4958,26 @@ This builtin allows you to change additional shell optional behavior. 'nocasematch' If set, Bash matches patterns in a case-insensitive fashion when performing matching while executing 'case' or '[[' - conditional commands, when performing pattern substitution - word expansions, or when filtering possible completions as - part of programmable completion. + conditional commands (*note Conditional Constructs::, when + performing pattern substitution word expansions, or when + filtering possible completions as part of programmable + completion. + + 'noexpand_translation' + If set, Bash encloses the translated results of $"..." + quoting in single quotes instead of double quotes. If the + string is not translated, this has no effect. 'nullglob' If set, Bash allows filename patterns which match no files to expand to a null string, rather than themselves. + 'patsub_replacement' + If set, Bash expands occurrences of '&' in the replacement + string of pattern substitution to the text matched by the + pattern, as described above (*note Shell Parameter + Expansion::). This option is enabled by default. + 'progcomp' If set, the programmable completion facilities (*note Programmable Completion::) are enabled. This option is @@ -4745,9 +5009,15 @@ This builtin allows you to change additional shell optional behavior. parameters. 'sourcepath' - If set, the 'source' builtin uses the value of 'PATH' to find - the directory containing the file supplied as an argument. - This option is enabled by default. + If set, the '.' ('source') builtin uses the value of 'PATH' to + find the directory containing the file supplied as an + argument. This option is enabled by default. + + 'varredir_close' + If set, the shell automatically closes file descriptors + assigned using the '{varname}' redirection syntax (*note + Redirections::) instead of leaving them open when the command + completes. 'xpg_echo' If set, the 'echo' builtin expands backslash-escape sequences @@ -4980,7 +5250,7 @@ Variables::). 'BASH_LINENO' An array variable whose members are the line numbers in source - files where each corresponding member of FUNCNAME was invoked. + files where each corresponding member of 'FUNCNAME' was invoked. '${BASH_LINENO[$i]}' is the line number in the source file ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or '${BASH_LINENO[$i-1]}' if referenced within another shell @@ -5017,10 +5287,10 @@ Variables::). to the array members are as follows: 'BASH_VERSINFO[0]' - The major version number (the RELEASE). + The major version number (the "release"). 'BASH_VERSINFO[1]' - The minor version number (the VERSION). + The minor version number (the "version"). 'BASH_VERSINFO[2]' The patch level. @@ -5029,7 +5299,7 @@ Variables::). The build version. 'BASH_VERSINFO[4]' - The release status (e.g., BETA1). + The release status (e.g., 'beta1'). 'BASH_VERSINFO[5]' The value of 'MACHTYPE'. @@ -5082,12 +5352,12 @@ Variables::). 'COMP_TYPE' Set to an integer value corresponding to the type of completion - attempted that caused a completion function to be called: TAB, for - normal completion, '?', for listing completions after successive - tabs, '!', for listing alternatives on partial word completion, - '@', to list completions if the word is not unmodified, or '%', for - menu completion. This variable is available only in shell - functions and external commands invoked by the programmable + attempted that caused a completion function to be called: , + for normal completion, '?', for listing completions after + successive tabs, '!', for listing alternatives on partial word + completion, '@', to list completions if the word is not unmodified, + or '%', for menu completion. This variable is available only in + shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). 'COMP_KEY' @@ -5141,16 +5411,16 @@ Variables::). Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity (see the documentation for the C library - function TIME for the definition of Epoch). Assignments to + function 'time' for the definition of Epoch). Assignments to 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses its special properties, even if it is subsequently reset. 'EPOCHSECONDS' Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C - library function TIME for the definition of Epoch). Assignments to - 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it loses - its special properties, even if it is subsequently reset. + library function 'time' for the definition of Epoch). Assignments + to 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it + loses its special properties, even if it is subsequently reset. 'EUID' The numeric effective user id of the current user. This variable @@ -5217,7 +5487,7 @@ Variables::). 'histchars' Up to three characters which control history expansion, quick substitution, and tokenization (*note History Interaction::). The - first character is the HISTORY EXPANSION character, that is, the + first character is the "history expansion" character, that is, the character which signifies the start of a history expansion, normally '!'. The second character is the character which signifies 'quick substitution' when seen as the first character on @@ -5295,7 +5565,7 @@ Variables::). 'HISTTIMEFORMAT' If this variable is set and not null, its value is used as a format - string for STRFTIME to print the time stamp associated with each + string for 'strftime' to print the time stamp associated with each history entry displayed by the 'history' builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. This uses the history comment @@ -5449,7 +5719,7 @@ Variables::). with '#? ' 'PS4' - The value of this parameter is expanded like PS1 and the expanded + The value of this parameter is expanded like 'PS1' and the expanded value is the prompt printed before the command line is echoed when the '-x' option is set (*note The Set Builtin::). The first character of the expanded value is replicated multiple times, as @@ -5465,15 +5735,19 @@ Variables::). seeds the random number generator. If 'RANDOM' is unset, it loses its special properties, even if it is subsequently reset. +'READLINE_ARGUMENT' + Any numeric argument given to a Readline command that was defined + using 'bind -x' (*note Bash Builtins:: when it was invoked. + 'READLINE_LINE' The contents of the Readline line buffer, for use with 'bind -x' (*note Bash Builtins::). 'READLINE_MARK' - The position of the MARK (saved insertion point) in the Readline + The position of the "mark" (saved insertion point) in the Readline line buffer, for use with 'bind -x' (*note Bash Builtins::). The characters between the insertion point and the mark are often - called the REGION. + called the "region". 'READLINE_POINT' The position of the insertion point in the Readline line buffer, @@ -5487,7 +5761,7 @@ Variables::). 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. The number of seconds - at shell invocation and the current time is always determined by + at shell invocation and the current time are always determined by querying the system clock. If 'SECONDS' is unset, it loses its special properties, even if it is subsequently reset. @@ -5882,8 +6156,8 @@ File: bash.info, Node: What is an Interactive Shell?, Next: Is this Shell Inte 6.3.1 What is an Interactive Shell? ----------------------------------- -An interactive shell is one started without non-option arguments, unless -'-s' is specified, without specifying the '-c' option, and whose input +An interactive shell is one started without non-option arguments (unless +'-s' is specified) and without specifying the '-c' option, whose input and error output are both connected to terminals (as determined by 'isatty(3)'), or one started with the '-i' option. @@ -5941,7 +6215,7 @@ several ways. string escape sequences. 4. Bash executes the values of the set elements of the - 'PROMPT_COMMANDS' array variable as commands before printing the + 'PROMPT_COMMAND' array variable as commands before printing the primary prompt, '$PS1' (*note Bash Variables::). 5. Readline (*note Command Line Editing::) is used to read commands @@ -5993,9 +6267,11 @@ several ways. 19. Parser syntax errors will not cause the shell to exit. - 20. Simple spelling correction for directory arguments to the 'cd' - builtin is enabled by default (see the description of the 'cdspell' - option to the 'shopt' builtin in *note The Shopt Builtin::). + 20. If the 'cdspell' shell option is enabled, the shell will attempt + simple spelling correction for directory arguments to the 'cd' + builtin (see the description of the 'cdspell' option to the 'shopt' + builtin in *note The Shopt Builtin::). The 'cdspell' option is + only effective in interactive shells. 21. The shell will check the value of the 'TMOUT' variable and exit if a command is not read within the specified number of seconds after @@ -6007,10 +6283,11 @@ File: bash.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, 6.4 Bash Conditional Expressions ================================ -Conditional expressions are used by the '[[' compound command and the -'test' and '[' builtin commands. The 'test' and '[' commands determine -their behavior based on the number of arguments; see the descriptions of -those commands for any other command-specific actions. +Conditional expressions are used by the '[[' compound command (*note +Conditional Constructs::) and the 'test' and '[' builtin commands (*note +Bourne Shell Builtins::). The 'test' and '[' commands determine their +behavior based on the number of arguments; see the descriptions of those +commands for any other command-specific actions. Expressions may be unary or binary, and are formed from the following primaries. Unary expressions are often used to examine the status of a @@ -6228,8 +6505,8 @@ 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 INTEGER attribute using 'declare -i' is assigned a value. A -null value evaluates to 0. A shell variable need not have its INTEGER +given the 'integer' attribute using '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. Integer constants follow the C language definition, without suffixes @@ -6254,7 +6531,7 @@ File: bash.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Ba 6.6 Aliases =========== -ALIASES allow a string to be substituted for a word when it is used as +"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 'alias' and 'unalias' builtin commands. @@ -6269,15 +6546,15 @@ 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 'ls' to '"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 BLANK, then the next command word following the alias is also +is a 'blank', then the next command word following the alias is also checked for alias expansion. Aliases are created and listed with the 'alias' command, and removed with the 'unalias' command. There is no mechanism for using arguments in the replacement text, as -in 'csh'. If arguments are needed, a shell function should be used -(*note Shell Functions::). +in 'csh'. If arguments are needed, use a shell function (*note Shell +Functions::). Aliases are not expanded when the shell is not interactive, unless the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt @@ -6402,7 +6679,11 @@ NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. 'unset NAME', where NAME is an array, removes the entire -array. A subscript of '*' or '@' also removes the entire array. +array. 'unset NAME[SUBSCRIPT]' behaves differently depending on the +array type when given a subscript of '*' or '@'. When NAME is an +associative array, it removes the element with key '*' or '@'. If NAME +is an indexed array, 'unset' removes all of the elements, but does not +remove the array itself. When using a variable name with a subscript as an argument to a command, such as with 'unset', without using the word expansion syntax @@ -6477,10 +6758,14 @@ File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack 'popd' popd [-n] [+N | -N] + Removes elements from the directory stack. The elements are + numbered from 0 starting at the first directory listed by 'dirs'; + that is, 'popd' is equivalent to 'popd +0'. + When no arguments are given, 'popd' removes the top directory from - the stack and performs a 'cd' to the new top directory. The - elements are numbered from 0 starting at the first directory listed - with 'dirs'; that is, 'popd' is equivalent to 'popd +0'. + the stack and changes to the new top directory. + + Arguments, if supplied, have the following meanings: '-n' Suppresses the normal change of directory when removing @@ -6488,17 +6773,32 @@ File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack manipulated. '+N' Removes the Nth directory (counting from the left of the list - printed by 'dirs'), starting with zero. + printed by 'dirs'), starting with zero, from the stack. '-N' Removes the Nth directory (counting from the right of the list - printed by 'dirs'), starting with zero. + printed by 'dirs'), starting with zero, from the stack. + + If the top element of the directory stack is modified, and the '-n' + option was not supplied, 'popd' uses the 'cd' builtin to change to + the directory at the top of the stack. If the 'cd' fails, 'popd' + returns a non-zero value. + + Otherwise, 'popd' returns an unsuccessful status if an invalid + option is encountered, the directory stack is empty, or a + non-existent directory stack entry is specified. + + If the 'popd' command is successful, Bash runs 'dirs' to show the + final contents of the directory stack, and the return status is 0. 'pushd' pushd [-n] [+N | -N | DIR] - Save the current directory on the top of the directory stack and - then 'cd' to DIR. With no arguments, 'pushd' exchanges the top two - directories and makes the new top the current directory. + 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, 'pushd' exchanges the top two + elements of the directory stack. + + Arguments, if supplied, have the following meanings: '-n' Suppresses the normal change of directory when rotating or @@ -6513,9 +6813,20 @@ File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack printed by 'dirs', starting with zero) to the top of the list by rotating the stack. 'DIR' - Makes DIR be the top of the stack, making it the new current - directory as if it had been supplied as an argument to the - 'cd' builtin. + Makes DIR be the top of the stack. + + After the stack has been modified, if the '-n' option was not + supplied, 'pushd' uses the 'cd' builtin to change to the directory + at the top of the stack. If the 'cd' fails, 'pushd' returns a + non-zero value. + + Otherwise, if no arguments are supplied, 'pushd' returns 0 unless + the directory stack is empty. When rotating the directory stack, + 'pushd' returns 0 unless the directory stack is empty or a + non-existent directory stack element is specified. + + If the 'pushd' command is successful, Bash runs 'dirs' to show the + final contents of the directory stack.  File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features @@ -6523,9 +6834,9 @@ File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Pr 6.9 Controlling the Prompt ========================== -Bash examines the value of the array variable 'PROMPT_COMMANDS' just +Bash examines the value of the array variable 'PROMPT_COMMAND' just before printing each primary prompt. If any elements in -'PROMPT_COMMANDS' are set and non-null, Bash executes each value, in +'PROMPT_COMMAND' are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line. In addition, the following table describes the special characters @@ -6571,8 +6882,8 @@ which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4': '\V' The release of Bash, version + patchlevel (e.g., 2.00.0) '\w' - The current working directory, with '$HOME' abbreviated with a - tilde (uses the '$PROMPT_DIRTRIM' variable). + The value of the 'PWD' shell variable ('$PWD'), with '$HOME' + abbreviated with a tilde (uses the '$PROMPT_DIRTRIM' variable). '\W' The basename of '$PWD', with '$HOME' abbreviated with a tilde. '\!' @@ -6638,7 +6949,8 @@ with the exception that the following are disallowed or not performed: * Using the 'enable' builtin command to enable disabled shell builtins. * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'set +o restricted'. + * Turning off restricted mode with 'set +r' or 'shopt -u + restricted_shell'. These restrictions are enforced after any startup files are read. @@ -6649,11 +6961,11 @@ spawned to execute the script. The restricted shell mode is only one component of a useful restricted environment. It should be accompanied by setting 'PATH' to a value that allows execution of only a few verified commands (commands -that allow shell escapes are particularly vulnerable), leaving the user -in a non-writable directory other than his home directory after login, -not allowing the restricted shell to execute shell scripts, and cleaning -the environment of variables that cause some commands to modify their -behavior (e.g., 'VISUAL' or 'PAGER'). +that allow shell escapes are particularly vulnerable), changing the +current directory to a non-writable directory other than '$HOME' after +login, not allowing the restricted shell to execute shell scripts, and +cleaning the environment of variables that cause some commands to modify +their behavior (e.g., 'VISUAL' or 'PAGER'). Modern systems provide more secure ways to implement a restricted environment, such as 'jails', 'zones', or 'containers'. @@ -6764,7 +7076,11 @@ startup files. 25. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a - special builtin, but not with any other simple command. + special builtin, but not with any other simple command. For any + other simple command, the shell aborts execution of that command, + and execution continues at the top level ("the shell shall not + perform any further processing of the command in which the error + occurred"). 26. A non-interactive shell exits with an error status if the iteration variable in a 'for' statement or the selection variable @@ -6848,14 +7164,14 @@ startup files. variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + supplied as an argument exceeds 'PATH_MAX' when all symbolic links are expanded, 'cd' will fail instead of attempting to use only the supplied directory name. @@ -7040,6 +7356,30 @@ required for bash-5.1 and later versions. when producing output that can be reused as input. Bash-5.1 suppresses that message when the '-l' option is supplied. +'compat51 (set using BASH_COMPAT)' + * The 'unset' builtin will unset the array 'a' given an argument + like 'a[@]'. Bash-5.2 will unset an element with key '@' + (associative arrays) or remove all the elements without + unsetting the array (indexed arrays) + * arithmetic commands ( ((...)) ) and the expressions in an + arithmetic for statement can be expanded more than once + * expressions used as arguments to arithmetic operators in the + '[[' conditional command can be expanded more than once + * the expressions in substring parameter brace expansion can be + expanded more than once + * the expressions in the $(( ... )) word expansion can be + expanded more than once + * arithmetic expressions used as indexed array subscripts can be + expanded more than once + * 'test -v', when given an argument of 'A[@]', where A is an + existing associative array, will return true if the array has + any set elements. Bash-5.2 will look for and report on a key + named '@' + * the ${PARAMETER[:]=VALUE} word expansion will return VALUE, + before any variable-specific transformations have been + performed (e.g., converting to lowercase). Bash-5.2 will + return the final value assigned to the variable. +  File: bash.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7093,19 +7433,19 @@ when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN' caught, suspends the process. If the operating system on which Bash is running supports job -control, Bash contains facilities to use it. Typing the SUSPEND +control, Bash contains facilities to use it. Typing the "suspend" character (typically '^Z', Control-Z) while a process is running causes that process to be stopped and returns control to Bash. Typing the -DELAYED SUSPEND character (typically '^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 'bg' command to continue it in the background, the -'fg' command to continue it in the foreground, or the 'kill' command to -kill it. A '^Z' takes effect immediately, and has the additional side -effect of causing pending output and typeahead to be discarded. +"delayed suspend" character (typically '^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 'bg' command to continue it in the background, +the 'fg' command to continue it in the foreground, or the 'kill' command +to kill it. A '^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 '%' introduces a job specification (JOBSPEC). +character '%' introduces a job specification ("jobspec"). Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+' refer to the shell's notion of the current job, which is the last job @@ -7234,7 +7574,7 @@ File: bash.info, Node: Job Control Builtins, Next: Job Control Variables, Pre for all running background jobs and the last-executed process substitution, if its process id is the same as $!, and the return status is zero. If the '-n' option is supplied, 'wait' waits for a - single job from the list of PIDS or JOBSPECS or, if no arguments + single job from the list of PIDs or JOBSPECs or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, @@ -7582,7 +7922,7 @@ File: bash.info, Node: Readline Init File, Next: Bindable Readline Commands, Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home +putting commands in an "inputrc" file, conventionally in their home directory. The name of this file is taken from the value of the shell variable 'INPUTRC'. If that variable is unset, the default is '~/.inputrc'. If that file does not exist or cannot be read, the @@ -7662,7 +8002,10 @@ Variable Settings If set to 'on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the - value of the 'LS_COLORS' environment variable. The default is + value of the 'LS_COLORS' environment variable. If there is a + color definition in 'LS_COLORS' for the custom suffix + 'readline-colored-completion-prefix', Readline uses this color + for the common prefix instead of its default. The default is 'off'. 'colored-stats' @@ -7708,8 +8051,9 @@ Variable Settings than or equal to this value, Readline will ask whether or not the user wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater - than or equal to 0. A negative value means Readline should - never ask. The default limit is '100'. + than or equal to zero. A zero value means Readline should + never ask; negative values are treated as zero. The default + limit is '100'. 'convert-meta' If set to 'on', Readline will convert characters with the @@ -7745,6 +8089,18 @@ Variable Settings non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '@'. + 'enable-active-region' + The "point" is the current cursor position, and "mark" refers + to a saved cursor position (*note Commands For Moving::). The + text between the point and mark is referred to as the + "region". When this variable is set to 'On', Readline allows + certain commands to designate the region as "active". When + the region is active, Readline highlights the text in the + region using the terminal's standout mode. The active region + shows the text inserted by bracketed-paste and any matching + text found by incremental and non-incremental history + searches. The default is 'On'. + 'enable-bracketed-paste' When set to 'On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing @@ -8438,6 +8794,11 @@ File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: C supplied, specifies the history entry to use instead of the current line. +'fetch-history ()' + With a numeric argument, fetch that entry from the history list and + make it the current line. Without an argument, move back to the + first entry in the history list. +  File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands @@ -8849,6 +9210,12 @@ File: bash.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bin is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. +'spell-correct-word (C-x s)' + Perform spelling correction on the current word, treating it as a + directory or filename, in the same way as the 'cdspell' shell + option. Word boundaries are the same as those used by + 'shell-forward-word'. + '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 @@ -9578,9 +9945,9 @@ history file. -d' command. '-d START-END' - Delete the history entries between positions START and END, - inclusive. Positive and negative values for START and END are - interpreted as described above. + Delete the range of history entries between positions START + and END, inclusive. Positive and negative values for START + and END are interpreted as described above. '-a' Append the new history lines to the history file. These are @@ -9613,6 +9980,11 @@ history file. FILENAME is given, then it is used as the history file. If not, then the value of the 'HISTFILE' variable is used. + The return value is 0 unless an invalid option is encountered, an + error occurs while reading or writing the history file, an invalid + OFFSET or range is supplied as an argument to '-d', or the history + expansion supplied as an argument to '-p' fails. +  File: bash.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -9897,20 +10269,28 @@ These are installation instructions for Bash. 3. Optionally, type 'make tests' to run the Bash test suite. 4. Type 'make install' to install 'bash' and 'bashbug'. This will - also install the manual pages and Info file. + also install the manual pages and Info file, message translation + files, some supplemental documentation, a number of example + loadable builtin commands, and a set of header files for developing + loadable builtins. You may need additional privileges to install + 'bash' to your desired destination, so 'sudo make install' might be + required. More information about controlling the locations where + 'bash' and other files are installed is below (*note Installation + Names::). The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', and 'support' directories, -each directory under 'lib', and several others). It also creates a -'config.h' file containing system-dependent definitions. Finally, it -creates a shell script named 'config.status' that you can run in the -future to recreate the current configuration, a file 'config.cache' that -saves the results of its tests to speed up reconfiguring, and a file -'config.log' containing compiler output (useful mainly for debugging -'configure'). If at some point 'config.cache' contains results you -don't want to keep, you may remove or edit it. +(the top directory, the 'builtins', 'doc', 'po', and 'support' +directories, each directory under 'lib', and several others). It also +creates a 'config.h' file containing system-dependent definitions. +Finally, it creates a shell script named 'config.status' that you can +run in the future to recreate the current configuration, a file +'config.cache' that saves the results of its tests to speed up +reconfiguring, and a file 'config.log' containing compiler output +(useful mainly for debugging 'configure'). If at some point +'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 'configure' script understands, type @@ -9941,7 +10321,7 @@ considered for the next release. The file 'configure.ac' is used to create 'configure' by a program called Autoconf. You only need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of Autoconf. If you do -this, make sure you are using Autoconf version 2.50 or newer. +this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that @@ -10009,10 +10389,13 @@ File: bash.info, Node: Installation Names, Next: Specifying the System Type, ======================= By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc. You can specify an installation prefix other -than '/usr/local' by giving 'configure' the option '--prefix=PATH', or -by specifying a value for the 'DESTDIR' 'make' variable when running -'make install'. +'/usr/local/man', etc.; that is, the "installation prefix" defaults to +'/usr/local'. You can specify an installation prefix other than +'/usr/local' by giving 'configure' the option '--prefix=PATH', or by +specifying a value for the 'prefix' 'make' variable when running 'make +install' (e.g., 'make install prefix=PATH'). The 'prefix' variable +provides a default for 'exec_prefix' and other variables used when +installing bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you @@ -10020,6 +10403,30 @@ give 'configure' the option '--exec-prefix=PATH', 'make install' will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. + If you would like to change the installation locations for a single +run, you can specify these variables as arguments to 'make': 'make +install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' +instead of the default '/usr/local/bin'. + + If you want to see the files bash will install and where it will +install them without changing anything on your system, specify the +variable 'DESTDIR' as an argument to 'make'. Its value should be the +absolute directory path you'd like to use as the root of your sample +installation tree. For example, + + mkdir /fs1/bash-install + make install DESTDIR=/fs1/bash-install + +will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +documentation into directories within +'/fs1/bash-install/usr/local/share', the example loadable builtins into +'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the +usual 'exec_prefix' and 'prefix' variables to alter the directory paths +beneath the value of 'DESTDIR'. + + The GNU Makefile standards provide a more complete description of +these variables and their effects. +  File: bash.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash @@ -10135,16 +10542,20 @@ the Bash 'configure' recognizes. subdirectories of that directory (include files in PREFIX/'include' and the library in PREFIX/'lib'). -'--with-purify' - Define this to use the Purify memory allocation checker from - Rational Software. +'--with-libintl-prefix[=PREFIX]' + Define this to make Bash link with a locally-installed version of + the libintl library instead ofthe version in 'lib/intl'. + +'--with-libiconv-prefix[=PREFIX]' + Define this to make Bash look for libiconv in PREFIX instead of the + standard system locations. There is no version included with Bash. '--enable-minimal-config' This produces a shell with minimal features, close to the historical Bourne shell. - There are several '--enable-' options that alter how Bash is compiled -and linked, rather than changing run-time features. + There are several '--enable-' options that alter how Bash is +compiled, linked, and installed, rather than changing run-time features. '--enable-largefile' Enable support for large files @@ -10157,6 +10568,10 @@ and linked, rather than changing run-time features. This builds a Bash binary that produces profiling information to be processed by 'gprof' each time it is executed. +'--enable-separate-helpfiles' + Use external files for the documentation displayed by the 'help' + builtin instead of storing the text internally. + '--enable-static-link' This causes Bash to be linked statically, if 'gcc' is being used. This could be used to build a version to use as root's shell. @@ -10165,14 +10580,21 @@ and linked, rather than changing run-time features. following options, but it is processed first, so individual options may be enabled using 'enable-FEATURE'. - All of the following options except for 'disabled-builtins', -'direxpand-default', and 'xpg-echo-default' are enabled by default, -unless the operating system does not provide the necessary support. + All of the following options except for 'alt-array-implementation', +'disabled-builtins', 'direxpand-default', 'strict-posix-default', and +'xpg-echo-default' are enabled by default, unless the operating system +does not provide the necessary support. '--enable-alias' Allow alias expansion and include the 'alias' and 'unalias' builtins (*note Aliases::). +'--enable-alt-array-implementation' + This builds bash using an alternate implementation of arrays (*note + Arrays::) that provides faster access at the expense of using more + memory (sometimes many times more, depending on how sparse an array + is). + '--enable-arith-for-command' Include support for the alternate form of the 'for' command that behaves like the C language 'for' statement (*note Looping @@ -10192,7 +10614,7 @@ unless the operating system does not provide the necessary support. '--enable-casemod-attributes' Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the UPPERCASE + builtin and assignment statements. Variables with the 'uppercase' attribute, for example, will have their values converted to uppercase upon assignment. @@ -10251,7 +10673,7 @@ unless the operating system does not provide the necessary support. described above under *note Pattern Matching::. '--enable-extended-glob-default' - Set the default value of the EXTGLOB shell option described above + Set the default value of the 'extglob' shell option described above under *note The Shopt Builtin:: to be enabled. '--enable-function-import' @@ -10260,10 +10682,10 @@ unless the operating system does not provide the necessary support. enabled by default. '--enable-glob-asciirange-default' - Set the default value of the GLOBASCIIRANGES shell option described - above under *note The Shopt Builtin:: to be enabled. This controls - the behavior of character ranges when used in pattern matching - bracket expressions. + Set the default value of the 'globasciiranges' shell option + described above under *note The Shopt Builtin:: to be enabled. + This controls the behavior of character ranges when used in pattern + matching bracket expressions. '--enable-help-builtin' Include the 'help' builtin, which displays help on shell builtins @@ -10314,10 +10736,6 @@ unless the operating system does not provide the necessary support. Include the 'select' compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' - builtin instead of storing the text internally. - '--enable-single-help-strings' Store the text displayed by the 'help' builtin as a single string for each help topic. This aids in translating the text to @@ -10327,6 +10745,10 @@ unless the operating system does not provide the necessary support. '--enable-strict-posix-default' Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). +'--enable-translatable-strings' + Enable support for '$"STRING"' translatable strings (*note Locale + Translation::). + '--enable-usg-echo-default' A synonym for '--enable-xpg-echo-default'. @@ -10353,7 +10775,8 @@ Appendix A 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 -. + and from +. Once you have determined that a bug actually exists, use the 'bashbug' command to submit a bug report. If you have a fix, you are @@ -10479,15 +10902,15 @@ the baseline reference. substring of 'var''s value of length LENGTH, beginning at OFFSET, is present (*note Shell Parameter Expansion::). - * The expansion '${var/[/]'PATTERN'[/'REPLACEMENT']}', which matches - PATTERN and replaces it with REPLACEMENT in the value of 'var', is + * The expansion '${VAR/[/]'PATTERN'[/'REPLACEMENT']}', which matches + PATTERN and replaces it with REPLACEMENT in the value of VAR, is available (*note Shell Parameter Expansion::). * The expansion '${!PREFIX*}' expansion, which expands to the names of all shell variables whose names begin with PREFIX, is available (*note Shell Parameter Expansion::). - * Bash has INDIRECT variable expansion using '${!word}' (*note Shell + * Bash has indirect variable expansion using '${!word}' (*note Shell Parameter Expansion::). * Bash can expand positional parameters beyond '$9' using '${NUM}'. @@ -10513,8 +10936,8 @@ the baseline reference. shell uses only '!'. * Bash implements the full set of POSIX filename expansion operators, - including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING - SYMBOLS (*note Filename Expansion::). + including character classes, equivalence classes, and collating + symbols (*note Filename Expansion::). * Bash implements extended pattern matching features when the 'extglob' shell option is enabled (*note Pattern Matching::). @@ -10631,7 +11054,7 @@ the baseline reference. * Bash includes the 'caller' builtin, which displays the context of any active subroutine call (a shell function or a script executed - with the '.' or 'source' builtins). This supports the bash + with the '.' or 'source' builtins). This supports the Bash debugger. * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG' @@ -11252,18 +11675,18 @@ D.1 Index of Shell Builtin Commands * :: Bourne Shell Builtins. (line 11) * [: Bourne Shell Builtins. - (line 270) + (line 274) * alias: Bash Builtins. (line 11) * bg: Job Control Builtins. (line 7) * bind: Bash Builtins. (line 21) * break: Bourne Shell Builtins. (line 36) -* builtin: Bash Builtins. (line 104) -* caller: Bash Builtins. (line 113) +* builtin: Bash Builtins. (line 108) +* caller: Bash Builtins. (line 117) * cd: Bourne Shell Builtins. (line 44) -* command: Bash Builtins. (line 130) +* command: Bash Builtins. (line 134) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. @@ -11271,75 +11694,75 @@ D.1 Index of Shell Builtin Commands * compopt: Programmable Completion Builtins. (line 237) * continue: Bourne Shell Builtins. - (line 85) -* declare: Bash Builtins. (line 150) + (line 89) +* declare: Bash Builtins. (line 154) * dirs: Directory Stack Builtins. (line 7) * disown: Job Control Builtins. (line 101) -* echo: Bash Builtins. (line 253) -* enable: Bash Builtins. (line 302) +* echo: Bash Builtins. (line 257) +* enable: Bash Builtins. (line 306) * eval: Bourne Shell Builtins. - (line 94) + (line 98) * exec: Bourne Shell Builtins. - (line 102) + (line 106) * exit: Bourne Shell Builtins. - (line 120) + (line 124) * export: Bourne Shell Builtins. - (line 127) + (line 131) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 143) + (line 147) * hash: Bourne Shell Builtins. - (line 187) -* help: Bash Builtins. (line 331) + (line 191) +* help: Bash Builtins. (line 342) * history: Bash History Builtins. (line 46) * jobs: Job Control Builtins. (line 27) * kill: Job Control Builtins. (line 58) -* let: Bash Builtins. (line 350) -* local: Bash Builtins. (line 358) -* logout: Bash Builtins. (line 374) -* mapfile: Bash Builtins. (line 379) +* let: Bash Builtins. (line 361) +* local: Bash Builtins. (line 369) +* logout: Bash Builtins. (line 385) +* mapfile: Bash Builtins. (line 390) * popd: Directory Stack Builtins. (line 35) -* printf: Bash Builtins. (line 425) +* printf: Bash Builtins. (line 436) * pushd: Directory Stack Builtins. - (line 53) + (line 69) * pwd: Bourne Shell Builtins. - (line 207) -* read: Bash Builtins. (line 474) -* readarray: Bash Builtins. (line 570) + (line 211) +* read: Bash Builtins. (line 488) +* readarray: Bash Builtins. (line 585) * readonly: Bourne Shell Builtins. - (line 217) + (line 221) * return: Bourne Shell Builtins. - (line 236) + (line 240) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 257) + (line 261) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 579) +* source: Bash Builtins. (line 594) * suspend: Job Control Builtins. (line 113) * test: Bourne Shell Builtins. - (line 270) + (line 274) * times: Bourne Shell Builtins. - (line 349) + (line 359) * trap: Bourne Shell Builtins. - (line 355) -* type: Bash Builtins. (line 584) -* typeset: Bash Builtins. (line 616) -* ulimit: Bash Builtins. (line 622) + (line 365) +* type: Bash Builtins. (line 599) +* typeset: Bash Builtins. (line 631) +* ulimit: Bash Builtins. (line 637) * umask: Bourne Shell Builtins. - (line 404) -* unalias: Bash Builtins. (line 728) + (line 414) +* unalias: Bash Builtins. (line 743) * unset: Bourne Shell Builtins. - (line 422) + (line 432) * wait: Job Control Builtins. (line 76) @@ -11354,9 +11777,9 @@ D.2 Index of Shell Reserved Words * !: Pipelines. (line 9) * [[: Conditional Constructs. - (line 125) + (line 126) * ]]: Conditional Constructs. - (line 125) + (line 126) * {: Command Grouping. (line 21) * }: Command Grouping. (line 21) * case: Conditional Constructs. @@ -11378,7 +11801,7 @@ D.2 Index of Shell Reserved Words * in: Conditional Constructs. (line 28) * select: Conditional Constructs. - (line 83) + (line 84) * then: Conditional Constructs. (line 7) * time: Pipelines. (line 9) @@ -11394,21 +11817,21 @@ D.3 Parameter and Variable Index [index] * Menu: -* !: Special Parameters. (line 56) +* !: Special Parameters. (line 55) * #: Special Parameters. (line 39) * $: Special Parameters. (line 51) -* $!: Special Parameters. (line 57) +* $!: Special Parameters. (line 56) * $#: Special Parameters. (line 40) * $$: Special Parameters. (line 52) * $*: Special Parameters. (line 10) * $-: Special Parameters. (line 47) -* $0: Special Parameters. (line 62) +* $0: Special Parameters. (line 61) * $?: Special Parameters. (line 43) * $@: Special Parameters. (line 23) * $_: Bash Variables. (line 14) * *: Special Parameters. (line 9) * -: Special Parameters. (line 46) -* 0: Special Parameters. (line 61) +* 0: Special Parameters. (line 60) * ?: Special Parameters. (line 42) * @: Special Parameters. (line 22) * _: Bash Variables. (line 13) @@ -11446,20 +11869,20 @@ D.3 Parameter and Variable Index * colored-completion-prefix: Readline Init File Syntax. (line 55) * colored-stats: Readline Init File Syntax. - (line 62) + (line 65) * COLUMNS: Bash Variables. (line 202) * comment-begin: Readline Init File Syntax. - (line 68) + (line 71) * completion-display-width: Readline Init File Syntax. - (line 73) + (line 76) * completion-ignore-case: Readline Init File Syntax. - (line 80) + (line 83) * completion-map-case: Readline Init File Syntax. - (line 85) + (line 88) * completion-prefix-display-length: Readline Init File Syntax. - (line 91) + (line 94) * completion-query-items: Readline Init File Syntax. - (line 98) + (line 101) * COMPREPLY: Bash Variables. (line 254) * COMP_CWORD: Bash Variables. (line 208) * COMP_KEY: Bash Variables. (line 237) @@ -11469,29 +11892,31 @@ D.3 Parameter and Variable Index * COMP_WORDBREAKS: Bash Variables. (line 241) * COMP_WORDS: Bash Variables. (line 247) * convert-meta: Readline Init File Syntax. - (line 108) + (line 112) * COPROC: Bash Variables. (line 260) * DIRSTACK: Bash Variables. (line 264) * disable-completion: Readline Init File Syntax. - (line 116) + (line 120) * echo-control-characters: Readline Init File Syntax. - (line 121) + (line 125) * editing-mode: Readline Init File Syntax. - (line 126) + (line 130) * EMACS: Bash Variables. (line 274) * emacs-mode-string: Readline Init File Syntax. - (line 132) + (line 136) +* enable-active-region: Readline Init File Syntax. + (line 146) * enable-bracketed-paste: Readline Init File Syntax. - (line 142) + (line 158) * enable-keypad: Readline Init File Syntax. - (line 150) + (line 166) * ENV: Bash Variables. (line 279) * EPOCHREALTIME: Bash Variables. (line 284) * EPOCHSECONDS: Bash Variables. (line 292) * EUID: Bash Variables. (line 299) * EXECIGNORE: Bash Variables. (line 303) * expand-tilde: Readline Init File Syntax. - (line 161) + (line 177) * FCEDIT: Bash Variables. (line 316) * FIGNORE: Bash Variables. (line 320) * FUNCNAME: Bash Variables. (line 326) @@ -11505,15 +11930,15 @@ D.3 Parameter and Variable Index * HISTFILESIZE: Bash Variables. (line 402) * HISTIGNORE: Bash Variables. (line 413) * history-preserve-point: Readline Init File Syntax. - (line 165) + (line 181) * history-size: Readline Init File Syntax. - (line 171) + (line 187) * HISTSIZE: Bash Variables. (line 433) * HISTTIMEFORMAT: Bash Variables. (line 440) * HOME: Bourne Shell Variables. (line 13) * horizontal-scroll-mode: Readline Init File Syntax. - (line 180) + (line 196) * HOSTFILE: Bash Variables. (line 448) * HOSTNAME: Bash Variables. (line 459) * HOSTTYPE: Bash Variables. (line 462) @@ -11521,18 +11946,21 @@ D.3 Parameter and Variable Index (line 18) * IGNOREEOF: Bash Variables. (line 465) * input-meta: Readline Init File Syntax. - (line 189) + (line 205) * INPUTRC: Bash Variables. (line 475) * INSIDE_EMACS: Bash Variables. (line 479) * isearch-terminators: Readline Init File Syntax. - (line 197) + (line 213) * keymap: Readline Init File Syntax. - (line 204) -* LANG: Bash Variables. (line 485) + (line 220) +* LANG: Creating Internationalized Scripts. + (line 51) +* LANG <1>: Bash Variables. (line 485) * LC_ALL: Bash Variables. (line 489) * LC_COLLATE: Bash Variables. (line 493) * LC_CTYPE: Bash Variables. (line 500) -* LC_MESSAGES: Locale Translation. (line 15) +* LC_MESSAGES: Creating Internationalized Scripts. + (line 51) * LC_MESSAGES <1>: Bash Variables. (line 505) * LC_NUMERIC: Bash Variables. (line 509) * LC_TIME: Bash Variables. (line 513) @@ -11546,15 +11974,15 @@ D.3 Parameter and Variable Index (line 27) * MAPFILE: Bash Variables. (line 540) * mark-modified-lines: Readline Init File Syntax. - (line 234) + (line 250) * mark-symlinked-directories: Readline Init File Syntax. - (line 239) + (line 255) * match-hidden-files: Readline Init File Syntax. - (line 244) + (line 260) * menu-complete-display-prefix: Readline Init File Syntax. - (line 251) + (line 267) * meta-flag: Readline Init File Syntax. - (line 189) + (line 205) * OLDPWD: Bash Variables. (line 544) * OPTARG: Bourne Shell Variables. (line 34) @@ -11563,9 +11991,9 @@ D.3 Parameter and Variable Index (line 38) * OSTYPE: Bash Variables. (line 551) * output-meta: Readline Init File Syntax. - (line 256) + (line 272) * page-completions: Readline Init File Syntax. - (line 262) + (line 278) * PATH: Bourne Shell Variables. (line 42) * PIPESTATUS: Bash Variables. (line 554) @@ -11582,37 +12010,40 @@ D.3 Parameter and Variable Index * PS4: Bash Variables. (line 595) * PWD: Bash Variables. (line 603) * RANDOM: Bash Variables. (line 606) -* READLINE_LINE: Bash Variables. (line 612) -* READLINE_MARK: Bash Variables. (line 616) -* READLINE_POINT: Bash Variables. (line 622) -* REPLY: Bash Variables. (line 626) +* READLINE_ARGUMENT: Bash Variables. (line 612) +* READLINE_LINE: Bash Variables. (line 616) +* READLINE_MARK: Bash Variables. (line 620) +* READLINE_POINT: Bash Variables. (line 626) +* REPLY: Bash Variables. (line 630) * revert-all-at-newline: Readline Init File Syntax. - (line 272) -* SECONDS: Bash Variables. (line 629) -* SHELL: Bash Variables. (line 638) -* SHELLOPTS: Bash Variables. (line 643) -* SHLVL: Bash Variables. (line 652) + (line 288) +* SECONDS: Bash Variables. (line 633) +* SHELL: Bash Variables. (line 642) +* SHELLOPTS: Bash Variables. (line 647) +* SHLVL: Bash Variables. (line 656) * show-all-if-ambiguous: Readline Init File Syntax. - (line 278) + (line 294) * show-all-if-unmodified: Readline Init File Syntax. - (line 284) + (line 300) * show-mode-in-prompt: Readline Init File Syntax. - (line 293) + (line 309) * skip-completed-text: Readline Init File Syntax. - (line 299) -* SRANDOM: Bash Variables. (line 657) -* TEXTDOMAIN: Locale Translation. (line 15) -* TEXTDOMAINDIR: Locale Translation. (line 15) -* TIMEFORMAT: Bash Variables. (line 666) -* TMOUT: Bash Variables. (line 704) -* TMPDIR: Bash Variables. (line 716) -* UID: Bash Variables. (line 720) + (line 315) +* SRANDOM: Bash Variables. (line 661) +* TEXTDOMAIN: Creating Internationalized Scripts. + (line 51) +* TEXTDOMAINDIR: Creating Internationalized Scripts. + (line 51) +* TIMEFORMAT: Bash Variables. (line 670) +* TMOUT: Bash Variables. (line 708) +* TMPDIR: Bash Variables. (line 720) +* UID: Bash Variables. (line 724) * vi-cmd-mode-string: Readline Init File Syntax. - (line 312) + (line 328) * vi-ins-mode-string: Readline Init File Syntax. - (line 323) + (line 339) * visible-stats: Readline Init File Syntax. - (line 334) + (line 350)  File: bash.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -11628,7 +12059,7 @@ D.4 Function Index * accept-line (Newline or Return): Commands For History. (line 6) * alias-expand-line (): Miscellaneous Commands. - (line 125) + (line 131) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. @@ -11677,7 +12108,7 @@ D.4 Function Index (line 57) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * display-shell-version (C-x C-v): Miscellaneous Commands. - (line 110) + (line 116) * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands. (line 14) * downcase-word (M-l): Commands For Text. (line 62) @@ -11690,7 +12121,7 @@ D.4 Function Index * dynamic-complete-history (M-): Commands For Completion. (line 90) * edit-and-execute-command (C-x C-e): Miscellaneous Commands. - (line 134) + (line 140) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. @@ -11698,21 +12129,23 @@ D.4 Function Index * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 37) +* fetch-history (): Commands For History. + (line 103) * forward-backward-delete-char (): Commands For Text. (line 21) * forward-char (C-f): Commands For Moving. (line 12) * forward-search-history (C-s): Commands For History. (line 33) * forward-word (M-f): Commands For Moving. (line 18) * glob-complete-word (M-g): Miscellaneous Commands. - (line 92) -* glob-expand-word (C-x *): Miscellaneous Commands. (line 98) -* glob-list-expansions (C-x g): Miscellaneous Commands. +* glob-expand-word (C-x *): Miscellaneous Commands. (line 104) +* glob-list-expansions (C-x g): Miscellaneous Commands. + (line 110) * history-and-alias-expand-line (): Miscellaneous Commands. - (line 128) + (line 134) * history-expand-line (M-^): Miscellaneous Commands. - (line 118) + (line 124) * history-search-backward (): Commands For History. (line 57) * history-search-forward (): Commands For History. @@ -11726,7 +12159,7 @@ D.4 Function Index * insert-completions (M-*): Commands For Completion. (line 22) * insert-last-argument (M-. or M-_): Miscellaneous Commands. - (line 131) + (line 137) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. @@ -11736,7 +12169,7 @@ D.4 Function Index * kill-word (M-d): Commands For Killing. (line 23) * magic-space (): Miscellaneous Commands. - (line 121) + (line 127) * menu-complete (): Commands For Completion. (line 26) * menu-complete-backward (): Commands For Completion. @@ -11784,7 +12217,7 @@ D.4 Function Index (line 37) * shell-backward-word (M-C-b): Commands For Moving. (line 30) * shell-expand-line (M-C-e): Miscellaneous Commands. - (line 113) + (line 119) * shell-forward-word (M-C-f): Commands For Moving. (line 26) * shell-kill-word (M-C-d): Commands For Killing. (line 32) @@ -11792,6 +12225,8 @@ D.4 Function Index (line 41) * skip-csi-sequence (): Miscellaneous Commands. (line 52) +* spell-correct-word (C-x s): Miscellaneous Commands. + (line 92) * start-kbd-macro (C-x (): Keyboard Macros. (line 6) * tilde-expand (M-&): Miscellaneous Commands. (line 30) @@ -11913,6 +12348,8 @@ D.5 Concept Index * interactive shell: Invoking Bash. (line 131) * interactive shell <1>: Interactive Shells. (line 6) * internationalization: Locale Translation. (line 6) +* internationalized scripts: Creating Internationalized Scripts. + (line 3) * job: Definitions. (line 38) * job control: Definitions. (line 42) * job control <1>: Job Control Basics. (line 6) @@ -11968,6 +12405,8 @@ D.5 Concept Index * special builtin: Definitions. (line 82) * special builtin <1>: Special Builtins. (line 6) * startup files: Bash Startup Files. (line 6) +* string translations: Creating Internationalized Scripts. + (line 3) * suspending jobs: Job Control Basics. (line 6) * tilde expansion: Tilde Expansion. (line 6) * token: Definitions. (line 86) @@ -11983,137 +12422,138 @@ D.5 Concept Index  Tag Table: -Node: Top895 -Node: Introduction2813 -Node: What is Bash?3029 -Node: What is a shell?4143 -Node: Definitions6681 -Node: Basic Shell Features9632 -Node: Shell Syntax10851 -Node: Shell Operation11877 -Node: Quoting13170 -Node: Escape Character14470 -Node: Single Quotes14955 -Node: Double Quotes15303 -Node: ANSI-C Quoting16581 -Node: Locale Translation17840 -Node: Comments18993 -Node: Shell Commands19611 -Node: Reserved Words20549 -Node: Simple Commands21305 -Node: Pipelines21959 -Node: Lists24891 -Node: Compound Commands26682 -Node: Looping Constructs27694 -Node: Conditional Constructs30189 -Node: Command Grouping41760 -Node: Coprocesses43239 -Node: GNU Parallel45142 -Node: Shell Functions49443 -Node: Shell Parameters56650 -Node: Positional Parameters61063 -Node: Special Parameters61963 -Node: Shell Expansions65187 -Node: Brace Expansion67310 -Node: Tilde Expansion70033 -Node: Shell Parameter Expansion72650 -Node: Command Substitution87779 -Node: Arithmetic Expansion89134 -Node: Process Substitution90066 -Node: Word Splitting91186 -Node: Filename Expansion93130 -Node: Pattern Matching95679 -Node: Quote Removal99665 -Node: Redirections99960 -Node: Executing Commands109530 -Node: Simple Command Expansion110200 -Node: Command Search and Execution112154 -Node: Command Execution Environment114530 -Node: Environment117514 -Node: Exit Status119173 -Node: Signals120843 -Node: Shell Scripts122810 -Node: Shell Builtin Commands125822 -Node: Bourne Shell Builtins127860 -Node: Bash Builtins148789 -Node: Modifying Shell Behavior178898 -Node: The Set Builtin179243 -Node: The Shopt Builtin189656 -Node: Special Builtins204566 -Node: Shell Variables205545 -Node: Bourne Shell Variables205982 -Node: Bash Variables208086 -Node: Bash Features240720 -Node: Invoking Bash241733 -Node: Bash Startup Files247746 -Node: Interactive Shells252849 -Node: What is an Interactive Shell?253259 -Node: Is this Shell Interactive?253908 -Node: Interactive Shell Behavior254723 -Node: Bash Conditional Expressions258237 -Node: Shell Arithmetic262814 -Node: Aliases265754 -Node: Arrays268374 -Node: The Directory Stack274383 -Node: Directory Stack Builtins275167 -Node: Controlling the Prompt278135 -Node: The Restricted Shell281085 -Node: Bash POSIX Mode283679 -Node: Shell Compatibility Mode294715 -Node: Job Control301371 -Node: Job Control Basics301831 -Node: Job Control Builtins306827 -Node: Job Control Variables312227 -Node: Command Line Editing313383 -Node: Introduction and Notation315054 -Node: Readline Interaction316677 -Node: Readline Bare Essentials317868 -Node: Readline Movement Commands319651 -Node: Readline Killing Commands320611 -Node: Readline Arguments322529 -Node: Searching323573 -Node: Readline Init File325759 -Node: Readline Init File Syntax327018 -Node: Conditional Init Constructs347556 -Node: Sample Init File351752 -Node: Bindable Readline Commands354876 -Node: Commands For Moving356080 -Node: Commands For History358131 -Node: Commands For Text362924 -Node: Commands For Killing366573 -Node: Numeric Arguments369606 -Node: Commands For Completion370745 -Node: Keyboard Macros374936 -Node: Miscellaneous Commands375623 -Node: Readline vi Mode381307 -Node: Programmable Completion382214 -Node: Programmable Completion Builtins389994 -Node: A Programmable Completion Example400689 -Node: Using History Interactively405936 -Node: Bash History Facilities406620 -Node: Bash History Builtins409625 -Node: History Interaction414354 -Node: Event Designators417974 -Node: Word Designators419328 -Node: Modifiers421088 -Node: Installing Bash422899 -Node: Basic Installation424036 -Node: Compilers and Options427294 -Node: Compiling For Multiple Architectures428035 -Node: Installation Names429728 -Node: Specifying the System Type430546 -Node: Sharing Defaults431262 -Node: Operation Controls431935 -Node: Optional Features432893 -Node: Reporting Bugs443411 -Node: Major Differences From The Bourne Shell444605 -Node: GNU Free Documentation License461457 -Node: Indexes486634 -Node: Builtin Index487088 -Node: Reserved Word Index493915 -Node: Variable Index496363 -Node: Function Index512260 -Node: Concept Index525770 +Node: Top894 +Node: Introduction2811 +Node: What is Bash?3024 +Node: What is a shell?4135 +Node: Definitions6670 +Node: Basic Shell Features9618 +Node: Shell Syntax10834 +Node: Shell Operation11857 +Node: Quoting13147 +Node: Escape Character14448 +Node: Single Quotes14930 +Node: Double Quotes15275 +Node: ANSI-C Quoting16550 +Node: Locale Translation17857 +Node: Creating Internationalized Scripts19165 +Node: Comments23279 +Node: Shell Commands23894 +Node: Reserved Words24829 +Node: Simple Commands25582 +Node: Pipelines26233 +Node: Lists29189 +Node: Compound Commands30981 +Node: Looping Constructs31990 +Node: Conditional Constructs34482 +Node: Command Grouping48823 +Node: Coprocesses50298 +Node: GNU Parallel52958 +Node: Shell Functions53872 +Node: Shell Parameters61160 +Node: Positional Parameters65545 +Node: Special Parameters66444 +Node: Shell Expansions69655 +Node: Brace Expansion71779 +Node: Tilde Expansion74510 +Node: Shell Parameter Expansion77128 +Node: Command Substitution94991 +Node: Arithmetic Expansion96343 +Node: Process Substitution97308 +Node: Word Splitting98425 +Node: Filename Expansion100366 +Node: Pattern Matching103112 +Node: Quote Removal107717 +Node: Redirections108009 +Node: Executing Commands117666 +Node: Simple Command Expansion118333 +Node: Command Search and Execution120440 +Node: Command Execution Environment122815 +Node: Environment125847 +Node: Exit Status127507 +Node: Signals129288 +Node: Shell Scripts132734 +Node: Shell Builtin Commands135758 +Node: Bourne Shell Builtins137793 +Node: Bash Builtins159251 +Node: Modifying Shell Behavior190104 +Node: The Set Builtin190446 +Node: The Shopt Builtin201044 +Node: Special Builtins216953 +Node: Shell Variables217929 +Node: Bourne Shell Variables218363 +Node: Bash Variables220464 +Node: Bash Features253277 +Node: Invoking Bash254287 +Node: Bash Startup Files260297 +Node: Interactive Shells265397 +Node: What is an Interactive Shell?265804 +Node: Is this Shell Interactive?266450 +Node: Interactive Shell Behavior267262 +Node: Bash Conditional Expressions270888 +Node: Shell Arithmetic275527 +Node: Aliases278468 +Node: Arrays281078 +Node: The Directory Stack287322 +Node: Directory Stack Builtins288103 +Node: Controlling the Prompt292360 +Node: The Restricted Shell295322 +Node: Bash POSIX Mode297929 +Node: Shell Compatibility Mode309199 +Node: Job Control317225 +Node: Job Control Basics317682 +Node: Job Control Builtins322681 +Node: Job Control Variables328078 +Node: Command Line Editing329231 +Node: Introduction and Notation330899 +Node: Readline Interaction332519 +Node: Readline Bare Essentials333707 +Node: Readline Movement Commands335487 +Node: Readline Killing Commands336444 +Node: Readline Arguments338359 +Node: Searching339400 +Node: Readline Init File341583 +Node: Readline Init File Syntax342841 +Node: Conditional Init Constructs364326 +Node: Sample Init File368519 +Node: Bindable Readline Commands371640 +Node: Commands For Moving372841 +Node: Commands For History374889 +Node: Commands For Text379880 +Node: Commands For Killing383526 +Node: Numeric Arguments386556 +Node: Commands For Completion387692 +Node: Keyboard Macros391880 +Node: Miscellaneous Commands392564 +Node: Readline vi Mode398500 +Node: Programmable Completion399404 +Node: Programmable Completion Builtins407181 +Node: A Programmable Completion Example417873 +Node: Using History Interactively423117 +Node: Bash History Facilities423798 +Node: Bash History Builtins426800 +Node: History Interaction431805 +Node: Event Designators435422 +Node: Word Designators436773 +Node: Modifiers438530 +Node: Installing Bash440338 +Node: Basic Installation441472 +Node: Compilers and Options445191 +Node: Compiling For Multiple Architectures445929 +Node: Installation Names447619 +Node: Specifying the System Type449725 +Node: Sharing Defaults450438 +Node: Operation Controls451108 +Node: Optional Features452063 +Node: Reporting Bugs463278 +Node: Major Differences From The Bourne Shell464550 +Node: GNU Free Documentation License481397 +Node: Indexes506571 +Node: Builtin Index507022 +Node: Reserved Word Index513846 +Node: Variable Index516291 +Node: Function Index532780 +Node: Concept Index546561  End Tag Table diff --git a/doc/bash.pdf b/doc/bash.pdf index d8d784ee712f1818200ffe00b1f2ad6ad5694d27..59003607e3c6f0672668c04d3ee17469eb9e6000 100644 GIT binary patch delta 337040 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 delta 322502 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%0AAw#82wQ1hp;od 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 z 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≧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

AqtVaRNvPrb;YBA&2Q!c^TBwnM()isAe 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 diff --git a/doc/bash.ps b/doc/bash.ps index bd38ef3b..2715369e 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,13 +1,13 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.22.4 -%%CreationDate: Wed Nov 18 15:13:06 2020 +%%CreationDate: Tue Jan 11 15:02:05 2022 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%+ font Symbol %%DocumentSuppliedResources: procset grops 1.22 4 -%%Pages: 83 +%%Pages: 86 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -245,7 +245,7 @@ BP 108 96 Q(ain SHell)-.05 E F1(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF (bash)108 124.8 Q F0([options] [command_string | \214le])2.5 E F1 (COPYRIGHT)72 141.6 Q F0(Bash is Cop)108 153.6 Q -(yright \251 1989-2020 by the Free Softw)-.1 E(are F)-.1 E +(yright \251 1989-2021 by the Free Softw)-.1 E(are F)-.1 E (oundation, Inc.)-.15 E F1(DESCRIPTION)72 170.4 Q F2(Bash)108 182.4 Q F0 .973(is an)3.474 F F2(sh)3.473 E F0 .973 (-compatible command language interpreter that e)B -.15(xe)-.15 G .973 @@ -339,8 +339,8 @@ F .475(xtended deb)-.15 F(ug-)-.2 E 1.598(instead of the standard personal initialization \214le)4.279 F F3 (~/.bashr)3.598 E(c)-.37 E F0 1.598(if the)4.408 F(shell is interacti) 144 710.4 Q .3 -.15(ve \()-.25 H(see).15 E F4(INV)2.5 E(OCA)-.405 E -(TION)-.855 E F0(belo)2.25 E(w\).)-.25 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(1)195.395 E 0 Cg EP +(TION)-.855 E F0(belo)2.25 E(w\).)-.25 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(1)190.955 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP @@ -409,9 +409,9 @@ F4(INV)72 463.2 Q(OCA)-.493 E(TION)-1.04 E F0(A)108 475.2 Q F2(lo)2.5 E 108 492 Q F2(inter)2.734 E(active)-.15 E F0 .234 (shell is one started without non-option ar)2.734 F .234 (guments \(unless)-.18 F F12.734 E F0 .233 -(is speci\214ed\) and without the)2.734 F F12.733 E F0 .509(optio\ -n whose standard input and error are both connected to terminals \(as d\ -etermined by)108 504 R F2(isatty)3.019 E F0 .509(\(3\)\), or one).32 F +(is speci\214ed\) and without the)2.734 F F12.733 E F0 .352(optio\ +n, whose standard input and error are both connected to terminals \(as \ +determined by)108 504 R F2(isatty)2.863 E F0 .353(\(3\)\), or one).32 F .946(started with the)108 516 R F13.445 E F0(option.)3.445 E F3 (PS1)5.945 E F0 .945(is set and)3.195 F F1<24ad>3.445 E F0(includes) 3.445 E F1(i)3.445 E F0(if)3.445 E F1(bash)3.445 E F0 .945(is interacti) @@ -463,8 +463,8 @@ F2(~/.bashr)108 691.2 Q(c)-.37 E F0 2.535(,i)C 2.535(ft)-2.535 G .035 Q F1(bash)5.306 E F0 2.806(is started non-interacti)5.306 F -.15(ve)-.25 G(ly).15 E 5.306(,t)-.65 G 5.306(or)-5.306 G 2.806 (un a shell script, for e)-5.306 F 2.805(xample, it looks for the v)-.15 -F(ariable)-.25 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(2) -195.395 E 0 Cg EP +F(ariable)-.25 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(2) +190.955 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP @@ -591,3359 +591,3486 @@ F2(case)3.144 E F0(or)3.144 E F2(select)3.143 E F0 .643(command \(only) (are v)108 640.8 Q(alid\):)-.25 E F2 11.295(!c)144 657.6 S 8.795 (ase copr)-11.295 F 8.795(oc do done elif else esac \214 f)-.18 F 8.795 (or function if in select then)-.25 F 7.5(until while { } time [[ ]])144 -669.6 R F6(SHELL GRAMMAR)72 686.4 Q F2(Simple Commands)87 698.4 Q F0(A) -108 710.4 Q F4 .389(simple command)2.889 F F0 .389 -(is a sequence of optional v)2.889 F .388(ariable assignments follo)-.25 -F .388(wed by)-.25 F F2(blank)2.888 E F0 .388(-separated w)B .388 -(ords and)-.1 F .815(redirections, and terminated by a)108 722.4 R F4 -(contr)3.315 E .815(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815 -(he \214rst w)-5.815 F .816(ord speci\214es the command to be e)-.1 F --.15(xe)-.15 G(cuted,).15 E(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(3)195.395 E 0 Cg EP +669.6 R F6(SHELL GRAMMAR)72 686.4 Q F0 +(This section describes the syntax of the v)108 698.4 Q +(arious forms of shell commands.)-.25 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(3)190.955 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(and is passed as ar)108 84 Q(gument zero.)-.18 E(The remaining w)5 E +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(Simple Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF .389 +(simple command)2.889 F F0 .389(is a sequence of optional v)2.889 F .388 +(ariable assignments follo)-.25 F .388(wed by)-.25 F F1(blank)2.888 E F0 +.388(-separated w)B .388(ords and)-.1 F .815 +(redirections, and terminated by a)108 108 R F2(contr)3.315 E .815 +(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815(he \214rst w)-5.815 F +.816(ord speci\214es the command to be e)-.1 F -.15(xe)-.15 G(cuted,).15 +E(and is passed as ar)108 120 Q(gument zero.)-.18 E(The remaining w)5 E (ords are passed as ar)-.1 E(guments to the in)-.18 E -.2(vo)-.4 G -.1 -(ke).2 G 2.5(dc).1 G(ommand.)-2.5 E(The return v)108 100.8 Q(alue of a) --.25 E/F1 10/Times-Italic@0 SF(simple command)2.5 E F0(is its e)2.5 E -(xit status, or 128+)-.15 E F1(n)A F0 -(if the command is terminated by signal)3.333 E F1(n)2.86 E F0(.).24 E -/F2 10/Times-Bold@0 SF(Pipelines)87 117.6 Q F0(A)108 129.6 Q F1 -(pipeline)2.996 E F0 .496(is a sequence of one or more commands separat\ -ed by one of the control operators)2.996 F F2(|)2.996 E F0(or)2.996 E F2 -(|&)2.996 E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 -141.6 Q([)144 158.4 Q F2(time)A F0([)2.5 E F2A F0(]] [ ! ])A F1 -(command)2.5 E F0 2.5([[)2.5 G F2(|)-2.5 E/F3 10/Symbol SFA F2(|&)A -F0(])A F1(command2)2.5 E F0(... ])2.5 E .231(The standard output of)108 -175.2 R F1(command)2.931 E F0 .232 -(is connected via a pipe to the standard input of)3.502 F F1(command2) -2.932 E F0 5.232(.T).02 G .232(his connec-)-5.232 F .643 -(tion is performed before an)108 187.2 R 3.143(yr)-.15 G .642 -(edirections speci\214ed by the command \(see)-3.143 F/F4 9/Times-Bold@0 -SF(REDIRECTION)3.142 E F0(belo)2.892 E 3.142(w\). If)-.25 F F2(|&)3.142 -E F0(is)3.142 E(used,)108 199.2 Q F1(command)2.663 E F0 1.263 -.55('s s) -D .163(tandard error).55 F 2.663(,i)-.4 G 2.663(na)-2.663 G .163 -(ddition to its standard output, is connected to)-2.663 F F1(command2) -2.664 E F0 1.264 -.55('s s)D .164(tandard in-).55 F .438 -(put through the pipe; it is shorthand for)108 211.2 R F2 .437(2>&1 |) -2.937 F F0 5.437(.T)C .437 -(his implicit redirection of the standard error to the stan-)-5.437 F -(dard output is performed after an)108 223.2 Q 2.5(yr)-.15 G -(edirections speci\214ed by the command.)-2.5 E .48 -(The return status of a pipeline is the e)108 240 R .48 -(xit status of the last command, unless the)-.15 F F2(pipefail)2.98 E F0 -.48(option is enabled.)2.98 F(If)108 252 Q F2(pipefail)2.687 E F0 .187 +(ke).2 G 2.5(dc).1 G(ommand.)-2.5 E(The return v)108 136.8 Q(alue of a) +-.25 E F2(simple command)2.5 E F0(is its e)2.5 E(xit status, or 128+) +-.15 E F2(n)A F0(if the command is terminated by signal)3.333 E F2(n) +2.86 E F0(.).24 E F1(Pipelines)87 153.6 Q F0(A)108 165.6 Q F2(pipeline) +2.996 E F0 .496(is a sequence of one or more commands separated by one \ +of the control operators)2.996 F F1(|)2.996 E F0(or)2.996 E F1(|&)2.996 +E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 177.6 Q([)144 +194.4 Q F1(time)A F0([)2.5 E F1A F0(]] [ ! ])A F2(command1)2.5 E +F0 2.5([[)2.5 G F1(|)-2.5 E/F3 10/Symbol SFA F1(|&)A F0(])A F2 +(command2)2.5 E F0(... ])2.5 E .799(The standard output of)108 211.2 R +F2(command1)3.499 E F0 .799 +(is connected via a pipe to the standard input of)3.299 F F2(command2) +3.5 E F0 5.8(.T).02 G .8(his con-)-5.8 F .215 +(nection is performed before an)108 223.2 R 2.715(yr)-.15 G .214 +(edirections speci\214ed by the)-2.715 F F2(command1)2.914 E F0(\(see)A +/F4 9/Times-Bold@0 SF(REDIRECTION)2.714 E F0(belo)2.464 E 2.714(w\). If) +-.25 F F1(|&)2.714 E F0 .126(is used,)108 235.2 R F2(command1)2.626 E F0 +1.226 -.55('s s)D .126(tandard error).55 F 2.626(,i)-.4 G 2.626(na) +-2.626 G .126(ddition to its standard output, is connected to)-2.626 F +F2(command2)2.626 E F0 1.226 -.55('s s)D(tandard).55 E .028 +(input through the pipe; it is shorthand for)108 247.2 R F1 .028(2>&1 |) +2.528 F F0 5.028(.T)C .028 +(his implicit redirection of the standard error to the stan-)-5.028 F +(dard output is performed after an)108 259.2 Q 2.5(yr)-.15 G +(edirections speci\214ed by)-2.5 E F2(command1)2.5 E F0(.)A .48 +(The return status of a pipeline is the e)108 276 R .48 +(xit status of the last command, unless the)-.15 F F1(pipefail)2.98 E F0 +.48(option is enabled.)2.98 F(If)108 288 Q F1(pipefail)2.687 E F0 .187 (is enabled, the pipeline')2.687 F 2.687(sr)-.55 G .186 (eturn status is the v)-2.687 F .186 (alue of the last \(rightmost\) command to e)-.25 F .186(xit with a)-.15 -F .61(non-zero status, or zero if all commands e)108 264 R .611 +F .61(non-zero status, or zero if all commands e)108 300 R .611 (xit successfully)-.15 F 5.611(.I)-.65 G 3.111(ft)-5.611 G .611 -(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F2(!)3.111 E F0 .611 -(precedes a pipeline, the)5.611 F -.15(ex)108 276 S .55 +(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F1(!)3.111 E F0 .611 +(precedes a pipeline, the)5.611 F -.15(ex)108 312 S .55 (it status of that pipeline is the logical ne).15 F -.05(ga)-.15 G .55 (tion of the e).05 F .55(xit status as described abo)-.15 F -.15(ve)-.15 G 5.55(.T).15 G .55(he shell w)-5.55 F .55(aits for)-.1 F -(all commands in the pipeline to terminate before returning a v)108 288 -Q(alue.)-.25 E .298(If the)108 304.8 R F2(time)2.799 E F0(reserv)2.799 E +(all commands in the pipeline to terminate before returning a v)108 324 +Q(alue.)-.25 E .298(If the)108 340.8 R F1(time)2.799 E F0(reserv)2.799 E .299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as well as u\ -ser and system time consumed by its)-.1 F -.15(exe)108 316.8 S .14 -(cution are reported when the pipeline terminates.).15 F(The)5.139 E F2 +ser and system time consumed by its)-.1 F -.15(exe)108 352.8 S .14 +(cution are reported when the pipeline terminates.).15 F(The)5.139 E F1 2.639 E F0 .139(option changes the output format to that spec-) -2.639 F .302(i\214ed by POSIX.)108 328.8 R .303(When the shell is in) -5.302 F F1 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303 -(oes not recognize)-2.803 F F2(time)2.803 E F0 .303(as a reserv)2.803 F -.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 340.8 Q .736 +2.639 F .302(i\214ed by POSIX.)108 364.8 R .303(When the shell is in) +5.302 F F2 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303 +(oes not recognize)-2.803 F F1(time)2.803 E F0 .303(as a reserv)2.803 F +.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 376.8 Q .736 (en be)-.1 F .736(gins with a `-'.)-.15 F(The)5.736 E F4(TIMEFORMA)3.236 E(T)-.855 E F0 -.25(va)2.986 G .736 (riable may be set to a format string that speci\214es ho).25 F 3.235 (wt)-.25 G(he)-3.235 E .879 (timing information should be displayed; see the description of)108 -352.8 R F4(TIMEFORMA)3.38 E(T)-.855 E F0(under)3.13 E F2 .88(Shell V) -3.38 F(ariables)-.92 E F0(be-)3.38 E(lo)108 364.8 Q -.65(w.)-.25 G .162 -(When the shell is in)108 381.6 R F1 .162(posix mode)2.662 F F0(,)A F2 +388.8 R F4(TIMEFORMA)3.38 E(T)-.855 E F0(under)3.13 E F1 .88(Shell V) +3.38 F(ariables)-.92 E F0(be-)3.38 E(lo)108 400.8 Q -.65(w.)-.25 G .162 +(When the shell is in)108 417.6 R F2 .162(posix mode)2.662 F F0(,)A F1 (time)2.662 E F0 .162(may be follo)2.662 F .161(wed by a ne)-.25 F 2.661 (wline. In)-.25 F .161(this case, the shell displays the to-)2.661 F .243(tal user and system time consumed by the shell and its children.) -108 393.6 R(The)5.243 E F4(TIMEFORMA)2.743 E(T)-.855 E F0 -.25(va)2.493 +108 429.6 R(The)5.243 E F4(TIMEFORMA)2.743 E(T)-.855 E F0 -.25(va)2.493 G .243(riable may be used).25 F -(to specify the format of the time information.)108 405.6 Q .656 -(Each command in a pipeline is e)108 422.4 R -.15(xe)-.15 G .655 -(cuted as a separate process \(i.e., in a subshell\).).15 F(See)5.655 E -F4 .655(COMMAND EXE-)3.155 F .05(CUTION ENVIR)108 434.4 R(ONMENT)-.27 E -F0 .051(for a description of a subshell en)2.3 F 2.551(vironment. If)-.4 -F(the)2.551 E F2(lastpipe)2.551 E F0 .051(option is enabled us-)2.551 F -.416(ing the)108 446.4 R F2(shopt)2.916 E F0 -.2(bu)2.916 G .416 -(iltin \(see the description of).2 F F2(shopt)2.916 E F0(belo)2.916 E -.416(w\), the last element of a pipeline may be run by the)-.25 F -(shell process.)108 458.4 Q F2(Lists)87 475.2 Q F0(A)108 487.2 Q F1 -(list)2.849 E F0 .349(is a sequence of one or more pipelines separated \ -by one of the operators)2.849 F F2(;)2.85 E F0(,)A F2(&)2.85 E F0(,)A F2 -(&&)2.85 E F0 2.85(,o)C(r)-2.85 E F2(||)2.85 E F0 2.85(,a)C .35 -(nd option-)-2.85 F(ally terminated by one of)108 499.2 Q F2(;)2.5 E F0 -(,)A F2(&)2.5 E F0 2.5(,o)C(r)-2.5 E F2()2.5 E F0(.)A .961 -(Of these list operators,)108 516 R F2(&&)3.461 E F0(and)3.461 E F2(||) +(to specify the format of the time information.)108 441.6 Q .426 +(Each command in a pipeline is e)108 458.4 R -.15(xe)-.15 G .426 +(cuted in a).15 F F2(subshell)2.926 E F0 2.926(,w)C .426 +(hich is a separate process.)-2.926 F(See)5.426 E F4 .426(COMMAND EXE-) +2.926 F .153(CUTION ENVIR)108 470.4 R(ONMENT)-.27 E F0 .153 +(for a description of subshells and a subshell en)2.403 F 2.653 +(vironment. If)-.4 F(the)2.653 E F1(lastpipe)2.653 E F0(option)2.653 E +.648(is enabled using the)108 482.4 R F1(shopt)3.148 E F0 -.2(bu)3.147 G +.647(iltin \(see the description of).2 F F1(shopt)3.147 E F0(belo)3.147 +E .647(w\), the last element of a pipeline may)-.25 F +(be run by the shell process when job control is not acti)108 494.4 Q +-.15(ve)-.25 G(.).15 E F1(Lists)87 511.2 Q F0(A)108 523.2 Q F2(list) +2.849 E F0 .349(is a sequence of one or more pipelines separated by one\ + of the operators)2.849 F F1(;)2.85 E F0(,)A F1(&)2.85 E F0(,)A F1(&&) +2.85 E F0 2.85(,o)C(r)-2.85 E F1(||)2.85 E F0 2.85(,a)C .35(nd option-) +-2.85 F(ally terminated by one of)108 535.2 Q F1(;)2.5 E F0(,)A F1(&)2.5 +E F0 2.5(,o)C(r)-2.5 E F1()2.5 E F0(.)A .961 +(Of these list operators,)108 552 R F1(&&)3.461 E F0(and)3.461 E F1(||) 3.461 E F0(ha)3.461 E 1.261 -.15(ve e)-.2 H .961(qual precedence, follo) -.15 F .96(wed by)-.25 F F2(;)3.46 E F0(and)3.46 E F2(&)3.46 E F0 3.46 +.15 F .96(wed by)-.25 F F1(;)3.46 E F0(and)3.46 E F1(&)3.46 E F0 3.46 (,w)C .96(hich ha)-3.46 F 1.26 -.15(ve e)-.2 H .96(qual prece-).15 F -(dence.)108 528 Q 2.5(As)108 544.8 S(equence of one or more ne)-2.5 E -(wlines may appear in a)-.25 E F1(list)2.5 E F0 +(dence.)108 564 Q 2.5(As)108 580.8 S(equence of one or more ne)-2.5 E +(wlines may appear in a)-.25 E F2(list)2.5 E F0 (instead of a semicolon to delimit commands.)2.5 E .029 -(If a command is terminated by the control operator)108 561.6 R F2(&) +(If a command is terminated by the control operator)108 597.6 R F1(&) 2.529 E F0 2.529(,t)C .029(he shell e)-2.529 F -.15(xe)-.15 G .029 -(cutes the command in the).15 F F1(bac)2.529 E(kgr)-.2 E(ound)-.45 E F0 -(in)2.529 E 2.678(as)108 573.6 S 2.678(ubshell. The)-2.678 F .178 +(cutes the command in the).15 F F2(bac)2.529 E(kgr)-.2 E(ound)-.45 E F0 +(in)2.529 E 2.678(as)108 609.6 S 2.678(ubshell. The)-2.678 F .178 (shell does not w)2.678 F .178 (ait for the command to \214nish, and the return status is 0.)-.1 F .178 -(These are referred)5.178 F .778(to as)108 585.6 R F1(async)3.278 E(hr) +(These are referred)5.178 F .778(to as)108 621.6 R F2(async)3.278 E(hr) -.15 E(onous)-.45 E F0 3.278(commands. Commands)3.278 F .779 -(separated by a)3.278 F F2(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15 +(separated by a)3.278 F F1(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15 G .779(cuted sequentially; the shell w).15 F .779(aits for)-.1 F -(each command to terminate in turn.)108 597.6 Q +(each command to terminate in turn.)108 633.6 Q (The return status is the e)5 E(xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted.).15 E .172(AND and OR lists are sequences of one \ -or more pipelines separated by the)108 614.4 R F2(&&)2.671 E F0(and) -2.671 E F2(||)2.671 E F0 .171(control operators, re-)2.671 F(specti)108 -626.4 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E +or more pipelines separated by the)108 650.4 R F1(&&)2.671 E F0(and) +2.671 E F1(||)2.671 E F0 .171(control operators, re-)2.671 F(specti)108 +662.4 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E -.15(xe)-.15 G(cuted with left associati).15 E(vity)-.25 E 5(.A)-.65 G -2.5(nA)-5 G(ND list has the form)-2.5 E F1(command1)144 643.2 Q F2(&&) -2.5 E F1(command2)2.5 E(command2)108.2 660 Q F0(is e)2.52 E -.15(xe)-.15 -G(cuted if, and only if,).15 E F1(command1)2.7 E F0(returns an e)2.5 E +2.5(nA)-5 G(ND list has the form)-2.5 E F2(command1)144 679.2 Q F1(&&) +2.5 E F2(command2)2.5 E(command2)108.2 696 Q F0(is e)2.52 E -.15(xe)-.15 +G(cuted if, and only if,).15 E F2(command1)2.7 E F0(returns an e)2.5 E (xit status of zero \(success\).)-.15 E(An OR list has the form)108 -676.8 Q F1(command1)144 693.6 Q F2(||)2.5 E F1(command2)2.5 E(command2) -108.2 710.4 Q F0 .434(is e)2.954 F -.15(xe)-.15 G .434 -(cuted if, and only if,).15 F F1(command1)3.135 E F0 .435 -(returns a non-zero e)2.935 F .435(xit status.)-.15 F .435 -(The return status of AND)5.435 F(and OR lists is the e)108 722.4 Q -(xit status of the last command e)-.15 E -.15(xe)-.15 G -(cuted in the list.).15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(4)195.395 E 0 Cg EP +712.8 Q F2(command1)144 729.6 Q F1(||)2.5 E F2(command2)2.5 E F0 +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(4)190.955 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Compound Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF 1.054 -(compound command)3.554 F F0 1.054(is one of the follo)3.554 F 3.553 -(wing. In)-.25 F 1.053(most cases a)3.553 F F2(list)3.553 E F0 1.053 -(in a command')3.553 F 3.553(sd)-.55 G 1.053(escription may be)-3.553 F -1.026(separated from the rest of the command by one or more ne)108 108 R +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 +/Times-Italic@0 SF(command2)108.2 84 Q F0 .434(is e)2.954 F -.15(xe)-.15 +G .434(cuted if, and only if,).15 F F1(command1)3.135 E F0 .435 +(returns a non-zero e)2.935 F .435(xit status.)-.15 F .435 +(The return status of AND)5.435 F(and OR lists is the e)108 96 Q +(xit status of the last command e)-.15 E -.15(xe)-.15 G +(cuted in the list.).15 E/F2 10/Times-Bold@0 SF(Compound Commands)87 +112.8 Q F0(A)108 124.8 Q F1 1.054(compound command)3.554 F F0 1.054 +(is one of the follo)3.554 F 3.553(wing. In)-.25 F 1.053(most cases a) +3.553 F F1(list)3.553 E F0 1.053(in a command')3.553 F 3.553(sd)-.55 G +1.053(escription may be)-3.553 F 1.026 +(separated from the rest of the command by one or more ne)108 136.8 R 1.026(wlines, and may be follo)-.25 F 1.027(wed by a ne)-.25 F 1.027 -(wline in)-.25 F(place of a semicolon.)108 120 Q(\()108 136.8 Q F2(list) -A F0(\))A F2(list)144 136.8 Q F0 .011(is e)2.512 F -.15(xe)-.15 G .011 -(cuted in a subshell en).15 F .011(vironment \(see)-.4 F/F3 9 -/Times-Bold@0 SF .011(COMMAND EXECUTION ENVIR)2.511 F(ONMENT)-.27 E F0 -(belo)2.261 E(w\).)-.25 E -1.11(Va)144 148.8 S .016 -(riable assignments and b)1.11 F .016(uiltin commands that af)-.2 F .016 -(fect the shell')-.25 F 2.517(se)-.55 G -.4(nv)-2.517 G .017 -(ironment do not remain in ef-).4 F(fect after the command completes.) -144 160.8 Q(The return status is the e)5 E(xit status of)-.15 E F2(list) -2.5 E F0(.)A({)108 177.6 Q F2(list)2.5 E F0 2.5(;})C F2(list)144 177.6 Q -F0 .402(is simply e)2.902 F -.15(xe)-.15 G .401 -(cuted in the current shell en).15 F(vironment.)-.4 E F2(list)5.401 E F0 -.401(must be terminated with a ne)2.901 F .401(wline or)-.25 F 3.214 -(semicolon. This)144 189.6 R .714(is kno)3.214 F .714(wn as a)-.25 F F2 +(wline in)-.25 F(place of a semicolon.)108 148.8 Q(\()108 165.6 Q F1 +(list)A F0(\))A F1(list)144 165.6 Q F0 .215(is e)2.715 F -.15(xe)-.15 G +.215(cuted in a subshell \(see).15 F/F3 9/Times-Bold@0 SF .215 +(COMMAND EXECUTION ENVIR)2.715 F(ONMENT)-.27 E F0(belo)2.465 E 2.714(wf) +-.25 G .214(or a descrip-)-2.714 F .209(tion of a subshell en)144 177.6 +R 2.709(vironment\). V)-.4 F .209(ariable assignments and b)-1.11 F .209 +(uiltin commands that af)-.2 F .21(fect the shell')-.25 F(s)-.55 E(en) +144 189.6 Q 1.069(vironment do not remain in ef)-.4 F 1.069 +(fect after the command completes.)-.25 F 1.068 +(The return status is the e)6.069 F(xit)-.15 E(status of)144 201.6 Q F1 +(list)2.5 E F0(.)A({)108 218.4 Q F1(list)2.5 E F0 2.5(;})C F1(list)144 +218.4 Q F0 .401(is simply e)2.901 F -.15(xe)-.15 G .401 +(cuted in the current shell en).15 F(vironment.)-.4 E F1(list)5.401 E F0 +.402(must be terminated with a ne)2.901 F .402(wline or)-.25 F 3.215 +(semicolon. This)144 230.4 R .715(is kno)3.215 F .715(wn as a)-.25 F F1 (gr)3.215 E .715(oup command)-.45 F F0 5.715(.T)C .715 -(he return status is the e)-5.715 F .715(xit status of)-.15 F F2(list) -3.215 E F0 5.715(.N)C(ote)-5.715 E .22(that unlik)144 201.6 R 2.72(et) --.1 G .22(he metacharacters)-2.72 F F1(\()2.72 E F0(and)2.72 E F1(\)) -2.72 E F0(,)A F1({)2.72 E F0(and)2.72 E F1(})2.719 E F0(are)2.719 E F2 --.37(re)2.719 G .219(served wor).37 F(ds)-.37 E F0 .219 -(and must occur where a reserv)2.719 F(ed)-.15 E -.1(wo)144 213.6 S .256 -(rd is permitted to be recognized.).1 F .256(Since the)5.256 F 2.756(yd) --.15 G 2.756(on)-2.756 G .257(ot cause a w)-2.756 F .257(ord break, the) --.1 F 2.757(ym)-.15 G .257(ust be separated)-2.757 F(from)144 225.6 Q F2 +(he return status is the e)-5.715 F .714(xit status of)-.15 F F1(list) +3.214 E F0 5.714(.N)C(ote)-5.714 E .219(that unlik)144 242.4 R 2.719(et) +-.1 G .219(he metacharacters)-2.719 F F2(\()2.719 E F0(and)2.719 E F2 +(\))2.719 E F0(,)A F2({)2.719 E F0(and)2.719 E F2(})2.719 E F0(are)2.719 +E F1 -.37(re)2.72 G .22(served wor).37 F(ds)-.37 E F0 .22 +(and must occur where a reserv)2.72 F(ed)-.15 E -.1(wo)144 254.4 S .257 +(rd is permitted to be recognized.).1 F .257(Since the)5.257 F 2.757(yd) +-.15 G 2.756(on)-2.757 G .256(ot cause a w)-2.756 F .256(ord break, the) +-.1 F 2.756(ym)-.15 G .256(ust be separated)-2.756 F(from)144 266.4 Q F1 (list)2.5 E F0(by whitespace or another shell metacharacter)2.5 E(.)-.55 -E(\(\()108 242.4 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144 -254.4 Q F2 -.2(ex)2.552 G(pr).2 E(ession)-.37 E F0 .052(is e)2.552 F +E(\(\()108 283.2 Q F1 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144 +295.2 Q F1 -.2(ex)2.551 G(pr).2 E(ession)-.37 E F0 .051(is e)2.551 F -.25(va)-.25 G .051(luated according to the rules described belo).25 F -2.551(wu)-.25 G(nder)-2.551 E F3 .051(ARITHMETIC EV)2.551 F(ALU)-1.215 E -(A-)-.54 E(TION)144 266.4 Q/F4 9/Times-Roman@0 SF(.)A F0 .411(If the v) -4.91 F .411(alue of the e)-.25 F .411(xpression is non-zero, the return\ - status is 0; otherwise the return status)-.15 F(is 1.)144 278.4 Q -(This is e)5 E(xactly equi)-.15 E -.25(va)-.25 G(lent to).25 E F1(let ") -2.5 E F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(")A F0(.)A F1([[)108 295.2 Q -F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F1(]])2.5 E F0 .003 -(Return a status of 0 or 1 depending on the e)144 307.2 R -.25(va)-.25 G -.003(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)2.503 -G(pr).2 E(ession)-.37 E F0 5.003(.E)C(x-)-5.003 E .758 -(pressions are composed of the primaries described belo)144 319.2 R -3.259(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS) --.18 F F4(.)A F0 -.8(Wo)144 331.2 S .029(rd splitting and pathname e).8 -F .029(xpansion are not performed on the w)-.15 F .029(ords between the) --.1 F F1([[)2.528 E F0(and)2.528 E F1(]])2.528 E F0 2.528(;t)C(ilde) --2.528 E -.15(ex)144 343.2 S 3.968(pansion, parameter and v).15 F 3.969 -(ariable e)-.25 F 3.969(xpansion, arithmetic e)-.15 F 3.969 -(xpansion, command substitution,)-.15 F .571 -(process substitution, and quote remo)144 355.2 R -.25(va)-.15 G 3.071 -(la).25 G .571(re performed.)-3.071 F .571 -(Conditional operators such as)5.571 F F13.07 E F0 .57(must be) -3.07 F(unquoted to be recognized as primaries.)144 367.2 Q -(When used with)144 385.2 Q F1([[)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E -F0(and)2.5 E F1(>)2.5 E F0(operators sort le)2.5 E -(xicographically using the current locale.)-.15 E .502(When the)144 -403.2 R F1(==)3.002 E F0(and)3.002 E F1(!=)3.002 E F0 .502(operators ar\ -e used, the string to the right of the operator is considered a pat-) -3.002 F .81(tern and matched according to the rules described belo)144 -415.2 R 3.31(wu)-.25 G(nder)-3.31 E F1 -.1(Pa)3.31 G(tter).1 E 3.31(nM) --.15 G(atching)-3.31 E F0 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he) --3.31 E F1(ext-)3.31 E(glob)144 427.2 Q F0 .313 -(shell option were enabled.)2.813 F(The)5.313 E F1(=)2.813 E F0 .313 -(operator is equi)2.813 F -.25(va)-.25 G .313(lent to).25 F F1(==)2.813 -E F0 5.313(.I)C 2.813(ft)-5.313 G(he)-2.813 E F1(nocasematch)2.813 E F0 -.314(shell op-)2.814 F .03 -(tion is enabled, the match is performed without re)144 439.2 R -.05(ga) --.15 G .029(rd to the case of alphabetic characters.).05 F .029(The re-) -5.029 F .258(turn v)144 451.2 R .259(alue is 0 if the string matches \() --.25 F F1(==)A F0 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \() --2.759 F F1(!=)A F0 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759 -F(An)5.259 E(y)-.15 E(part of the pattern may be quoted to force the qu\ -oted portion to be matched as a string.)144 463.2 Q .243 -(An additional binary operator)144 481.2 R(,)-.4 E F1(=~)2.743 E F0 -2.743(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243 -(ilable, with the same precedence as).25 F F1(==)2.743 E F0(and)2.743 E -F1(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F .182 +2.552(wu)-.25 G(nder)-2.552 E F3 .052(ARITHMETIC EV)2.552 F(ALU)-1.215 E +(A-)-.54 E(TION)144 307.2 Q/F4 9/Times-Roman@0 SF(.)A F0 .411(If the v) +4.911 F .411(alue of the e)-.25 F .411(xpression is non-zero, the retur\ +n status is 0; otherwise the return status)-.15 F .186(is 1.)144 319.2 R +(The)5.186 E F1 -.2(ex)2.686 G(pr).2 E(ession)-.37 E F0(under)2.686 E +.186(goes the same e)-.18 F .186 +(xpansions as if it were within double quotes, b)-.15 F .187(ut double) +-.2 F(quote characters in)144 331.2 Q F1 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F0(are not treated specially and are remo)2.5 E -.15(ve)-.15 G +(d.).15 E F2([[)108 348 Q F1 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F2(]]) +2.5 E F0 .003(Return a status of 0 or 1 depending on the e)144 360 R +-.25(va)-.25 G .003(luation of the conditional e).25 F(xpression)-.15 E +F1 -.2(ex)2.503 G(pr).2 E(ession)-.37 E F0 5.003(.E)C(x-)-5.003 E .758 +(pressions are composed of the primaries described belo)144 372 R 3.259 +(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS)-.18 F +F4(.)A F0 .065(The w)144 384 R .065(ords between the)-.1 F F2([[)2.565 E +F0(and)2.565 E F2(]])2.565 E F0 .065(do not under)2.565 F .065(go w)-.18 +F .065(ord splitting and pathname e)-.1 F 2.565(xpansion. The)-.15 F +(shell)2.565 E .483(performs tilde e)144 396 R .483 +(xpansion, parameter and v)-.15 F .483(ariable e)-.25 F .483 +(xpansion, arithmetic e)-.15 F .483(xpansion, command sub-)-.15 F .201 +(stitution, process substitution, and quote remo)144 408 R -.25(va)-.15 +G 2.701(lo).25 G 2.701(nt)-2.701 G .201(hose w)-2.701 F .201 +(ords \(the e)-.1 F .2(xpansions that w)-.15 F .2(ould occur)-.1 F .382 +(if the w)144 420 R .382(ords were enclosed in double quotes\).)-.1 F +.382(Conditional operators such as)5.382 F F22.882 E F0 .382 +(must be unquoted)2.882 F(to be recognized as primaries.)144 432 Q +(When used with)144 450 Q F2([[)2.5 E F0 2.5(,t)C(he)-2.5 E F2(<)2.5 E +F0(and)2.5 E F2(>)2.5 E F0(operators sort le)2.5 E +(xicographically using the current locale.)-.15 E .503(When the)144 468 +R F2(==)3.003 E F0(and)3.002 E F2(!=)3.002 E F0 .502(operators are used\ +, the string to the right of the operator is considered a pat-)3.002 F +.81(tern and matched according to the rules described belo)144 480 R +3.31(wu)-.25 G(nder)-3.31 E F2 -.1(Pa)3.31 G(tter).1 E 3.31(nM)-.15 G +(atching)-3.31 E F0 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he)-3.31 E +F2(ext-)3.31 E(glob)144 492 Q F0 .313(shell option were enabled.)2.814 F +(The)5.313 E F2(=)2.813 E F0 .313(operator is equi)2.813 F -.25(va)-.25 +G .313(lent to).25 F F2(==)2.813 E F0 5.313(.I)C 2.813(ft)-5.313 G(he) +-2.813 E F2(nocasematch)2.813 E F0 .313(shell op-)2.813 F .029 +(tion is enabled, the match is performed without re)144 504 R -.05(ga) +-.15 G .03(rd to the case of alphabetic characters.).05 F .03(The re-) +5.03 F .259(turn v)144 516 R .259(alue is 0 if the string matches \() +-.25 F F2(==)A F0 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \() +-2.759 F F2(!=)A F0 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759 +F(An)5.258 E(y)-.15 E(part of the pattern may be quoted to force the qu\ +oted portion to be matched as a string.)144 528 Q .243 +(An additional binary operator)144 546 R(,)-.4 E F2(=~)2.743 E F0 2.743 +(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243 +(ilable, with the same precedence as).25 F F2(==)2.743 E F0(and)2.743 E +F2(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F .182 (used, the string to the right of the operator is considered a POSIX e) -144 493.2 R .182(xtended re)-.15 F .182(gular e)-.15 F .182 -(xpression and)-.15 F 2.624(matched accordingly \(using the POSIX)144 -505.2 R F2 -.37(re)5.124 G(gcomp)-.03 E F0(and)5.124 E F2 -.37(re)5.124 -G -.1(ge)-.03 G(xec)-.1 E F0(interf)5.123 E 2.623 -(aces usually described in)-.1 F F2 -.37(re)144 517.2 S -.1(ge)-.03 G(x) --.1 E F0 3.271(\(3\)\). The)B .771(return v)3.271 F .772 +144 558 R .182(xtended re)-.15 F .181(gular e)-.15 F .181(xpression and) +-.15 F 2.623(matched accordingly \(using the POSIX)144 570 R F1 -.37(re) +5.124 G(gcomp)-.03 E F0(and)5.124 E F1 -.37(re)5.124 G -.1(ge)-.03 G +(xec)-.1 E F0(interf)5.124 E 2.624(aces usually described in)-.1 F F1 +-.37(re)144 582 S -.1(ge)-.03 G(x)-.1 E F0 3.272(\(3\)\). The)B .772 +(return v)3.272 F .772 (alue is 0 if the string matches the pattern, and 1 otherwise.)-.25 F -.772(If the re)5.772 F(gular)-.15 E -.15(ex)144 529.2 S .509 +.771(If the re)5.771 F(gular)-.15 E -.15(ex)144 594 S .508 (pression is syntactically incorrect, the conditional e).15 F -(xpression')-.15 E 3.008(sr)-.55 G .508(eturn v)-3.008 F .508 -(alue is 2.)-.25 F .508(If the)5.508 F F1(nocase-)3.008 E(match)144 -541.2 Q F0 1.307 -(shell option is enabled, the match is performed without re)3.806 F -.05 -(ga)-.15 G 1.307(rd to the case of alphabetic).05 F 3.063 -(characters. An)144 553.2 R 3.063(yp)-.15 G .563(art of the pattern may\ - be quoted to force the quoted portion to be matched as a)-3.063 F 2.943 -(string. Brack)144 565.2 R .443(et e)-.1 F .443(xpressions in re)-.15 F -.443(gular e)-.15 F .443(xpressions must be treated carefully)-.15 F -2.944(,s)-.65 G .444(ince normal quoting)-2.944 F .615 -(characters lose their meanings between brack)144 577.2 R 3.115(ets. If) --.1 F .614(the pattern is stored in a shell v)3.115 F .614 -(ariable, quot-)-.25 F(ing the v)144 589.2 Q(ariable e)-.25 E -(xpansion forces the entire pattern to be matched as a string.)-.15 E -.838(The pattern will match if it matches an)144 607.2 R 3.338(yp)-.15 G -.838(art of the string.)-3.338 F .839(Anchor the pattern using the)5.839 -F F1(^)3.339 E F0(and)3.339 E F1($)3.339 E F0(re)144 619.2 Q .847 -(gular e)-.15 F .846 +(xpression')-.15 E 3.008(sr)-.55 G .509(eturn v)-3.008 F .509 +(alue is 2.)-.25 F .509(If the)5.509 F F2(nocase-)3.009 E(match)144 606 +Q F0 1.307(shell option is enabled, the match is performed without re) +3.807 F -.05(ga)-.15 G 1.306(rd to the case of alphabetic).05 F 2.599 +(characters. If)144 618 R(an)2.599 E 2.599(yp)-.15 G .099 +(art of the pattern is quoted, the quoted portion is matched literally) +-2.599 F 5.1(.T)-.65 G .1(his means)-5.1 F -2.15 -.25(ev e)144 630 T +.032(ry character in the quoted portion matches itself, instead of ha) +.25 F .031(ving an)-.2 F 2.531(ys)-.15 G .031(pecial pattern matching) +-2.531 F 3.041(meaning. If)144 642 R .542 +(the pattern is stored in a shell v)3.041 F .542(ariable, quoting the v) +-.25 F .542(ariable e)-.25 F .542(xpansion forces the en-)-.15 F 1.825 +(tire pattern to be matched literally)144 654 R 6.825(.T)-.65 G 1.825 +(reat brack)-7.175 F 1.825(et e)-.1 F 1.825(xpressions in re)-.15 F +1.825(gular e)-.15 F 1.825(xpressions carefully)-.15 F(,)-.65 E(since n\ +ormal quoting and pattern characters lose their meanings between brack) +144 666 Q(ets.)-.1 E .838(The pattern will match if it matches an)144 +684 R 3.338(yp)-.15 G .838(art of the string.)-3.338 F .839 +(Anchor the pattern using the)5.839 F F2(^)3.339 E F0(and)3.339 E F2($) +3.339 E F0(re)144 696 Q .847(gular e)-.15 F .846 (xpression operators to force it to match the entire string.)-.15 F .846 (The array v)5.846 F(ariable)-.25 E F3 -.27(BA)3.346 G(SH_RE-).27 E(MA) -144 631.2 Q(TCH)-.855 E F0 .321 +144 708 Q(TCH)-.855 E F0 .321 (records which parts of the string matched the pattern.)2.571 F .322 (The element of)5.322 F F3 -.27(BA)2.822 G(SH_REMA).27 E(TCH)-.855 E F0 -.583(with inde)144 643.2 R 3.083(x0)-.15 G .582 +.583(with inde)144 720 R 3.083(x0)-.15 G .582 (contains the portion of the string matching the entire re)-.001 F .582 -(gular e)-.15 F 3.082(xpression. Substrings)-.15 F .249 -(matched by parenthesized sube)144 655.2 R .249 -(xpressions within the re)-.15 F .249(gular e)-.15 F .249 -(xpression are sa)-.15 F -.15(ve)-.2 G 2.749(di).15 G 2.75(nt)-2.749 G -.25(he remaining)-2.75 F F3 -.27(BA)144 667.2 S(SH_REMA).27 E(TCH)-.855 -E F0 1.13(indices. The element of)3.38 F F3 -.27(BA)3.63 G(SH_REMA).27 E -(TCH)-.855 E F0 1.13(with inde)3.38 F(x)-.15 E F2(n)3.63 E F0 1.13 -(is the portion of the)3.63 F(string matching the)144 679.2 Q F2(n)2.5 E -F0(th parenthesized sube)A(xpression.)-.15 E .785 -(Expressions may be combined using the follo)144 697.2 R .786 -(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144 -709.2 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(5)195.395 E 0 Cg -EP +(gular e)-.15 F 3.082(xpression. Substrings)-.15 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(5)190.955 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(\()144 84 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E(ession)-.37 -E F1(\))2.5 E F0 .523(Returns the v)180 96 R .522(alue of)-.25 F F2 -.2 -(ex)3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .249 +(matched by parenthesized sube)144 84 R .249(xpressions within the re) +-.15 F .249(gular e)-.15 F .249(xpression are sa)-.15 F -.15(ve)-.2 G +2.749(di).15 G 2.75(nt)-2.749 G .25(he remaining)-2.75 F/F1 9 +/Times-Bold@0 SF -.27(BA)144 96 S(SH_REMA).27 E(TCH)-.855 E F0 1.13 +(indices. The element of)3.38 F F1 -.27(BA)3.63 G(SH_REMA).27 E(TCH) +-.855 E F0 1.13(with inde)3.38 F(x)-.15 E/F2 10/Times-Italic@0 SF(n)3.63 +E F0 1.13(is the portion of the)3.63 F(string matching the)144 108 Q F2 +(n)2.5 E F0(th parenthesized sube)A(xpression.)-.15 E .785 +(Expressions may be combined using the follo)144 126 R .786 +(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144 +138 Q/F3 10/Times-Bold@0 SF(\()144 156 Q F2 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F3(\))2.5 E F0 .523(Returns the v)180 168 R .522(alue of)-.25 F +F2 -.2(ex)3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522 (his may be used to o)-5.522 F -.15(ve)-.15 G .522 -(rride the normal precedence of).15 F(operators.)180 108 Q F1(!)144 120 -Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 132 S(ue if).35 E +(rride the normal precedence of).15 F(operators.)180 180 Q F3(!)144 192 +Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 204 S(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0(is f)2.74 E(alse.)-.1 E F2 -.2 -(ex)144 144 S(pr).2 E(ession1)-.37 E F1(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E -(ession2)-.37 E F0 -.35(Tr)180 156 S(ue if both).35 E F2 -.2(ex)2.5 G +(ex)144 216 S(pr).2 E(ession1)-.37 E F3(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E +(ession2)-.37 E F0 -.35(Tr)180 228 S(ue if both).35 E F2 -.2(ex)2.5 G (pr).2 E(ession1)-.37 E F0(and)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2) --.37 E F0(are true.)2.52 E F2 -.2(ex)144 168 S(pr).2 E(ession1)-.37 E F1 -(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 180 S +-.37 E F0(are true.)2.52 E F2 -.2(ex)144 240 S(pr).2 E(ession1)-.37 E F3 +(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 252 S (ue if either).35 E F2 -.2(ex)2.5 G(pr).2 E(ession1)-.37 E F0(or)2.5 E -F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(is true.)2.52 E(The)144 196.8 -Q F1(&&)2.675 E F0(and)2.675 E F1(||)2.675 E F0 .175(operators do not e) +F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(is true.)2.52 E(The)144 268.8 +Q F3(&&)2.675 E F0(and)2.675 E F3(||)2.675 E F0 .175(operators do not e) 2.675 F -.25(va)-.25 G(luate).25 E F2 -.2(ex)2.675 G(pr).2 E(ession2) -.37 E F0 .175(if the v)2.675 F .175(alue of)-.25 F F2 -.2(ex)2.676 G (pr).2 E(ession1)-.37 E F0 .176(is suf)2.676 F .176(\214cient to de-) --.25 F(termine the return v)144 208.8 Q -(alue of the entire conditional e)-.25 E(xpression.)-.15 E F1 -.25(fo) -108 225.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F1(in)A F0([)2.5 E F2 -(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F1(do)A F2(list)2.5 -E F0(;)2.5 E F1(done)2.5 E F0 .424(The list of w)144 237.6 R .424 -(ords follo)-.1 F(wing)-.25 E F1(in)2.924 E F0 .423(is e)2.924 F .423 +-.25 F(termine the return v)144 280.8 Q +(alue of the entire conditional e)-.25 E(xpression.)-.15 E F3 -.25(fo) +108 297.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F3(in)A F0([)2.5 E F2 +(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F3(do)A F2(list)2.5 +E F0(;)2.5 E F3(done)2.5 E F0 .424(The list of w)144 309.6 R .424 +(ords follo)-.1 F(wing)-.25 E F3(in)2.924 E F0 .423(is e)2.924 F .423 (xpanded, generating a list of items.)-.15 F .423(The v)5.423 F(ariable) -.25 E F2(name)2.923 E F0 .423(is set to)2.923 F .653 -(each element of this list in turn, and)144 249.6 R F2(list)3.153 E F0 +(each element of this list in turn, and)144 321.6 R F2(list)3.153 E F0 .653(is e)3.153 F -.15(xe)-.15 G .653(cuted each time.).15 F .653 -(If the)5.653 F F1(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653 -(is omitted, the)3.153 F F1 -.25(fo)3.153 G(r).25 E F0 .649(command e) -144 261.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.149 E F0 .648 -(once for each positional parameter that is set \(see)3.148 F/F3 9 -/Times-Bold@0 SF -.666(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).) --.25 E .153(The return status is the e)144 273.6 R .153 +(If the)5.653 F F3(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653 +(is omitted, the)3.153 F F3 -.25(fo)3.153 G(r).25 E F0 .649(command e) +144 333.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.149 E F0 .648 +(once for each positional parameter that is set \(see)3.148 F F1 -.666 +(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).)-.25 E .153 +(The return status is the e)144 345.6 R .153 (xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.654 (cutes. If).15 F .154(the e)2.654 F .154(xpansion of the items)-.15 F -(follo)144 285.6 Q(wing)-.25 E F1(in)2.5 E F0 +(follo)144 357.6 Q(wing)-.25 E F3(in)2.5 E F0 (results in an empty list, no commands are e)2.5 E -.15(xe)-.15 G -(cuted, and the return status is 0.).15 E F1 -.25(fo)108 302.4 S(r).25 E +(cuted, and the return status is 0.).15 E F3 -.25(fo)108 374.4 S(r).25 E F0(\(\()2.5 E F2 -.2(ex)2.5 G(pr1).2 E F0(;)2.5 E F2 -.2(ex)2.5 G(pr2).2 -E F0(;)2.5 E F2 -.2(ex)2.5 G(pr3).2 E F0(\)\) ;)2.5 E F1(do)2.5 E F2 -(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 1.236(First, the arithmetic e) -144 314.4 R(xpression)-.15 E F2 -.2(ex)3.736 G(pr1).2 E F0 1.235(is e) +E F0(;)2.5 E F2 -.2(ex)2.5 G(pr3).2 E F0(\)\) ;)2.5 E F3(do)2.5 E F2 +(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0 1.236(First, the arithmetic e) +144 386.4 R(xpression)-.15 E F2 -.2(ex)3.736 G(pr1).2 E F0 1.235(is e) 3.736 F -.25(va)-.25 G 1.235 (luated according to the rules described belo).25 F 3.735(wu)-.25 G -(nder)-3.735 E F3 .561(ARITHMETIC EV)144 326.4 R(ALU)-1.215 E -.855(AT) +(nder)-3.735 E F1 .561(ARITHMETIC EV)144 398.4 R(ALU)-1.215 E -.855(AT) -.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 .561(The arithmetic e) 5.061 F(xpression)-.15 E F2 -.2(ex)3.061 G(pr2).2 E F0 .562(is then e) 3.062 F -.25(va)-.25 G .562(luated repeatedly until).25 F .592(it e)144 -338.4 R -.25(va)-.25 G .592(luates to zero.).25 F .592(Each time)5.592 F +410.4 R -.25(va)-.25 G .592(luates to zero.).25 F .592(Each time)5.592 F F2 -.2(ex)3.092 G(pr2).2 E F0 -.25(eva)3.092 G .592 (luates to a non-zero v).25 F(alue,)-.25 E F2(list)3.092 E F0 .591(is e) 3.092 F -.15(xe)-.15 G .591(cuted and the arith-).15 F .228(metic e)144 -350.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F +422.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F -.25(va)-.25 G 2.729(luated. If).25 F(an)2.729 E 2.729(ye)-.15 G .229 (xpression is omitted, it beha)-2.879 F -.15(ve)-.2 G 2.729(sa).15 G 2.729(si)-2.729 G 2.729(fi)-2.729 G 2.729(te)-2.729 G -.25(va)-2.979 G -.229(luates to 1.).25 F .228(The return v)144 362.4 R .228 +.229(luates to 1.).25 F .228(The return v)144 434.4 R .228 (alue is the e)-.25 F .228(xit status of the last command in)-.15 F F2 (list)2.728 E F0 .227(that is e)2.728 F -.15(xe)-.15 G .227(cuted, or f) .15 F .227(alse if an)-.1 F 2.727(yo)-.15 G 2.727(ft)-2.727 G(he)-2.727 -E -.15(ex)144 374.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F1 -(select)108 391.2 Q F2(name)2.5 E F0([)2.5 E F1(in)2.5 E F2(wor)2.5 E(d) --.37 E F0 2.5(];)2.5 G F1(do)A F2(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 -.432(The list of w)144 403.2 R .432(ords follo)-.1 F(wing)-.25 E F1(in) +E -.15(ex)144 446.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F3 +(select)108 463.2 Q F2(name)2.5 E F0([)2.5 E F3(in)2.5 E F2(wor)2.5 E(d) +-.37 E F0 2.5(];)2.5 G F3(do)A F2(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0 +.432(The list of w)144 475.2 R .432(ords follo)-.1 F(wing)-.25 E F3(in) 2.932 E F0 .432(is e)2.932 F .432(xpanded, generating a list of items.) -.15 F .433(The set of e)5.433 F .433(xpanded w)-.15 F(ords)-.1 E .843 -(is printed on the standard error)144 415.2 R 3.342(,e)-.4 G .842 +(is printed on the standard error)144 487.2 R 3.342(,e)-.4 G .842 (ach preceded by a number)-3.342 F 5.842(.I)-.55 G 3.342(ft)-5.842 G(he) --3.342 E F1(in)3.342 E F2(wor)3.342 E(d)-.37 E F0 .842 +-3.342 E F3(in)3.342 E F2(wor)3.342 E(d)-.37 E F0 .842 (is omitted, the posi-)3.342 F .201(tional parameters are printed \(see) -144 427.2 R F3 -.666(PA)2.701 G(RAMETERS).666 E F0(belo)2.451 E 2.701 -(w\). The)-.25 F F3(PS3)2.701 E F0 .201(prompt is then displayed and a) -2.451 F .214(line read from the standard input.)144 439.2 R .213 +144 499.2 R F1 -.666(PA)2.701 G(RAMETERS).666 E F0(belo)2.451 E 2.701 +(w\). The)-.25 F F1(PS3)2.701 E F0 .201(prompt is then displayed and a) +2.451 F .214(line read from the standard input.)144 511.2 R .213 (If the line consists of a number corresponding to one of the dis-)5.214 -F 1.537(played w)144 451.2 R 1.537(ords, then the v)-.1 F 1.537(alue of) +F 1.537(played w)144 523.2 R 1.537(ords, then the v)-.1 F 1.537(alue of) -.25 F F2(name)4.397 E F0 1.537(is set to that w)4.217 F 4.037(ord. If) -.1 F 1.538(the line is empty)4.038 F 4.038(,t)-.65 G 1.538(he w)-4.038 -F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 463.2 R 2.566 +F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 535.2 R 2.566 (ain. If)-.05 F .065(EOF is read, the command completes.)2.566 F(An) 5.065 E 2.565(yo)-.15 G .065(ther v)-2.565 F .065(alue read causes)-.25 -F F2(name)144.36 475.2 Q F0 .953(to be set to null.)3.633 F .953 +F F2(name)144.36 547.2 Q F0 .953(to be set to null.)3.633 F .953 (The line read is sa)5.953 F -.15(ve)-.2 G 3.454(di).15 G 3.454(nt) --3.454 G .954(he v)-3.454 F(ariable)-.25 E F3(REPL)3.454 E(Y)-.828 E F4 +-3.454 G .954(he v)-3.454 F(ariable)-.25 E F1(REPL)3.454 E(Y)-.828 E F4 (.)A F0(The)5.454 E F2(list)3.544 E F0 .954(is e)4.134 F -.15(xe)-.15 G -.954(cuted after).15 F .072(each selection until a)144 487.2 R F1(br) +.954(cuted after).15 F .072(each selection until a)144 559.2 R F3(br) 2.571 E(eak)-.18 E F0 .071(command is e)2.571 F -.15(xe)-.15 G 2.571 -(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F1(select) +(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F3(select) 2.571 E F0 .071(is the e)2.571 F .071(xit status of the)-.15 F -(last command e)144 499.2 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.59 E +(last command e)144 571.2 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.59 E F0 2.5(,o).68 G 2.5(rz)-2.5 G(ero if no commands were e)-2.5 E -.15(xe) --.15 G(cuted.).15 E F1(case)108 516 Q F2(wor)2.5 E(d)-.37 E F1(in)2.5 E -F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F1(|)2.5 E F2 +-.15 G(cuted.).15 E F3(case)108 588 Q F2(wor)2.5 E(d)-.37 E F3(in)2.5 E +F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F3(|)2.5 E F2 (pattern)2.5 E F0 2.5(].)2.5 G(.. \))-2.5 E F2(list)2.5 E F0(;; ] ...) -2.5 E F1(esac)2.5 E F0(A)144 528 Q F1(case)3.264 E F0 .764 +2.5 E F3(esac)2.5 E F0(A)144 600 Q F3(case)3.264 E F0 .764 (command \214rst e)3.264 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0 3.264(,a)C .764(nd tries to match it ag)-3.264 F .764(ainst each)-.05 F F2(pattern)3.264 E F0 .765(in turn, using the)3.264 F .884 -(matching rules described under)144 540 R F1 -.1(Pa)3.384 G(tter).1 E +(matching rules described under)144 612 R F3 -.1(Pa)3.384 G(tter).1 E 3.384(nM)-.15 G(atching)-3.384 E F0(belo)3.384 E 4.684 -.65(w. T)-.25 H (he).65 E F2(wor)3.384 E(d)-.37 E F0 .884(is e)3.384 F .883 (xpanded using tilde e)-.15 F(x-)-.15 E .95(pansion, parameter and v)144 -552 R .95(ariable e)-.25 F .95(xpansion, arithmetic e)-.15 F .95 +624 R .95(ariable e)-.25 F .95(xpansion, arithmetic e)-.15 F .95 (xpansion, command substitution, process)-.15 F .181 -(substitution and quote remo)144 564 R -.25(va)-.15 G 2.681(l. Each).25 +(substitution and quote remo)144 636 R -.25(va)-.15 G 2.681(l. Each).25 F F2(pattern)2.681 E F0 -.15(ex)2.681 G .181(amined is e).15 F .181 (xpanded using tilde e)-.15 F .18(xpansion, param-)-.15 F .103 -(eter and v)144 576 R .103(ariable e)-.25 F .103(xpansion, arithmetic e) --.15 F .103(xpansion, command substitution, and process substitution.) --.15 F .687(If the)144 588 R F1(nocasematch)3.187 E F0 .687 -(shell option is enabled, the match is performed without re)3.187 F -.05 -(ga)-.15 G .687(rd to the case of).05 F .464(alphabetic characters.)144 -600 R .464(When a match is found, the corresponding)5.464 F F2(list) -2.964 E F0 .464(is e)2.964 F -.15(xe)-.15 G 2.964(cuted. If).15 F(the) -2.964 E F1(;;)2.964 E F0(opera-)2.964 E .675(tor is used, no subsequent\ - matches are attempted after the \214rst pattern match.)144 612 R(Using) -5.674 E F1(;&)3.174 E F0 .674(in place)3.174 F(of)144 624 Q F1(;;)2.866 -E F0 .366(causes e)2.866 F -.15(xe)-.15 G .366 -(cution to continue with the).15 F F2(list)2.866 E F0 .367 -(associated with the ne)2.866 F .367(xt set of patterns.)-.15 F(Using) -5.367 E F1(;;&)2.867 E F0 .596(in place of)144 636 R F1(;;)3.096 E F0 -.596(causes the shell to test the ne)3.096 F .595 -(xt pattern list in the statement, if an)-.15 F 1.895 -.65(y, a)-.15 H -.595(nd e).65 F -.15(xe)-.15 G .595(cute an).15 F(y)-.15 E(associated) -144 648 Q F2(list)2.96 E F0 .461 -(on a successful match, continuing the case statement e)2.96 F -.15(xe) --.15 G .461(cution as if the pattern list).15 F .677(had not matched.) -144 660 R .677(The e)5.677 F .677 -(xit status is zero if no pattern matches.)-.15 F .676 -(Otherwise, it is the e)5.677 F .676(xit status of)-.15 F -(the last command e)144 672 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.5 -E F0(.)A F1(if)108 688.8 Q F2(list)2.5 E F0(;)A F1(then)2.5 E F2(list) -2.5 E F0 2.5(;[)C F1(elif)A F2(list)2.5 E F0(;)A F1(then)2.5 E F2(list) -2.5 E F0 2.5(;].)C(.. [)-2.5 E F1(else)2.5 E F2(list)2.5 E F0 2.5(;])C -F1<8c>A F0(The)144 700.8 Q F1(if)2.977 E F2(list)3.067 E F0 .478(is e) -3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F .478(its e)2.978 F .478 -(xit status is zero, the)-.15 F F1(then)2.978 E F2(list)2.978 E F0 .478 -(is e)2.978 F -.15(xe)-.15 G 2.978(cuted. Otherwise,).15 F(each)2.978 E -F1(elif)2.978 E F2(list)2.978 E F0 1.088(is e)144 712.8 R -.15(xe)-.15 G -1.088(cuted in turn, and if its e).15 F 1.087 -(xit status is zero, the corresponding)-.15 F F1(then)3.587 E F2(list) -3.587 E F0 1.087(is e)3.587 F -.15(xe)-.15 G 1.087(cuted and the).15 F -1.239(command completes.)144 724.8 R 1.239(Otherwise, the)6.239 F F1 -(else)3.739 E F2(list)3.739 E F0 1.239(is e)3.739 F -.15(xe)-.15 G 1.239 -(cuted, if present.).15 F 1.24(The e)6.239 F 1.24(xit status is the e) --.15 F(xit)-.15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(6) -195.395 E 0 Cg EP +(eter and v)144 648 R .103(ariable e)-.25 F .103(xpansion, arithmetic e) +-.15 F .103(xpansion, command substitution, process substitution, and) +-.15 F .139(quote remo)144 660 R -.25(va)-.15 G 2.639(l. If).25 F(the) +2.639 E F3(nocasematch)2.639 E F0 .138 +(shell option is enabled, the match is performed without re)2.639 F -.05 +(ga)-.15 G(rd).05 E .208(to the case of alphabetic characters.)144 672 R +.209(When a match is found, the corresponding)5.209 F F2(list)2.709 E F0 +.209(is e)2.709 F -.15(xe)-.15 G 2.709(cuted. If).15 F(the)144 684 Q F3 +(;;)3.35 E F0 .849(operator is used, no subsequent matches are attempte\ +d after the \214rst pattern match.)3.35 F(Using)5.849 E F3(;&)144 696 Q +F0 .253(in place of)2.753 F F3(;;)2.754 E F0 .254(causes e)2.754 F -.15 +(xe)-.15 G .254(cution to continue with the).15 F F2(list)2.754 E F0 +.254(associated with the ne)2.754 F .254(xt set of patterns.)-.15 F +(Using)144 708 Q F3(;;&)2.617 E F0 .117(in place of)2.617 F F3(;;)2.616 +E F0 .116(causes the shell to test the ne)2.616 F .116 +(xt pattern list in the statement, if an)-.15 F 1.416 -.65(y, a)-.15 H +.116(nd e).65 F(x-)-.15 E .768(ecute an)144 720 R 3.268(ya)-.15 G +(ssociated)-3.268 E F2(list)3.268 E F0 .768 +(on a successful match, continuing the case statement e)3.268 F -.15(xe) +-.15 G .768(cution as if the).15 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(6)190.955 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(status of the last command e)144 84 Q -.15(xe)-.15 G -(cuted, or zero if no condition tested true.).15 E/F1 10/Times-Bold@0 SF -(while)108 100.8 Q/F2 10/Times-Italic@0 SF(list-1)2.5 E F0(;)A F1(do)2.5 -E F2(list-2)2.5 E F0(;)A F1(done)2.5 E(until)108 112.8 Q F2(list-1)2.5 E -F0(;)A F1(do)2.5 E F2(list-2)2.5 E F0(;)A F1(done)2.5 E F0(The)144 124.8 -Q F1(while)3.45 E F0 .95(command continuously e)3.45 F -.15(xe)-.15 G -.95(cutes the list).15 F F2(list-2)3.45 E F0 .95 -(as long as the last command in the list)3.45 F F2(list-1)144 136.8 Q F0 -.205(returns an e)2.705 F .205(xit status of zero.)-.15 F(The)5.205 E F1 -(until)2.705 E F0 .205(command is identical to the)2.705 F F1(while) -2.705 E F0 .205(command, e)2.705 F(xcept)-.15 E .6(that the test is ne) -144 148.8 R -.05(ga)-.15 G(ted:).05 E F2(list-2)3.19 E F0 .6(is e)3.12 F --.15(xe)-.15 G .599(cuted as long as the last command in).15 F F2 -(list-1)3.189 E F0 .599(returns a non-zero)3.099 F -.15(ex)144 160.8 S -.204(it status.).15 F .204(The e)5.204 F .204(xit status of the)-.15 F -F1(while)2.704 E F0(and)2.704 E F1(until)2.704 E F0 .205 -(commands is the e)2.704 F .205(xit status of the last command)-.15 F --.15(exe)144 172.8 S(cuted in).15 E F2(list-2)2.5 E F0 2.5(,o)C 2.5(rz) --2.5 G(ero if none w)-2.5 E(as e)-.1 E -.15(xe)-.15 G(cuted.).15 E F1 -(Copr)87 189.6 Q(ocesses)-.18 E F0(A)108 201.6 Q F2(copr)3.713 E(ocess) --.45 E F0 1.213(is a shell command preceded by the)3.713 F F1(copr)3.712 -E(oc)-.18 E F0(reserv)3.712 E 1.212(ed w)-.15 F 3.712(ord. A)-.1 F 1.212 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .183 +(pattern list had not matched.)144 84 R .183(The e)5.183 F .183 +(xit status is zero if no pattern matches.)-.15 F .182 +(Otherwise, it is the e)5.183 F(xit)-.15 E(status of the last command e) +144 96 Q -.15(xe)-.15 G(cuted in).15 E/F1 10/Times-Italic@0 SF(list)2.5 +E F0(.)A/F2 10/Times-Bold@0 SF(if)108 112.8 Q F1(list)2.5 E F0(;)A F2 +(then)2.5 E F1(list)2.5 E F0 2.5(;[)C F2(elif)A F1(list)2.5 E F0(;)A F2 +(then)2.5 E F1(list)2.5 E F0 2.5(;].)C(.. [)-2.5 E F2(else)2.5 E F1 +(list)2.5 E F0 2.5(;])C F2<8c>A F0(The)144 124.8 Q F2(if)2.977 E F1 +(list)3.067 E F0 .478(is e)3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F +.478(its e)2.978 F .478(xit status is zero, the)-.15 F F2(then)2.978 E +F1(list)2.978 E F0 .478(is e)2.978 F -.15(xe)-.15 G 2.978 +(cuted. Otherwise,).15 F(each)2.978 E F2(elif)2.978 E F1(list)2.978 E F0 +1.088(is e)144 136.8 R -.15(xe)-.15 G 1.088(cuted in turn, and if its e) +.15 F 1.087(xit status is zero, the corresponding)-.15 F F2(then)3.587 E +F1(list)3.587 E F0 1.087(is e)3.587 F -.15(xe)-.15 G 1.087 +(cuted and the).15 F .103(command completes.)144 148.8 R .103 +(Otherwise, the)5.103 F F2(else)2.603 E F1(list)2.603 E F0 .103(is e) +2.603 F -.15(xe)-.15 G .103(cuted, if present.).15 F .103(The e)5.103 F +.103(xit status is the e)-.15 F .104(xit sta-)-.15 F +(tus of the last command e)144 160.8 Q -.15(xe)-.15 G +(cuted, or zero if no condition tested true.).15 E F2(while)108 177.6 Q +F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1(list-2)2.5 E F0(;)A F2(done)2.5 E +(until)108 189.6 Q F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1(list-2)2.5 E F0 +(;)A F2(done)2.5 E F0(The)144 201.6 Q F2(while)3.45 E F0 .95 +(command continuously e)3.45 F -.15(xe)-.15 G .95(cutes the list).15 F +F1(list-2)3.45 E F0 .95(as long as the last command in the list)3.45 F +F1(list-1)144 213.6 Q F0 .205(returns an e)2.705 F .205 +(xit status of zero.)-.15 F(The)5.205 E F2(until)2.705 E F0 .205 +(command is identical to the)2.705 F F2(while)2.705 E F0 .205 +(command, e)2.705 F(xcept)-.15 E .6(that the test is ne)144 225.6 R -.05 +(ga)-.15 G(ted:).05 E F1(list-2)3.19 E F0 .6(is e)3.12 F -.15(xe)-.15 G +.599(cuted as long as the last command in).15 F F1(list-1)3.189 E F0 +.599(returns a non-zero)3.099 F -.15(ex)144 237.6 S .204(it status.).15 +F .204(The e)5.204 F .204(xit status of the)-.15 F F2(while)2.704 E F0 +(and)2.704 E F2(until)2.704 E F0 .205(commands is the e)2.704 F .205 +(xit status of the last command)-.15 F -.15(exe)144 249.6 S(cuted in).15 +E F1(list-2)2.5 E F0 2.5(,o)C 2.5(rz)-2.5 G(ero if none w)-2.5 E(as e) +-.1 E -.15(xe)-.15 G(cuted.).15 E F2(Copr)87 266.4 Q(ocesses)-.18 E F0 +(A)108 278.4 Q F1(copr)3.713 E(ocess)-.45 E F0 1.213 +(is a shell command preceded by the)3.713 F F2(copr)3.712 E(oc)-.18 E F0 +(reserv)3.712 E 1.212(ed w)-.15 F 3.712(ord. A)-.1 F 1.212 (coprocess is e)3.712 F -.15(xe)-.15 G 1.212(cuted asyn-).15 F .574(chr\ onously in a subshell, as if the command had been terminated with the) -108 213.6 R F1(&)3.075 E F0 .575(control operator)3.075 F 3.075(,w)-.4 G -.575(ith a tw)-3.075 F(o-)-.1 E -.1(wa)108 225.6 S 2.5(yp).1 G +108 290.4 R F2(&)3.075 E F0 .575(control operator)3.075 F 3.075(,w)-.4 G +.575(ith a tw)-3.075 F(o-)-.1 E -.1(wa)108 302.4 S 2.5(yp).1 G (ipe established between the e)-2.5 E -.15(xe)-.15 G -(cuting shell and the coprocess.).15 E(The format for a coprocess is:) -108 242.4 Q F1(copr)144 259.2 Q(oc)-.18 E F0([)2.5 E F2 -.27(NA)C(ME).27 -E F0(])A F2(command)2.5 E F0([)2.5 E F2 -.37(re)C(dir).37 E(ections)-.37 -E F0(])A .709(This creates a coprocess named)108 276 R F2 -.27(NA)3.208 -G(ME).27 E F0 5.708(.I)C(f)-5.708 E F2 -.27(NA)3.208 G(ME).27 E F0 .708 -(is not supplied, the def)3.208 F .708(ault name is)-.1 F F1(COPR)3.208 -E(OC)-.3 E F0(.)A F2 -.27(NA)5.708 G(ME).27 E F0 .64 -(must not be supplied if)108 288 R F2(command)3.14 E F0 .64(is a)3.14 F -F2 .64(simple command)3.14 F F0 .64(\(see abo)3.14 F -.15(ve)-.15 G .64 -(\); otherwise, it is interpreted as the \214rst).15 F -.1(wo)108 300 S -.349(rd of the simple command.).1 F .348(When the coprocess is e)5.348 F --.15(xe)-.15 G .348(cuted, the shell creates an array v).15 F .348 -(ariable \(see)-.25 F F1(Ar)2.848 E(-)-.37 E(rays)108 312 Q F0(belo) -3.095 E .595(w\) named)-.25 F F2 -.27(NA)3.095 G(ME).27 E F0 .595 -(in the conte)3.095 F .595(xt of the e)-.15 F -.15(xe)-.15 G .595 -(cuting shell.).15 F .596(The standard output of)5.595 F F2(command) -3.296 E F0 .596(is con-)3.866 F .387 -(nected via a pipe to a \214le descriptor in the e)108 324 R -.15(xe) --.15 G .387(cuting shell, and that \214le descriptor is assigned to).15 -F F2 -.27(NA)2.886 G(ME).27 E F0([0].)A .57(The standard input of)108 -336 R F2(command)3.27 E F0 .571 -(is connected via a pipe to a \214le descriptor in the e)3.84 F -.15(xe) --.15 G .571(cuting shell, and that).15 F 1.221 -(\214le descriptor is assigned to)108 348 R F2 -.27(NA)3.721 G(ME).27 E -F0 3.721([1]. This)B 1.221(pipe is established before an)3.721 F 3.72 -(yr)-.15 G 1.22(edirections speci\214ed by the)-3.72 F 1.58 -(command \(see)108 360 R/F3 9/Times-Bold@0 SF(REDIRECTION)4.08 E F0 -(belo)3.83 E 4.08(w\). The)-.25 F 1.581 -(\214le descriptors can be utilized as ar)4.08 F 1.581 -(guments to shell com-)-.18 F .149 -(mands and redirections using standard w)108 372 R .149(ord e)-.1 F -2.649(xpansions. Other)-.15 F .148(than those created to e)2.649 F -.15 -(xe)-.15 G .148(cute command and).15 F 2.462 -(process substitutions, the \214le descriptors are not a)108 384 R -.25 -(va)-.2 G 2.463(ilable in subshells.).25 F 2.463 -(The process ID of the shell)7.463 F(spa)108 396 Q 1.115(wned to e)-.15 -F -.15(xe)-.15 G 1.115(cute the coprocess is a).15 F -.25(va)-.2 G 1.115 -(ilable as the v).25 F 1.115(alue of the v)-.25 F(ariable)-.25 E F2 -.27 -(NA)3.615 G(ME).27 E F0 3.615(_PID. The)B F1(wait)3.615 E F0 -.2(bu) -3.615 G(iltin).2 E(command may be used to w)108 408 Q +(cuting shell and the coprocess.).15 E(The syntax for a coprocess is:) +108 319.2 Q F2(copr)144 336 Q(oc)-.18 E F0([)2.5 E F1 -.27(NA)C(ME).27 E +F0(])A F1(command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E +F0(])A .599(This creates a coprocess named)108 352.8 R F1 -.27(NA)3.099 +G(ME).27 E F0(.)A F1(command)5.599 E F0 .599 +(may be either a simple command or a compound com-)3.099 F 1.4 +(mand \(see abo)108 364.8 R -.15(ve)-.15 G(\).).15 E F1 -.27(NA)6.4 G +(ME).27 E F0 1.4(is a shell v)3.9 F 1.4(ariable name.)-.25 F(If)6.4 E F1 +-.27(NA)3.9 G(ME).27 E F0 1.4(is not supplied, the def)3.9 F 1.4 +(ault name is)-.1 F F2(CO-)3.9 E(PR)108 376.8 Q(OC)-.3 E F0(.)A +(The recommended form to use for a coprocess is)108 393.6 Q F2(copr)144 +410.4 Q(oc)-.18 E F1 -.27(NA)2.5 G(ME).27 E F0({)2.5 E F1(command)2.5 E +F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E F0(]; })A 1.313(This f\ +orm is recommended because simple commands result in the coprocess al) +108 427.2 R -.1(wa)-.1 G 1.313(ys being named).1 F F2(CO-)3.812 E(PR)108 +439.2 Q(OC)-.3 E F0 2.5(,a)C(nd it is simpler to use and more complete \ +than the other compound commands.)-2.5 E(If)108 456 Q F1(command)3.061 E +F0 .561(is a compound command,)3.061 F F1 -.27(NA)3.061 G(ME).27 E F0 +.562(is optional. The w)3.061 F .562(ord follo)-.1 F(wing)-.25 E F2 +(copr)3.062 E(oc)-.18 E F0 .562(determines whether)3.062 F .339(that w) +108 468 R .339(ord is interpreted as a v)-.1 F .339 +(ariable name: it is interpreted as)-.25 F F1 -.27(NA)2.839 G(ME).27 E +F0 .338(if it is not a reserv)2.838 F .338(ed w)-.15 F .338 +(ord that intro-)-.1 F 1.121(duces a compound command.)108 480 R(If) +6.121 E F1(command)3.621 E F0 1.121(is a simple command,)3.621 F F1 -.27 +(NA)3.621 G(ME).27 E F0 1.121(is not allo)3.621 F 1.122 +(wed; this is to a)-.25 F -.2(vo)-.2 G(id).2 E(confusion between)108 492 +Q F1 -.27(NA)2.5 G(ME).27 E F0(and the \214rst w)2.5 E +(ord of the simple command.)-.1 E .09(When the coprocess is e)108 508.8 +R -.15(xe)-.15 G .09(cuted, the shell creates an array v).15 F .09 +(ariable \(see)-.25 F F2(Arrays)2.59 E F0(belo)2.59 E .09(w\) named)-.25 +F F1 -.27(NA)2.59 G(ME).27 E F0 .09(in the)2.59 F(conte)108 520.8 Q .302 +(xt of the e)-.15 F -.15(xe)-.15 G .302(cuting shell.).15 F .302 +(The standard output of)5.302 F F1(command)3.002 E F0 .302 +(is connected via a pipe to a \214le descriptor)3.572 F .588(in the e) +108 532.8 R -.15(xe)-.15 G .587 +(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27 +(NA)3.087 G(ME).27 E F0 3.087([0]. The)B .587(standard input of)3.087 F +F1(command)3.287 E F0(is)3.857 E 2.029 +(connected via a pipe to a \214le descriptor in the e)108 544.8 R -.15 +(xe)-.15 G 2.029 +(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27 +(NA)108 556.8 S(ME).27 E F0 2.879([1]. This)B .379 +(pipe is established before an)2.879 F 2.879(yr)-.15 G .379 +(edirections speci\214ed by the command \(see)-2.879 F/F3 9/Times-Bold@0 +SF(REDIRECTION)2.879 E F0(belo)108 568.8 Q 3.425(w\). The)-.25 F .925 +(\214le descriptors can be utilized as ar)3.425 F .926 +(guments to shell commands and redirections using stan-)-.18 F .286 +(dard w)108 580.8 R .286(ord e)-.1 F 2.786(xpansions. Other)-.15 F .286 +(than those created to e)2.786 F -.15(xe)-.15 G .286 +(cute command and process substitutions, the \214le de-).15 F +(scriptors are not a)108 592.8 Q -.25(va)-.2 G(ilable in subshells.).25 +E 1.676(The process ID of the shell spa)108 609.6 R 1.676(wned to e)-.15 +F -.15(xe)-.15 G 1.676(cute the coprocess is a).15 F -.25(va)-.2 G 1.676 +(ilable as the v).25 F 1.677(alue of the v)-.25 F(ariable)-.25 E F1 -.27 +(NA)108 621.6 S(ME).27 E F0 2.5(_PID. The)B F2(wait)2.5 E F0 -.2(bu)2.5 +G(iltin command may be used to w).2 E (ait for the coprocess to terminate.)-.1 E .336 (Since the coprocess is created as an asynchronous command, the)108 -424.8 R F1(copr)2.836 E(oc)-.18 E F0 .336(command al)2.836 F -.1(wa)-.1 -G .336(ys returns success.).1 F -(The return status of a coprocess is the e)108 436.8 Q(xit status of) --.15 E F2(command)2.5 E F0(.)A F1(Shell Function De\214nitions)87 453.6 -Q F0 2.698(As)108 465.6 S .198 -(hell function is an object that is called lik)-2.698 F 2.698(eas)-.1 G -.198(imple command and e)-2.698 F -.15(xe)-.15 G .197 -(cutes a compound command with).15 F 2.5(an)108 477.6 S .5 -.25(ew s) +638.4 R F2(copr)2.836 E(oc)-.18 E F0 .335(command al)2.835 F -.1(wa)-.1 +G .335(ys returns success.).1 F +(The return status of a coprocess is the e)108 650.4 Q(xit status of) +-.15 E F1(command)2.5 E F0(.)A F2(Shell Function De\214nitions)87 667.2 +Q F0 2.697(As)108 679.2 S .198 +(hell function is an object that is called lik)-2.697 F 2.698(eas)-.1 G +.198(imple command and e)-2.698 F -.15(xe)-.15 G .198 +(cutes a compound command with).15 F 2.5(an)108 691.2 S .5 -.25(ew s) -2.5 H(et of positional parameters.).25 E -(Shell functions are declared as follo)5 E(ws:)-.25 E F2(fname)108 494.4 -Q F0(\(\))2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C -(dir).37 E(ection)-.37 E F0(])A F1(function)108 506.4 Q F2(fname)2.5 E -F0([\(\)])2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C -(dir).37 E(ection)-.37 E F0(])A .216(This de\214nes a function named)144 -518.4 R F2(fname)2.716 E F0 5.217(.T)C .217(he reserv)-5.217 F .217 -(ed w)-.15 F(ord)-.1 E F1(function)2.717 E F0 .217(is optional.)2.717 F -.217(If the)5.217 F F1(function)2.717 E F0(re-)2.717 E(serv)144 530.4 Q -.68(ed w)-.15 F .68(ord is supplied, the parentheses are optional.)-.1 F -(The)5.68 E F2(body)3.18 E F0 .68(of the function is the compound)3.18 F -(command)144 542.4 Q F2(compound\255command)2.784 E F0(\(see)3.354 E F1 -.084(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G 2.584 -(\). That).15 F .084(command is usually a)2.584 F F2(list)144 554.4 Q F0 -.044(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F -2.544(yc)-.15 G .044(ommand listed under)-2.544 F F1 .044 -(Compound Commands)2.544 F F0(abo)144 566.4 Q -.15(ve)-.15 G 2.901(,w) -.15 G .401(ith one e)-2.901 F .401(xception: If the)-.15 F F1(function) -2.901 E F0(reserv)2.901 E .401(ed w)-.15 F .401(ord is used, b)-.1 F -.402(ut the parentheses are not sup-)-.2 F 1.046 -(plied, the braces are required.)144 578.4 R F2(compound\255command) -6.046 E F0 1.046(is e)3.546 F -.15(xe)-.15 G 1.046(cuted whene).15 F --.15(ve)-.25 G(r).15 E F2(fname)3.546 E F0 1.045(is speci\214ed as)3.546 -F .365(the name of a simple command.)144 590.4 R .365(When in)5.365 F F2 -.366(posix mode)2.865 F F0(,)A F2(fname)2.866 E F0 .366(must be a v) -2.866 F .366(alid shell)-.25 F F2(name)2.866 E F0 .366(and may)2.866 F -.894(not be the name of one of the POSIX)144 602.4 R F2 .893(special b) -3.393 F(uiltins)-.2 E F0 5.893(.I)C 3.393(nd)-5.893 G(ef)-3.393 E .893 -(ault mode, a function name can be)-.1 F(an)144 614.4 Q 3.649(yu)-.15 G -1.149(nquoted shell w)-3.649 F 1.15(ord that does not contain)-.1 F F1 -($)3.65 E F0 6.15(.A)C 1.45 -.15(ny r)-6.15 H 1.15(edirections \(see).15 -F F3(REDIRECTION)3.65 E F0(belo)3.4 E(w\))-.25 E .417(speci\214ed when \ -a function is de\214ned are performed when the function is e)144 626.4 R --.15(xe)-.15 G 2.916(cuted. The).15 F -.15(ex)2.916 G .416(it status).15 -F .733(of a function de\214nition is zero unless a syntax error occurs \ -or a readonly function with the same)144 638.4 R .178(name already e)144 -650.4 R 2.678(xists. When)-.15 F -.15(exe)2.678 G .178(cuted, the e).15 -F .178(xit status of a function is the e)-.15 F .177 -(xit status of the last com-)-.15 F(mand e)144 662.4 Q -.15(xe)-.15 G -(cuted in the body).15 E 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F0 -(belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95/Times-Bold@0 SF(COMMENTS) -72 679.2 Q F0 .982(In a non-interacti)108 691.2 R 1.282 -.15(ve s)-.25 H -.982(hell, or an interacti).15 F 1.282 -.15(ve s)-.25 H .982 -(hell in which the).15 F F1(interacti)3.482 E -.1(ve)-.1 G(_comments).1 -E F0 .982(option to the)3.482 F F1(shopt)3.482 E F0 -.2(bu)108 703.2 S -.952(iltin is enabled \(see).2 F F3 .952(SHELL B)3.452 F(UIL)-.09 E .952 -(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) --.1 F .952(ginning with)-.15 F F1(#)3.451 E F0 .951(causes that w)3.451 -F(ord)-.1 E .604 -(and all remaining characters on that line to be ignored.)108 715.2 R -.605(An interacti)5.605 F .905 -.15(ve s)-.25 H .605(hell without the) -.15 F F1(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 727.2 Q F0 -1.337(option enabled does not allo)3.837 F 3.837(wc)-.25 G 3.836 -(omments. The)-3.837 F F1(interacti)3.836 E -.1(ve)-.1 G(_comments).1 E -F0 1.336(option is on by def)3.836 F 1.336(ault in)-.1 F(GNU Bash 5.1)72 -768 Q(2020 October 29)141.235 E(7)195.395 E 0 Cg EP +(Shell functions are declared as follo)5 E(ws:)-.25 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(7)190.955 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(interacti)108 84 Q -.3 -.15(ve s)-.25 H(hells.).15 E/F1 10.95/Times-Bold@0 SF -.11(QU)72 -100.8 S -.438(OT).11 G(ING).438 E/F2 10/Times-Italic@0 SF(Quoting)108 -112.8 Q F0 .477(is used to remo)2.977 F .777 -.15(ve t)-.15 H .477 -(he special meaning of certain characters or w).15 F .477 -(ords to the shell.)-.1 F .478(Quoting can be)5.478 F .185 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 +/Times-Italic@0 SF(fname)108 84 Q F0(\(\))2.5 E F1(compound\255command) +2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 E F0(])A/F2 10 +/Times-Bold@0 SF(function)108 96 Q F1(fname)2.5 E F0([\(\)])2.5 E F1 +(compound\255command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 +E F0(])A .217(This de\214nes a function named)144 108 R F1(fname)2.717 E +F0 5.217(.T)C .217(he reserv)-5.217 F .217(ed w)-.15 F(ord)-.1 E F2 +(function)2.717 E F0 .216(is optional.)2.717 F .216(If the)5.216 F F2 +(function)2.716 E F0(re-)2.716 E(serv)144 120 Q .68(ed w)-.15 F .68 +(ord is supplied, the parentheses are optional.)-.1 F(The)5.68 E F1 +(body)3.18 E F0 .68(of the function is the compound)3.18 F(command)144 +132 Q F1(compound\255command)2.784 E F0(\(see)3.354 E F2 .084 +(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G 2.584(\). That) +.15 F .084(command is usually a)2.584 F F1(list)144 144 Q F0 .044 +(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F 2.544 +(yc)-.15 G .044(ommand listed under)-2.544 F F2 .044(Compound Commands) +2.544 F F0(abo)144 156 Q -.15(ve)-.15 G 5.532(.I).15 G 3.032(ft)-5.532 G +(he)-3.032 E F2(function)3.032 E F0(reserv)3.032 E .532(ed w)-.15 F .532 +(ord is used, b)-.1 F .532 +(ut the parentheses are not supplied, the braces are)-.2 F(recommended.) +144 168 Q F1(compound\255command)6.253 E F0 1.253(is e)3.753 F -.15(xe) +-.15 G 1.253(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1(fname)3.753 E +F0 1.254(is speci\214ed as the name of a)3.753 F 1.253(simple command.) +144 180 R 1.253(When in)6.253 F F1 1.253(posix mode)3.753 F F0(,)A F1 +(fname)3.753 E F0 1.252(must be a v)3.752 F 1.252(alid shell)-.25 F F1 +(name)3.752 E F0 1.252(and may not be the)3.752 F .088 +(name of one of the POSIX)144 192 R F1 .089(special b)2.589 F(uiltins) +-.2 E F0 5.089(.I)C 2.589(nd)-5.089 G(ef)-2.589 E .089 +(ault mode, a function name can be an)-.1 F 2.589(yu)-.15 G(nquoted) +-2.589 E .165(shell w)144 204 R .165(ord that does not contain)-.1 F F2 +($)2.665 E F0 5.165(.A)C .465 -.15(ny r)-5.165 H .165(edirections \(see) +.15 F/F3 9/Times-Bold@0 SF(REDIRECTION)2.665 E F0(belo)2.415 E .164 +(w\) speci\214ed when a)-.25 F .06 +(function is de\214ned are performed when the function is e)144 216 R +-.15(xe)-.15 G 2.561(cuted. The).15 F -.15(ex)2.561 G .061 +(it status of a function de\214-).15 F .579(nition is zero unless a syn\ +tax error occurs or a readonly function with the same name already e)144 +228 R(x-)-.15 E 2.592(ists. When)144 240 R -.15(exe)2.592 G .092 +(cuted, the e).15 F .093(xit status of a function is the e)-.15 F .093 +(xit status of the last command e)-.15 F -.15(xe)-.15 G .093(cuted in) +.15 F(the body)144 252 Q 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F0 +(belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95/Times-Bold@0 SF(COMMENTS) +72 268.8 Q F0 .982(In a non-interacti)108 280.8 R 1.282 -.15(ve s)-.25 H +.982(hell, or an interacti).15 F 1.282 -.15(ve s)-.25 H .982 +(hell in which the).15 F F2(interacti)3.482 E -.1(ve)-.1 G(_comments).1 +E F0 .982(option to the)3.482 F F2(shopt)3.482 E F0 -.2(bu)108 292.8 S +.951(iltin is enabled \(see).2 F F3 .952(SHELL B)3.451 F(UIL)-.09 E .952 +(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) +-.1 F .952(ginning with)-.15 F F2(#)3.452 E F0 .952(causes that w)3.452 +F(ord)-.1 E .605 +(and all remaining characters on that line to be ignored.)108 304.8 R +.604(An interacti)5.605 F .904 -.15(ve s)-.25 H .604(hell without the) +.15 F F2(interacti)3.104 E -.1(ve)-.1 G(_com-).1 E(ments)108 316.8 Q F0 +.34(option enabled does not allo)2.84 F 2.84(wc)-.25 G 2.84 +(omments. The)-2.84 F F2(interacti)2.84 E -.1(ve)-.1 G(_comments).1 E F0 +.34(option is on by def)2.84 F .34(ault in in-)-.1 F(teracti)108 328.8 Q +.3 -.15(ve s)-.25 H(hells.).15 E F4 -.11(QU)72 345.6 S -.438(OT).11 G +(ING).438 E F1(Quoting)108 357.6 Q F0 .478(is used to remo)2.978 F .777 +-.15(ve t)-.15 H .477(he special meaning of certain characters or w).15 +F .477(ords to the shell.)-.1 F .477(Quoting can be)5.477 F .184 (used to disable special treatment for special characters, to pre)108 -124.8 R -.15(ve)-.25 G .185(nt reserv).15 F .184(ed w)-.15 F .184 -(ords from being recognized as)-.1 F(such, and to pre)108 136.8 Q -.15 -(ve)-.25 G(nt parameter e).15 E(xpansion.)-.15 E .288(Each of the)108 -153.6 R F2(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288 -(listed abo)2.788 F .588 -.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 -SF(DEFINITIONS)2.788 E F0 .288 -(has special meaning to the shell and must be)2.538 F -(quoted if it is to represent itself.)108 165.6 Q 1.345 -(When the command history e)108 182.4 R 1.344(xpansion f)-.15 F 1.344 +369.6 R -.15(ve)-.25 G .185(nt reserv).15 F .185(ed w)-.15 F .185 +(ords from being recognized as)-.1 F(such, and to pre)108 381.6 Q -.15 +(ve)-.25 G(nt parameter e).15 E(xpansion.)-.15 E .289(Each of the)108 +398.4 R F1(metac)2.789 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288 +(listed abo)2.789 F .588 -.15(ve u)-.15 H(nder).15 E F3(DEFINITIONS) +2.788 E F0 .288(has special meaning to the shell and must be)2.538 F +(quoted if it is to represent itself.)108 410.4 Q 1.344 +(When the command history e)108 427.2 R 1.344(xpansion f)-.15 F 1.344 (acilities are being used \(see)-.1 F F3(HIST)3.844 E(OR)-.162 E 3.594 -(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.594 E 1.344(w\), the) --.25 F F2(history e)108 194.4 Q(xpansion)-.2 E F0(character)2.5 E 2.5 -(,u)-.4 G(sually)-2.5 E/F4 10/Times-Bold@0 SF(!)2.5 E F0 2.5(,m)C -(ust be quoted to pre)-2.5 E -.15(ve)-.25 G(nt history e).15 E -(xpansion.)-.15 E(There are three quoting mechanisms: the)108 211.2 Q F2 -(escape c)2.69 E(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G -(ingle quotes, and double quotes.)-2.5 E 2.962(An)108 228 S .463 -(on-quoted backslash \()-2.962 F F4(\\)A F0 2.963(\)i)C 2.963(st)-2.963 -G(he)-2.963 E F2 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F0 5.463 +(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.595 E 1.345(w\), the) +-.25 F F1(history e)108 439.2 Q(xpansion)-.2 E F0(character)2.5 E 2.5 +(,u)-.4 G(sually)-2.5 E F2(!)2.5 E F0 2.5(,m)C(ust be quoted to pre)-2.5 +E -.15(ve)-.25 G(nt history e).15 E(xpansion.)-.15 E +(There are three quoting mechanisms: the)108 456 Q F1(escape c)2.69 E +(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G +(ingle quotes, and double quotes.)-2.5 E 2.963(An)108 472.8 S .463 +(on-quoted backslash \()-2.963 F F2(\\)A F0 2.963(\)i)C 2.963(st)-2.963 +G(he)-2.963 E F1 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F0 5.463 (.I).73 G 2.963(tp)-5.463 G(reserv)-2.963 E .463(es the literal v)-.15 F -.463(alue of the ne)-.25 F .463(xt character that)-.15 F(follo)108 240 Q -1.554(ws, with the e)-.25 F 1.553(xception of . If)-.25 F(a)4.053 E F4(\\)4.053 E F0( pair appears, and the backslash is not itself)-.25 F .347 -(quoted, the)108 252 R F4(\\)2.847 E F0(. If)-.25 F(a)4.053 E F2(\\)4.053 E F0( pair appears, and the backslash is not itself)-.25 F .348 +(quoted, the)108 496.8 R F2(\\)2.848 E F0( is treated as a line continuation \(that is, it is remo)-.25 F --.15(ve)-.15 G 2.848(df).15 G .348(rom the input stream and ef-)-2.848 F -(fecti)108 264 Q -.15(ve)-.25 G(ly ignored\).).15 E .295 -(Enclosing characters in single quotes preserv)108 280.8 R .295 +-.15(ve)-.15 G 2.847(df).15 G .347(rom the input stream and ef-)-2.847 F +(fecti)108 508.8 Q -.15(ve)-.25 G(ly ignored\).).15 E .295 +(Enclosing characters in single quotes preserv)108 525.6 R .295 (es the literal v)-.15 F .295(alue of each character within the quotes.) -.25 F 2.795(As)5.295 G(in-)-2.795 E -(gle quote may not occur between single quotes, e)108 292.8 Q -.15(ve) --.25 G 2.5(nw).15 G(hen preceded by a backslash.)-2.5 E .033 -(Enclosing characters in double quotes preserv)108 309.6 R .034 +(gle quote may not occur between single quotes, e)108 537.6 Q -.15(ve) +-.25 G 2.5(nw).15 G(hen preceded by a backslash.)-2.5 E .034 +(Enclosing characters in double quotes preserv)108 554.4 R .034 (es the literal v)-.15 F .034 (alue of all characters within the quotes, with the)-.25 F -.15(ex)108 -321.6 S .108(ception of).15 F F4($)2.608 E F0(,)A F4<92>2.608 E F0(,)A -F4(\\)2.608 E F0 2.608(,a)C .107(nd, when history e)-2.608 F .107 -(xpansion is enabled,)-.15 F F4(!)2.607 E F0 5.107(.W)C .107 -(hen the shell is in)-5.107 F F2 .107(posix mode)2.607 F F0 2.607(,t)C -(he)-2.607 E F4(!)2.607 E F0 .107(has no)2.607 F .46 -(special meaning within double quotes, e)108 333.6 R -.15(ve)-.25 G 2.96 +566.4 S .107(ception of).15 F F2($)2.607 E F0(,)A F2<92>2.607 E F0(,)A +F2(\\)2.607 E F0 2.607(,a)C .107(nd, when history e)-2.607 F .107 +(xpansion is enabled,)-.15 F F2(!)2.607 E F0 5.107(.W)C .107 +(hen the shell is in)-5.107 F F1 .108(posix mode)2.608 F F0 2.608(,t)C +(he)-2.608 E F2(!)2.608 E F0 .108(has no)2.608 F .46 +(special meaning within double quotes, e)108 578.4 R -.15(ve)-.25 G 2.96 (nw).15 G .46(hen history e)-2.96 F .46(xpansion is enabled.)-.15 F .46 -(The characters)5.46 F F4($)2.96 E F0(and)2.96 E F4<92>2.96 E F0(re-) -2.96 E .563(tain their special meaning within double quotes.)108 345.6 R -.562(The backslash retains its special meaning only when fol-)5.563 F -(lo)108 357.6 Q .601(wed by one of the follo)-.25 F .602 -(wing characters:)-.25 F F4($)3.102 E F0(,)A F4<92>3.102 E F0(,)A F4(") -3.935 E F0(,).833 E F4(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F4() -3.102 E F0 5.602(.A)C .602(double quote may be quoted within)-2.5 F .131 -(double quotes by preceding it with a backslash.)108 369.6 R .131 -(If enabled, history e)5.131 F .13(xpansion will be performed unless an) --.15 F F4(!)2.63 E F0 -(appearing in double quotes is escaped using a backslash.)108 381.6 Q -(The backslash preceding the)5 E F4(!)2.5 E F0(is not remo)5 E -.15(ve) --.15 G(d.).15 E(The special parameters)108 398.4 Q F4(*)2.5 E F0(and)2.5 -E F4(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H +(The characters)5.46 F F2($)2.96 E F0(and)2.96 E F2<92>2.96 E F0(re-) +2.96 E .562(tain their special meaning within double quotes.)108 590.4 R +.563(The backslash retains its special meaning only when fol-)5.563 F +(lo)108 602.4 Q .602(wed by one of the follo)-.25 F .602 +(wing characters:)-.25 F F2($)3.102 E F0(,)A F2<92>3.102 E F0(,)A F2(") +3.935 E F0(,).833 E F2(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F2() +3.102 E F0 5.602(.A)C .601(double quote may be quoted within)-2.5 F .13 +(double quotes by preceding it with a backslash.)108 614.4 R .131 +(If enabled, history e)5.131 F .131 +(xpansion will be performed unless an)-.15 F F2(!)2.631 E F0 +(appearing in double quotes is escaped using a backslash.)108 626.4 Q +(The backslash preceding the)5 E F2(!)2.5 E F0(is not remo)5 E -.15(ve) +-.15 G(d.).15 E(The special parameters)108 643.2 Q F2(*)2.5 E F0(and)2.5 +E F2(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H (pecial meaning when in double quotes \(see).15 E F3 -.666(PA)2.5 G -(RAMETERS).666 E F0(belo)2.25 E(w\).)-.25 E -.8(Wo)108 415.2 S .211 -(rds of the form).8 F F4($)2.711 E F0<08>A F2(string)A F0 2.711<0861>C -.211(re treated specially)-2.711 F 5.211(.T)-.65 G .211(he w)-5.211 F -.211(ord e)-.1 F .212(xpands to)-.15 F F2(string)2.712 E F0 2.712(,w)C -.212(ith backslash-escaped char)-2.712 F(-)-.2 E .605 -(acters replaced as speci\214ed by the ANSI C standard.)108 427.2 R .604 -(Backslash escape sequences, if present, are decoded)5.605 F(as follo) -108 439.2 Q(ws:)-.25 E F4(\\a)144 451.2 Q F0(alert \(bell\))180 451.2 Q -F4(\\b)144 463.2 Q F0(backspace)180 463.2 Q F4(\\e)144 475.2 Q(\\E)144 -487.2 Q F0(an escape character)180 487.2 Q F4(\\f)144 499.2 Q F0 -(form feed)180 499.2 Q F4(\\n)144 511.2 Q F0(ne)180 511.2 Q 2.5(wl)-.25 -G(ine)-2.5 E F4(\\r)144 523.2 Q F0(carriage return)180 523.2 Q F4(\\t) -144 535.2 Q F0(horizontal tab)180 535.2 Q F4(\\v)144 547.2 Q F0 -.15(ve) -180 547.2 S(rtical tab).15 E F4(\\\\)144 559.2 Q F0(backslash)180 559.2 -Q F4<5c08>144 571.2 Q F0(single quote)180 571.2 Q F4(\\")144 583.2 Q F0 -(double quote)180 583.2 Q F4(\\?)144 595.2 Q F0(question mark)180 595.2 -Q F4(\\)144 607.2 Q F2(nnn)A F0(the eight-bit character whose v)180 -607.2 Q(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0 -(\(one to three octal digits\))2.5 E F4(\\x)144 619.2 Q F2(HH)A F0 -(the eight-bit character whose v)180 619.2 Q(alue is the he)-.25 E -(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh) --.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F4(\\u)144 631.2 Q F2(HHHH)A F0 -1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 643.2 R 1.507 -(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) -4.007 E F0(\(one to four he)180 655.2 Q 2.5(xd)-.15 G(igits\))-2.5 E F4 -(\\U)144 667.2 Q F2(HHHHHHHH)A F0 .548 -(the Unicode \(ISO/IEC 10646\) character whose v)180 679.2 R .547 -(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) -3.047 E(HHH)180 691.2 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G -(igits\))-2.5 E F4(\\c)144 703.2 Q F2(x)A F0 2.5(ac)180 703.2 S(ontrol-) --2.5 E F2(x)A F0(character)2.5 E(The e)108 720 Q(xpanded result is sing\ -le-quoted, as if the dollar sign had not been present.)-.15 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(8)195.395 E 0 Cg EP +(RAMETERS).666 E F0(belo)2.25 E(w\).)-.25 E .149 +(Character sequences of the form)108 660 R F2($)2.649 E F0<08>A F1 +(string)A F0 2.649<0861>C .149(re treated as a special v)-2.649 F .149 +(ariant of single quotes.)-.25 F .148(The sequence e)5.148 F(x-)-.15 E +.527(pands to)108 672 R F1(string)3.027 E F0 3.027(,w)C .527 +(ith backslash-escaped characters in)-3.027 F F1(string)3.027 E F0 .528 +(replaced as speci\214ed by the ANSI C standard.)3.027 F +(Backslash escape sequences, if present, are decoded as follo)108 684 Q +(ws:)-.25 E F2(\\a)144 696 Q F0(alert \(bell\))180 696 Q F2(\\b)144 708 +Q F0(backspace)180 708 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 +E(8)190.955 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 2.64(Ad)108 84 S -.14(ouble-quoted string preceded by a dollar sign \()-2.64 F/F1 10 -/Times-Bold@0 SF($)A F0(")A/F2 10/Times-Italic@0 SF(string)A F0 .14 -("\) will cause the string to be translated according)B .31 -(to the current locale.)108 96 R(The)5.31 E F2 -.1(ge)2.809 G(tte).1 E -(xt)-.2 E F0 .309(infrastructure performs the message catalog lookup an\ -d translation, using)2.809 F(the)108 108 Q F1(LC_MESSA)2.625 E(GES)-.55 -E F0(and)2.625 E F1(TEXTDOMAIN)2.625 E F0 .125(shell v)2.625 F 2.625 -(ariables. If)-.25 F .126(the current locale is)2.626 F F1(C)2.626 E F0 -(or)2.626 E F1(POSIX)2.626 E F0 2.626(,o)C 2.626(ri)-2.626 G 2.626(ft) --2.626 G(here)-2.626 E .362(are no translations a)108 120 R -.25(va)-.2 -G .362(ilable, the dollar sign is ignored.).25 F .362 -(If the string is translated and replaced, the replace-)5.362 F -(ment is double-quoted.)108 132 Q/F3 10.95/Times-Bold@0 SF -.81(PA)72 -148.8 S(RAMETERS).81 E F0(A)108 160.8 Q F2(par)4.574 E(ameter)-.15 E F0 -.824(is an entity that stores v)4.054 F 3.324(alues. It)-.25 F .824 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(\\e)144 84 Q(\\E)144 96 Q F0(an escape character)180 96 Q F1(\\f)144 +108 Q F0(form feed)180 108 Q F1(\\n)144 120 Q F0(ne)180 120 Q 2.5(wl) +-.25 G(ine)-2.5 E F1(\\r)144 132 Q F0(carriage return)180 132 Q F1(\\t) +144 144 Q F0(horizontal tab)180 144 Q F1(\\v)144 156 Q F0 -.15(ve)180 +156 S(rtical tab).15 E F1(\\\\)144 168 Q F0(backslash)180 168 Q F1<5c08> +144 180 Q F0(single quote)180 180 Q F1(\\")144 192 Q F0(double quote)180 +192 Q F1(\\?)144 204 Q F0(question mark)180 204 Q F1(\\)144 216 Q/F2 10 +/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v)180 216 Q +(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0 +(\(one to three octal digits\))2.5 E F1(\\x)144 228 Q F2(HH)A F0 +(the eight-bit character whose v)180 228 Q(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(\\u)144 240 Q F2(HHHH)A F0 +1.507(the Unicode \(ISO/IEC 10646\) character whose v)180 252 R 1.506 +(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) +4.006 E F0(\(one to four he)180 264 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 +(\\U)144 276 Q F2(HHHHHHHH)A F0 .547 +(the Unicode \(ISO/IEC 10646\) character whose v)180 288 R .547 +(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) +3.048 E(HHH)180 300 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F1(\\c)144 312 Q F2(x)A F0 2.5(ac)180 312 S(ontrol-)-2.5 E F2(x)A +F0(character)2.5 E(The e)108 328.8 Q(xpanded result is single-quoted, a\ +s if the dollar sign had not been present.)-.15 E 2.64(Ad)108 345.6 S +.14(ouble-quoted string preceded by a dollar sign \()-2.64 F F1($)A F0 +(")A F2(string)A F0 .14 +("\) will cause the string to be translated according)B .784 +(to the current locale.)108 357.6 R(The)5.784 E F2 -.1(ge)3.284 G(tte).1 +E(xt)-.2 E F0 .784 +(infrastructure performs the lookup and translation, using the)3.284 F +F1(LC_MES-)3.285 E(SA)108 369.6 Q(GES)-.55 E F0(,)A F1(TEXTDOMAINDIR) +2.761 E F0 2.761(,a)C(nd)-2.761 E F1(TEXTDOMAIN)2.761 E F0 .261(shell v) +2.761 F 2.761(ariables. If)-.25 F .261(the current locale is)2.761 F F1 +(C)2.76 E F0(or)2.76 E F1(POSIX)2.76 E F0(,)A .791 +(if there are no translations a)108 381.6 R -.25(va)-.2 G .792(ilable, \ +or if the string is not translated, the dollar sign is ignored.).25 F +.792(This is a)5.792 F .535 +(form of double quoting, so the string remains double-quoted by def)108 +393.6 R .534(ault, whether or not it is translated and)-.1 F 2.797 +(replaced. If)108 405.6 R(the)2.797 E F1(noexpand_translation)2.797 E F0 +.297(option is enabled using the)2.797 F F1(shopt)2.797 E F0 -.2(bu) +2.797 G .297(iltin, translated strings are sin-).2 F 2.045 +(gle-quoted instead of double-quoted.)108 417.6 R 2.044 +(See the description of)7.045 F F1(shopt)4.544 E F0(belo)4.544 E 4.544 +(wu)-.25 G(nder)-4.544 E/F3 9/Times-Bold@0 SF(SHELL)4.544 E/F4 9 +/Times-Roman@0 SF -.09(BU)C(IL).09 E(TIN)-.828 E F3(COM-)A(MANDS)108 +429.6 Q F4(.)A/F5 10.95/Times-Bold@0 SF -.81(PA)72 446.4 S(RAMETERS).81 +E F0(A)108 458.4 Q F2(par)4.574 E(ameter)-.15 E F0 .824 +(is an entity that stores v)4.054 F 3.324(alues. It)-.25 F .824 (can be a)3.324 F F2(name)3.685 E F0 3.325(,an).18 G(umber)-3.325 E 3.325(,o)-.4 G 3.325(ro)-3.325 G .825(ne of the special characters) --3.325 F .802(listed belo)108 172.8 R 3.302(wu)-.25 G(nder)-3.302 E F1 +-3.325 F .802(listed belo)108 470.4 R 3.302(wu)-.25 G(nder)-3.302 E F1 .802(Special P)3.302 F(arameters)-.1 E F0 5.802(.A)C F2(variable)-2.21 E F0 .802(is a parameter denoted by a)3.482 F F2(name)3.662 E F0 5.801(.A) -.18 G -.25(va)-2.5 G .801(riable has a).25 F F2(value)108 184.8 Q F0 +.18 G -.25(va)-2.5 G .801(riable has a).25 F F2(value)108 482.4 Q F0 .368(and zero or more)2.868 F F2(attrib)2.868 E(utes)-.2 E F0 5.369(.A)C (ttrib)-5.369 E .369(utes are assigned using the)-.2 F F1(declar)2.869 E (e)-.18 E F0 -.2(bu)2.869 G .369(iltin command \(see).2 F F1(declar) -2.869 E(e)-.18 E F0(belo)108 196.8 Q 2.5(wi)-.25 G(n)-2.5 E/F4 9 -/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E/F5 9 -/Times-Roman@0 SF(\).)A F0 2.755(Ap)108 213.6 S .255 -(arameter is set if it has been assigned a v)-2.755 F 2.754(alue. The) --.25 F .254(null string is a v)2.754 F .254(alid v)-.25 F 2.754 -(alue. Once)-.25 F 2.754(av)2.754 G .254(ariable is set, it)-3.004 F -(may be unset only by using the)108 225.6 Q F1(unset)2.5 E F0 -.2(bu)2.5 -G(iltin command \(see).2 E F4(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS) --.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 242.4 Q F2(variable)2.79 E F0 -(may be assigned to by a statement of the form)2.68 E F2(name)144 259.2 -Q F0(=[)A F2(value)A F0(])A(If)108 276 Q F2(value)3.022 E F0 .232 +2.869 E(e)-.18 E F0(belo)108 494.4 Q 2.5(wi)-.25 G(n)-2.5 E F3(SHELL B) +2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F4(\).)A F0 2.755(Ap)108 511.2 S +.255(arameter is set if it has been assigned a v)-2.755 F 2.754 +(alue. The)-.25 F .254(null string is a v)2.754 F .254(alid v)-.25 F +2.754(alue. Once)-.25 F 2.754(av)2.754 G .254(ariable is set, it)-3.004 +F(may be unset only by using the)108 523.2 Q F1(unset)2.5 E F0 -.2(bu) +2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS) +-.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 540 Q F2(variable)2.79 E F0 +(may be assigned to by a statement of the form)2.68 E F2(name)144 556.8 +Q F0(=[)A F2(value)A F0(])A(If)108 573.6 Q F2(value)3.022 E F0 .232 (is not gi)2.912 F -.15(ve)-.25 G .232(n, the v).15 F .232 (ariable is assigned the null string.)-.25 F(All)5.233 E F2(values)3.023 E F0(under)3.003 E .233(go tilde e)-.18 F .233(xpansion, parameter)-.15 -F .515(and v)108 288 R .515(ariable e)-.25 F .515 +F .515(and v)108 585.6 R .515(ariable e)-.25 F .515 (xpansion, command substitution, arithmetic e)-.15 F .515 (xpansion, and quote remo)-.15 F -.25(va)-.15 G 3.015(l\().25 G(see) --3.015 E F4(EXP)3.015 E(ANSION)-.666 E F0(belo)108 300 Q 2.698(w\). If) --.25 F .198(the v)2.698 F .198(ariable has its)-.25 F F1(integer)2.698 E -F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value)2.988 E F0 .198 -(is e)2.878 F -.25(va)-.25 G .199(luated as an arithmetic e).25 F .199 -(xpression e)-.15 F -.15(ve)-.25 G(n).15 E .902(if the $\(\(...\)\) e) -108 312 R .902(xpansion is not used \(see)-.15 F F1 .901 -(Arithmetic Expansion)3.401 F F0(belo)3.401 E 3.401(w\). W)-.25 F .901 -(ord splitting is not performed,)-.8 F 1.178(with the e)108 324 R 1.178 -(xception of)-.15 F F1("$@")3.678 E F0 1.178(as e)3.678 F 1.179 -(xplained belo)-.15 F 3.679(wu)-.25 G(nder)-3.679 E F1 1.179(Special P) -3.679 F(arameters)-.1 E F0 6.179(.P)C 1.179(athname e)-6.329 F 1.179 -(xpansion is not)-.15 F 3.649(performed. Assignment)108 336 R 1.149 -(statements may also appear as ar)3.649 F 1.148(guments to the)-.18 F F1 -(alias)3.648 E F0(,)A F1(declar)3.648 E(e)-.18 E F0(,)A F1(typeset)3.648 -E F0(,)A F1(export)3.648 E F0(,)A F1 -.18(re)108 348 S(adonly).18 E F0 -3.288(,a)C(nd)-3.288 E F1(local)3.288 E F0 -.2(bu)3.288 G .788 -(iltin commands \().2 F F2(declar)A(ation)-.15 E F0 3.288 -(commands\). When)3.288 F(in)3.289 E F2 .789(posix mode)3.289 F F0 3.289 -(,t)C .789(hese b)-3.289 F .789(uiltins may)-.2 F 1.496 -(appear in a command after one or more instances of the)108 360 R F1 -(command)3.996 E F0 -.2(bu)3.996 G 1.496 -(iltin and retain these assignment).2 F(statement properties.)108 372 Q -.376(In the conte)108 388.8 R .376 -(xt where an assignment statement is assigning a v)-.15 F .376 -(alue to a shell v)-.25 F .377(ariable or array inde)-.25 F .377 -(x, the +=)-.15 F 1.631 -(operator can be used to append to or add to the v)108 400.8 R(ariable') --.25 E 4.13(sp)-.55 G(re)-4.13 E 1.63(vious v)-.25 F 4.13(alue. This) --.25 F 1.63(includes ar)4.13 F 1.63(guments to)-.18 F -.2(bu)108 412.8 S -.163(iltin commands such as).2 F F1(declar)2.664 E(e)-.18 E F0 .164 -(that accept assignment statements \()2.664 F F2(declar)A(ation)-.15 E -F0 2.664(commands\). When)2.664 F .164(+= is)2.664 F .252 -(applied to a v)108 424.8 R .252(ariable for which the)-.25 F F2(inte) +-3.015 E F3(EXP)3.015 E(ANSION)-.666 E F0(belo)108 597.6 Q 2.698 +(w\). If)-.25 F .198(the v)2.698 F .198(ariable has its)-.25 F F1 +(integer)2.698 E F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value) +2.988 E F0 .198(is e)2.878 F -.25(va)-.25 G .199 +(luated as an arithmetic e).25 F .199(xpression e)-.15 F -.15(ve)-.25 G +(n).15 E .746(if the $\(\(...\)\) e)108 609.6 R .746 +(xpansion is not used \(see)-.15 F F1 .745(Arithmetic Expansion)3.245 F +F0(belo)3.245 E 3.245(w\). W)-.25 F .745(ord splitting and pathname e) +-.8 F(x-)-.15 E 1.363(pansion are not performed.)108 621.6 R 1.364 +(Assignment statements may also appear as ar)6.363 F 1.364 +(guments to the)-.18 F F1(alias)3.864 E F0(,)A F1(declar)3.864 E(e)-.18 +E F0(,)A F1(typeset)108 633.6 Q F0(,)A F1(export)3.965 E F0(,)A F1 -.18 +(re)3.965 G(adonly).18 E F0 3.964(,a)C(nd)-3.964 E F1(local)3.964 E F0 +-.2(bu)3.964 G 1.464(iltin commands \().2 F F2(declar)A(ation)-.15 E F0 +3.964(commands\). When)3.964 F(in)3.964 E F2 1.464(posix mode)3.964 F F0 +(,)A 1.141(these b)108 645.6 R 1.142 +(uiltins may appear in a command after one or more instances of the)-.2 +F F1(command)3.642 E F0 -.2(bu)3.642 G 1.142(iltin and retain).2 F +(these assignment statement properties.)108 657.6 Q .377(In the conte) +108 674.4 R .377(xt where an assignment statement is assigning a v)-.15 +F .376(alue to a shell v)-.25 F .376(ariable or array inde)-.25 F .376 +(x, the +=)-.15 F 1.63 +(operator can be used to append to or add to the v)108 686.4 R(ariable') +-.25 E 4.131(sp)-.55 G(re)-4.131 E 1.631(vious v)-.25 F 4.131 +(alue. This)-.25 F 1.631(includes ar)4.131 F 1.631(guments to)-.18 F -.2 +(bu)108 698.4 S .164(iltin commands such as).2 F F1(declar)2.664 E(e) +-.18 E F0 .164(that accept assignment statements \()2.664 F F2(declar)A +(ation)-.15 E F0 2.664(commands\). When)2.664 F .163(+= is)2.663 F .251 +(applied to a v)108 710.4 R .251(ariable for which the)-.25 F F2(inte) 2.752 E -.1(ge)-.4 G(r).1 E F0(attrib)2.752 E .252(ute has been set,)-.2 -F F2(value)2.752 E F0 .251(is e)2.751 F -.25(va)-.25 G .251 -(luated as an arithmetic e).25 F(xpres-)-.15 E .05 -(sion and added to the v)108 436.8 R(ariable')-.25 E 2.55(sc)-.55 G .05 -(urrent v)-2.55 F .05(alue, which is also e)-.25 F -.25(va)-.25 G 2.55 -(luated. When).25 F .05(+= is applied to an array v)2.55 F(ari-)-.25 E -.459(able using compound assignment \(see)108 448.8 R F1(Arrays)2.959 E -F0(belo)2.959 E .459(w\), the v)-.25 F(ariable')-.25 E 2.959(sv)-.55 G -.459(alue is not unset \(as it is when using)-3.209 F .265(=\), and ne) -108 460.8 R 2.765(wv)-.25 G .265(alues are appended to the array be) --3.015 F .265(ginning at one greater than the array')-.15 F 2.765(sm) --.55 G .265(aximum inde)-2.765 F 2.765(x\()-.15 G(for)-2.765 E(inde)108 -472.8 Q -.15(xe)-.15 G 3.402(da).15 G .902 -(rrays\) or added as additional k)-3.402 F -.15(ey)-.1 G.15 E .901 -(alue pairs in an associati)-.25 F 1.201 -.15(ve a)-.25 H(rray).15 E -5.901(.W)-.65 G .901(hen applied to a string-)-5.901 F -.25(va)108 484.8 -S(lued v).25 E(ariable,)-.25 E F2(value)2.5 E F0(is e)2.5 E -(xpanded and appended to the v)-.15 E(ariable')-.25 E 2.5(sv)-.55 G -(alue.)-2.75 E 3.382(Av)108 501.6 S .882(ariable can be assigned the) --3.632 F F2(namer)3.382 E(ef)-.37 E F0(attrib)3.382 E .882 -(ute using the)-.2 F F13.382 E F0 .882(option to the)3.382 F F1 -(declar)3.382 E(e)-.18 E F0(or)3.383 E F1(local)3.383 E F0 -.2(bu)3.383 -G .883(iltin com-).2 F .316(mands \(see the descriptions of)108 513.6 R -F1(declar)2.816 E(e)-.18 E F0(and)2.816 E F1(local)2.816 E F0(belo)2.816 -E .316(w\) to create a)-.25 F F2(namer)2.815 E(ef)-.37 E F0 2.815(,o)C -2.815(rar)-2.815 G .315(eference to another v)-2.815 F(ari-)-.25 E 2.918 -(able. This)108 525.6 R(allo)2.918 E .418(ws v)-.25 F .418 -(ariables to be manipulated indirectly)-.25 F 5.419(.W)-.65 G(hene) --5.419 E -.15(ve)-.25 G 2.919(rt).15 G .419(he nameref v)-2.919 F .419 -(ariable is referenced, as-)-.25 F .133 -(signed to, unset, or has its attrib)108 537.6 R .132 -(utes modi\214ed \(other than using or changing the)-.2 F F2(namer)2.632 -E(ef)-.37 E F0(attrib)2.632 E .132(ute itself\), the)-.2 F 1.356 -(operation is actually performed on the v)108 549.6 R 1.357 -(ariable speci\214ed by the nameref v)-.25 F(ariable')-.25 E 3.857(sv) --.55 G 3.857(alue. A)-4.107 F 1.357(nameref is)3.857 F .972 -(commonly used within shell functions to refer to a v)108 561.6 R .971 -(ariable whose name is passed as an ar)-.25 F .971(gument to the)-.18 F -2.5(function. F)108 573.6 R(or instance, if a v)-.15 E -(ariable name is passed to a shell function as its \214rst ar)-.25 E -(gument, running)-.18 E/F6 10/Courier@0 SF(declare -n ref=$1)144 591.6 Q -F0 .302(inside the function creates a nameref v)108 609.6 R(ariable)-.25 -E F1 -.18(re)2.803 G(f).18 E F0 .303(whose v)2.803 F .303(alue is the v) --.25 F .303(ariable name passed as the \214rst ar)-.25 F(gu-)-.18 E -3.592(ment. References)108 621.6 R 1.092(and assignments to)3.592 F F1 --.18(re)3.592 G(f).18 E F0 3.592(,a)C 1.092(nd changes to its attrib) --3.592 F 1.092(utes, are treated as references, assign-)-.2 F .143 -(ments, and attrib)108 633.6 R .144(ute modi\214cations to the v)-.2 F -.144(ariable whose name w)-.25 F .144(as passed as)-.1 F F1($1)2.644 E -F0 5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .144 -(ariable in a)-.25 F F1 -.25(fo)108 645.6 S(r).25 E F0 .868 -(loop has the nameref attrib)3.368 F .868(ute, the list of w)-.2 F .867 -(ords can be a list of shell v)-.1 F .867 -(ariables, and a name reference)-.25 F .509 -(will be established for each w)108 657.6 R .509 -(ord in the list, in turn, when the loop is e)-.1 F -.15(xe)-.15 G 3.009 -(cuted. Array).15 F -.25(va)3.009 G .509(riables cannot be).25 F(gi)108 -669.6 Q -.15(ve)-.25 G 3.032(nt).15 G(he)-3.032 E F1(namer)3.032 E(ef) --.18 E F0(attrib)3.032 E 3.032(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G -1.332 -.4(r, n).15 H .532(ameref v).4 F .531 -(ariables can reference array v)-.25 F .531(ariables and subscripted ar) --.25 F(-)-.2 E .533(ray v)108 681.6 R 3.033(ariables. Namerefs)-.25 F -.533(can be unset using the)3.033 F F13.033 E F0 .533 -(option to the)3.033 F F1(unset)3.033 E F0 -.2(bu)3.034 G 3.034 -(iltin. Otherwise,).2 F(if)3.034 E F1(unset)3.034 E F0 .534(is e)3.034 F --.15(xe)-.15 G(-).15 E .443(cuted with the name of a nameref v)108 693.6 -R .442(ariable as an ar)-.25 F .442(gument, the v)-.18 F .442 -(ariable referenced by the nameref v)-.25 F(ariable)-.25 E -(will be unset.)108 705.6 Q(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(9)195.395 E 0 Cg EP +F F2(value)2.752 E F0 .252(is e)2.752 F -.25(va)-.25 G .252 +(luated as an arithmetic e).25 F(xpres-)-.15 E 1.227 +(sion and added to the v)108 722.4 R(ariable')-.25 E 3.727(sc)-.55 G +1.227(urrent v)-3.727 F 1.227(alue, which is also e)-.25 F -.25(va)-.25 +G 3.727(luated. When).25 F 1.226(+= is applied to an array)3.726 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(9)190.955 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF -.2(Po)87 84 S(sitional P).2 E(arameters)-.1 E F0(A)108 96 Q/F2 10 -/Times-Italic@0 SF .705(positional par)4.455 F(ameter)-.15 E F0 .706(is\ - a parameter denoted by one or more digits, other than the single digit\ - 0.)3.935 F(Posi-)5.706 E .445 -(tional parameters are assigned from the shell')108 108 R 2.944(sa)-.55 -G -.18(rg)-2.944 G .444(uments when it is in).18 F -.2(vo)-.4 G -.1(ke) -.2 G .444(d, and may be reassigned using).1 F(the)108 120 Q F1(set)3.333 -E F0 -.2(bu)3.333 G .833(iltin command.).2 F .834(Positional parameters\ - may not be assigned to with assignment statements.)5.833 F(The)5.834 E -(positional parameters are temporarily replaced when a shell function i\ -s e)108 132 Q -.15(xe)-.15 G(cuted \(see).15 E/F3 9/Times-Bold@0 SF -(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.404(When a positional par\ -ameter consisting of more than a single digit is e)108 148.8 R 1.403 -(xpanded, it must be enclosed in)-.15 F(braces \(see)108 160.8 Q F3(EXP) -2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1(Special P)87 177.6 Q -(arameters)-.1 E F0 1.674(The shell treats se)108 189.6 R -.15(ve)-.25 G -1.674(ral parameters specially).15 F 6.675(.T)-.65 G 1.675 -(hese parameters may only be referenced; assignment to)-6.675 F -(them is not allo)108 201.6 Q(wed.)-.25 E F1(*)108 213.6 Q F0 .224 -(Expands to the positional parameters, starting from one.)144 213.6 R -.223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662 -(quotes, each positional parameter e)144 225.6 R .662 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)108 84 S +.114(riable using compound assignment \(see).25 F/F1 10/Times-Bold@0 SF +(Arrays)2.614 E F0(belo)2.615 E .115(w\), the v)-.25 F(ariable')-.25 E +2.615(sv)-.55 G .115(alue is not unset \(as it is when us-)-2.865 F .388 +(ing =\), and ne)108 96 R 2.888(wv)-.25 G .388 +(alues are appended to the array be)-3.138 F .388 +(ginning at one greater than the array')-.15 F 2.887(sm)-.55 G .387 +(aximum inde)-2.887 F(x)-.15 E 1.596(\(for inde)108 108 R -.15(xe)-.15 G +4.096(da).15 G 1.596(rrays\) or added as additional k)-4.096 F -.15(ey) +-.1 G.15 E 1.596(alue pairs in an associati)-.25 F 1.896 -.15 +(ve a)-.25 H(rray).15 E 6.597(.W)-.65 G 1.597(hen applied to a)-6.597 F +(string-v)108 120 Q(alued v)-.25 E(ariable,)-.25 E/F2 10/Times-Italic@0 +SF(value)2.5 E F0(is e)2.5 E(xpanded and appended to the v)-.15 E +(ariable')-.25 E 2.5(sv)-.55 G(alue.)-2.75 E 3.383(Av)108 136.8 S .883 +(ariable can be assigned the)-3.633 F F2(namer)3.382 E(ef)-.37 E F0 +(attrib)3.382 E .882(ute using the)-.2 F F13.382 E F0 .882 +(option to the)3.382 F F1(declar)3.382 E(e)-.18 E F0(or)3.382 E F1 +(local)3.382 E F0 -.2(bu)3.382 G .882(iltin com-).2 F .315 +(mands \(see the descriptions of)108 148.8 R F1(declar)2.815 E(e)-.18 E +F0(and)2.815 E F1(local)2.815 E F0(belo)2.815 E .316(w\) to create a) +-.25 F F2(namer)2.816 E(ef)-.37 E F0 2.816(,o)C 2.816(rar)-2.816 G .316 +(eference to another v)-2.816 F(ari-)-.25 E 2.919(able. This)108 160.8 R +(allo)2.919 E .419(ws v)-.25 F .419 +(ariables to be manipulated indirectly)-.25 F 5.419(.W)-.65 G(hene) +-5.419 E -.15(ve)-.25 G 2.918(rt).15 G .418(he nameref v)-2.918 F .418 +(ariable is referenced, as-)-.25 F .132 +(signed to, unset, or has its attrib)108 172.8 R .132 +(utes modi\214ed \(other than using or changing the)-.2 F F2(namer)2.633 +E(ef)-.37 E F0(attrib)2.633 E .133(ute itself\), the)-.2 F 1.357 +(operation is actually performed on the v)108 184.8 R 1.357 +(ariable speci\214ed by the nameref v)-.25 F(ariable')-.25 E 3.856(sv) +-.55 G 3.856(alue. A)-4.106 F 1.356(nameref is)3.856 F .971 +(commonly used within shell functions to refer to a v)108 196.8 R .972 +(ariable whose name is passed as an ar)-.25 F .972(gument to the)-.18 F +2.5(function. F)108 208.8 R(or instance, if a v)-.15 E +(ariable name is passed to a shell function as its \214rst ar)-.25 E +(gument, running)-.18 E/F3 10/Courier@0 SF(declare -n ref=$1)144 226.8 Q +F0 .303(inside the function creates a nameref v)108 244.8 R(ariable)-.25 +E F1 -.18(re)2.803 G(f).18 E F0 .303(whose v)2.803 F .303(alue is the v) +-.25 F .302(ariable name passed as the \214rst ar)-.25 F(gu-)-.18 E +3.592(ment. References)108 256.8 R 1.092(and assignments to)3.592 F F1 +-.18(re)3.592 G(f).18 E F0 3.592(,a)C 1.092(nd changes to its attrib) +-3.592 F 1.092(utes, are treated as references, assign-)-.2 F .144 +(ments, and attrib)108 268.8 R .144(ute modi\214cations to the v)-.2 F +.144(ariable whose name w)-.25 F .144(as passed as)-.1 F F1($1)2.644 E +F0 5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .143 +(ariable in a)-.25 F F1 -.25(fo)108 280.8 S(r).25 E F0 .867 +(loop has the nameref attrib)3.367 F .867(ute, the list of w)-.2 F .868 +(ords can be a list of shell v)-.1 F .868 +(ariables, and a name reference)-.25 F .509 +(will be established for each w)108 292.8 R .509 +(ord in the list, in turn, when the loop is e)-.1 F -.15(xe)-.15 G 3.009 +(cuted. Array).15 F -.25(va)3.009 G .509(riables cannot be).25 F(gi)108 +304.8 Q -.15(ve)-.25 G 3.031(nt).15 G(he)-3.031 E F1(namer)3.031 E(ef) +-.18 E F0(attrib)3.031 E 3.031(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G +1.331 -.4(r, n).15 H .531(ameref v).4 F .532 +(ariables can reference array v)-.25 F .532(ariables and subscripted ar) +-.25 F(-)-.2 E .534(ray v)108 316.8 R 3.034(ariables. Namerefs)-.25 F +.534(can be unset using the)3.034 F F13.033 E F0 .533 +(option to the)3.033 F F1(unset)3.033 E F0 -.2(bu)3.033 G 3.033 +(iltin. Otherwise,).2 F(if)3.033 E F1(unset)3.033 E F0 .533(is e)3.033 F +-.15(xe)-.15 G(-).15 E .442(cuted with the name of a nameref v)108 328.8 +R .442(ariable as an ar)-.25 F .442(gument, the v)-.18 F .443 +(ariable referenced by the nameref v)-.25 F(ariable)-.25 E +(will be unset.)108 340.8 Q F1 -.2(Po)87 357.6 S(sitional P).2 E +(arameters)-.1 E F0(A)108 369.6 Q F2 .706(positional par)4.456 F(ameter) +-.15 E F0 .706(is a parameter denoted by one or more digits, other than\ + the single digit 0.)3.936 F(Posi-)5.705 E .444 +(tional parameters are assigned from the shell')108 381.6 R 2.944(sa) +-.55 G -.18(rg)-2.944 G .444(uments when it is in).18 F -.2(vo)-.4 G -.1 +(ke).2 G .445(d, and may be reassigned using).1 F(the)108 393.6 Q F1 +(set)3.334 E F0 -.2(bu)3.334 G .834(iltin command.).2 F .833(Positional\ + parameters may not be assigned to with assignment statements.)5.834 F +(The)5.833 E(positional parameters are temporarily replaced when a shel\ +l function is e)108 405.6 Q -.15(xe)-.15 G(cuted \(see).15 E/F4 9 +/Times-Bold@0 SF(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.403(When \ +a positional parameter consisting of more than a single digit is e)108 +422.4 R 1.404(xpanded, it must be enclosed in)-.15 F(braces \(see)108 +434.4 Q F4(EXP)2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1 +(Special P)87 451.2 Q(arameters)-.1 E F0 1.675(The shell treats se)108 +463.2 R -.15(ve)-.25 G 1.675(ral parameters specially).15 F 6.675(.T) +-.65 G 1.674(hese parameters may only be referenced; assignment to) +-6.675 F(them is not allo)108 475.2 Q(wed.)-.25 E F1(*)108 487.2 Q F0 +.223(Expands to the positional parameters, starting from one.)144 487.2 +R .224(When the e)5.224 F .224(xpansion is not within double)-.15 F .663 +(quotes, each positional parameter e)144 499.2 R .662 (xpands to a separate w)-.15 F 3.162(ord. In)-.1 F(conte)3.162 E .662 -(xts where it is performed,)-.15 F 1.082(those w)144 237.6 R 1.082 -(ords are subject to further w)-.1 F 1.081(ord splitting and pathname e) --.1 F 3.581(xpansion. When)-.15 F 1.081(the e)3.581 F(xpansion)-.15 E -.914(occurs within double quotes, it e)144 249.6 R .914 -(xpands to a single w)-.15 F .915(ord with the v)-.1 F .915 -(alue of each parameter sepa-)-.25 F .891 -(rated by the \214rst character of the)144 261.6 R F3(IFS)3.39 E F0 .89 -(special v)3.14 F 3.39(ariable. That)-.25 F .89(is, ")3.39 F F1($*)A F0 -3.39("i)C 3.39(se)-3.39 G(qui)-3.39 E -.25(va)-.25 G .89(lent to ").25 F -F1($1)A F2(c)A F1($2)A F2(c)A F1(...)A F0(",)A(where)144 273.6 Q F2(c) -3.532 E F0 .832(is the \214rst character of the v)3.642 F .832 -(alue of the)-.25 F F3(IFS)3.332 E F0 -.25(va)3.082 G 3.332(riable. If) -.25 F F3(IFS)3.332 E F0 .833(is unset, the parameters are)3.082 F -(separated by spaces.)144 285.6 Q(If)5 E F3(IFS)2.5 E F0 +(xts where it is performed,)-.15 F 1.081(those w)144 511.2 R 1.081 +(ords are subject to further w)-.1 F 1.082(ord splitting and pathname e) +-.1 F 3.582(xpansion. When)-.15 F 1.082(the e)3.582 F(xpansion)-.15 E +.915(occurs within double quotes, it e)144 523.2 R .914 +(xpands to a single w)-.15 F .914(ord with the v)-.1 F .914 +(alue of each parameter sepa-)-.25 F .89 +(rated by the \214rst character of the)144 535.2 R F4(IFS)3.39 E F0 .89 +(special v)3.14 F 3.39(ariable. That)-.25 F .891(is, ")3.391 F F1($*)A +F0 3.391("i)C 3.391(se)-3.391 G(qui)-3.391 E -.25(va)-.25 G .891 +(lent to ").25 F F1($1)A F2(c)A F1($2)A F2(c)A F1(...)A F0(",)A(where) +144 547.2 Q F2(c)3.533 E F0 .832(is the \214rst character of the v)3.643 +F .832(alue of the)-.25 F F4(IFS)3.332 E F0 -.25(va)3.082 G 3.332 +(riable. If).25 F F4(IFS)3.332 E F0 .832(is unset, the parameters are) +3.082 F(separated by spaces.)144 559.2 Q(If)5 E F4(IFS)2.5 E F0 (is null, the parameters are joined without interv)2.25 E -(ening separators.)-.15 E F1(@)108 297.6 Q F0 .722 -(Expands to the positional parameters, starting from one.)144 297.6 R -.722(In conte)5.722 F .722(xts where w)-.15 F .722(ord splitting is per) --.1 F(-)-.2 E 1.165(formed, this e)144 309.6 R 1.165 +(ening separators.)-.15 E F1(@)108 571.2 Q F0 .722 +(Expands to the positional parameters, starting from one.)144 571.2 R +.722(In conte)5.722 F .722(xts where w)-.15 F .723(ord splitting is per) +-.1 F(-)-.2 E 1.165(formed, this e)144 583.2 R 1.165 (xpands each positional parameter to a separate w)-.15 F 1.165 -(ord; if not within double quotes,)-.1 F .655(these w)144 321.6 R .655 +(ord; if not within double quotes,)-.1 F .654(these w)144 595.2 R .654 (ords are subject to w)-.1 F .655(ord splitting.)-.1 F .655(In conte) -5.655 F .655(xts where w)-.15 F .654 -(ord splitting is not performed, this)-.1 F -.15(ex)144 333.6 S .748 +5.655 F .655(xts where w)-.15 F .655 +(ord splitting is not performed, this)-.1 F -.15(ex)144 607.2 S .748 (pands to a single w).15 F .748 (ord with each positional parameter separated by a space.)-.1 F .748 -(When the e)5.748 F(xpan-)-.15 E 1.091 -(sion occurs within double quotes, each parameter e)144 345.6 R 1.091 -(xpands to a separate w)-.15 F 3.59(ord. That)-.1 F 1.09(is, ")3.59 F F1 -($@)A F0 3.59("i)C(s)-3.59 E(equi)144 357.6 Q -.25(va)-.25 G .412 -(lent to ").25 F F1($1)A F0 2.912("")C F1($2)-2.912 E F0 2.912(".)C -2.912(.. If)-2.912 F .413(the double-quoted e)2.913 F .413 -(xpansion occurs within a w)-.15 F .413(ord, the e)-.1 F .413 -(xpansion of)-.15 F .38(the \214rst parameter is joined with the be)144 -369.6 R .379(ginning part of the original w)-.15 F .379(ord, and the e) --.1 F .379(xpansion of the)-.15 F .771 -(last parameter is joined with the last part of the original w)144 381.6 -R 3.271(ord. When)-.1 F .772(there are no positional pa-)3.271 F -(rameters, ")144 393.6 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)2.5 E F0 +(When the e)5.748 F(xpan-)-.15 E 1.09 +(sion occurs within double quotes, each parameter e)144 619.2 R 1.091 +(xpands to a separate w)-.15 F 3.591(ord. That)-.1 F 1.091(is, ")3.591 F +F1($@)A F0 3.591("i)C(s)-3.591 E(equi)144 631.2 Q -.25(va)-.25 G .413 +(lent to ").25 F F1($1)A F0 2.913("")C F1($2)-2.913 E F0 2.913(".)C +2.913(.. If)-2.913 F .413(the double-quoted e)2.913 F .413 +(xpansion occurs within a w)-.15 F .412(ord, the e)-.1 F .412 +(xpansion of)-.15 F .379(the \214rst parameter is joined with the be)144 +643.2 R .379(ginning part of the original w)-.15 F .38(ord, and the e) +-.1 F .38(xpansion of the)-.15 F .771 +(last parameter is joined with the last part of the original w)144 655.2 +R 3.271(ord. When)-.1 F .771(there are no positional pa-)3.271 F +(rameters, ")144 667.2 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)2.5 E F0 -.15(ex)2.5 G(pand to nothing \(i.e., the).15 E 2.5(ya)-.15 G(re remo) --2.5 E -.15(ve)-.15 G(d\).).15 E F1(#)108 405.6 Q F0 -(Expands to the number of positional parameters in decimal.)144 405.6 Q -F1(?)108 417.6 Q F0(Expands to the e)144 417.6 Q +-2.5 E -.15(ve)-.15 G(d\).).15 E F1(#)108 679.2 Q F0 +(Expands to the number of positional parameters in decimal.)144 679.2 Q +F1(?)108 691.2 Q F0(Expands to the e)144 691.2 Q (xit status of the most recently e)-.15 E -.15(xe)-.15 G(cuted fore).15 -E(ground pipeline.)-.15 E F1108 429.6 Q F0 .882 -(Expands to the current option \215ags as speci\214ed upon in)144 429.6 -R -.2(vo)-.4 G .881(cation, by the).2 F F1(set)3.381 E F0 -.2(bu)3.381 G -.881(iltin command, or).2 F(those set by the shell itself \(such as the) -144 441.6 Q F12.5 E F0(option\).)2.5 E F1($)108 453.6 Q F0 .214 -(Expands to the process ID of the shell.)144 453.6 R .214 -(In a \(\) subshell, it e)5.214 F .214 -(xpands to the process ID of the current)-.15 F -(shell, not the subshell.)144 465.6 Q F1(!)108 477.6 Q F0 .499(Expands \ -to the process ID of the job most recently placed into the background, \ -whether e)144 477.6 R -.15(xe)-.15 G(cuted).15 E -(as an asynchronous command or using the)144 489.6 Q F1(bg)2.5 E F0 -.2 -(bu)2.5 G(iltin \(see).2 E F3(JOB CONTR)2.5 E(OL)-.27 E F0(belo)2.25 E -(w\).)-.25 E F1(0)108 501.6 Q F0 .886 -(Expands to the name of the shell or shell script.)144 501.6 R .886 -(This is set at shell initialization.)5.886 F(If)5.887 E F1(bash)3.387 E -F0 .887(is in-)3.387 F -.2(vo)144 513.6 S -.1(ke).2 G 2.668(dw).1 G .168 -(ith a \214le of commands,)-2.668 F F1($0)2.668 E F0 .167 -(is set to the name of that \214le.)2.667 F(If)5.167 E F1(bash)2.667 E -F0 .167(is started with the)2.667 F F12.667 E F0(op-)2.667 E .895 -(tion, then)144 525.6 R F1($0)3.395 E F0 .895(is set to the \214rst ar) -3.395 F .895(gument after the string to be e)-.18 F -.15(xe)-.15 G .896 -(cuted, if one is present.).15 F(Other)5.896 E(-)-.2 E -(wise, it is set to the \214lename used to in)144 537.6 Q -.2(vo)-.4 G --.1(ke).2 G F1(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 -H 2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F1 -(Shell V)87 554.4 Q(ariables)-.92 E F0(The follo)108 566.4 Q(wing v)-.25 -E(ariables are set by the shell:)-.25 E F1(_)108 583.2 Q F0 1.526 -(At shell startup, set to the pathname used to in)144 583.2 R -.2(vo)-.4 -G 1.725 -.1(ke t).2 H 1.525(he shell or shell script being e).1 F -.15 -(xe)-.15 G 1.525(cuted as).15 F .173(passed in the en)144 595.2 R .173 -(vironment or ar)-.4 F .173(gument list.)-.18 F(Subsequently)5.173 E -2.673(,e)-.65 G .173(xpands to the last ar)-2.823 F .174 -(gument to the pre-)-.18 F .337(vious simple command e)144 607.2 R -.15 -(xe)-.15 G .337(cuted in the fore).15 F .336(ground, after e)-.15 F -2.836(xpansion. Also)-.15 F .336(set to the full pathname)2.836 F .365 -(used to in)144 619.2 R -.2(vo)-.4 G .565 -.1(ke e).2 H .365 -(ach command e).1 F -.15(xe)-.15 G .366(cuted and placed in the en).15 F -.366(vironment e)-.4 F .366(xported to that command.)-.15 F(When checki\ -ng mail, this parameter holds the name of the mail \214le currently bei\ -ng check)144 631.2 Q(ed.)-.1 E F1 -.3(BA)108 643.2 S(SH).3 E F0 -(Expands to the full \214lename used to in)144 643.2 Q -.2(vo)-.4 G .2 --.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A F1 -.3(BA)108 -655.2 S(SHOPTS).3 E F0 2.549(Ac)144 667.2 S .049 -(olon-separated list of enabled shell options.)-2.549 F .049(Each w) -5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049 -(gument for the)-.18 F F12.548 E F0 .115(option to the)144 679.2 R -F1(shopt)2.616 E F0 -.2(bu)2.616 G .116(iltin command \(see).2 F F3 .116 -(SHELL B)2.616 F(UIL)-.09 E .116(TIN COMMANDS)-.828 F F0(belo)2.366 E -2.616(w\). The)-.25 F .116(options ap-)2.616 F 1.067(pearing in)144 -691.2 R F3 -.27(BA)3.567 G(SHOPTS).27 E F0 1.067(are those reported as) -3.317 F F2(on)3.797 E F0(by)3.807 E F1(shopt)3.567 E F0 6.066(.I)C 3.566 -(ft)-6.066 G 1.066(his v)-3.566 F 1.066(ariable is in the en)-.25 F -(vironment)-.4 E(when)144 703.2 Q F1(bash)3.141 E F0 .642(starts up, ea\ -ch shell option in the list will be enabled before reading an)3.141 F -3.142(ys)-.15 G .642(tartup \214les.)-3.142 F(This v)144 715.2 Q -(ariable is read-only)-.25 E(.)-.65 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(10)190.395 E 0 Cg EP +E(ground pipeline.)-.15 E F1108 703.2 Q F0 .881 +(Expands to the current option \215ags as speci\214ed upon in)144 703.2 +R -.2(vo)-.4 G .881(cation, by the).2 F F1(set)3.382 E F0 -.2(bu)3.382 G +.882(iltin command, or).2 F(those set by the shell itself \(such as the) +144 715.2 Q F12.5 E F0(option\).)2.5 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(10)185.955 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF -.3(BA)108 84 S(SHPID).3 E F0 .188 -(Expands to the process ID of the current)144 96 R F1(bash)2.688 E F0 -2.687(process. This)2.687 F(dif)2.687 E .187(fers from)-.25 F F1($$) -2.687 E F0 .187(under certain circum-)2.687 F .548 -(stances, such as subshells that do not require)144 108 R F1(bash)3.048 -E F0 .548(to be re-initialized.)3.048 F .549(Assignments to)5.549 F/F2 9 -/Times-Bold@0 SF -.27(BA)3.049 G(SHPID).27 E F0(ha)144 120 Q .3 -.15 -(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F1 -.3(BA)2.5 -G(SHPID).3 E F0(is unset, it loses its special properties, e)2.5 E -.15 -(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G -(ubsequently reset.)-2.5 E F1 -.3(BA)108 132 S(SH_ALIASES).3 E F0 1.195 -(An associati)144 144 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195 -(ariable whose members correspond to the internal list of aliases as ma\ -in-)-.25 F .16(tained by the)144 156 R F1(alias)2.66 E F0 -.2(bu)2.66 G -2.66(iltin. Elements).2 F .16 +SF($)108 84 Q F0 .839 +(Expands to the process ID of the shell. In a subshell, it e)144 84 R +.839(xpands to the process ID of the current)-.15 F +(shell, not the subshell.)144 96 Q F1(!)108 108 Q F0 .499(Expands to th\ +e process ID of the job most recently placed into the background, wheth\ +er e)144 108 R -.15(xe)-.15 G(cuted).15 E +(as an asynchronous command or using the)144 120 Q F1(bg)2.5 E F0 -.2 +(bu)2.5 G(iltin \(see).2 E/F2 9/Times-Bold@0 SF(JOB CONTR)2.5 E(OL)-.27 +E F0(belo)2.25 E(w\).)-.25 E F1(0)108 132 Q F0 .887 +(Expands to the name of the shell or shell script.)144 132 R .886 +(This is set at shell initialization.)5.886 F(If)5.886 E F1(bash)3.386 E +F0 .886(is in-)3.386 F -.2(vo)144 144 S -.1(ke).2 G 2.667(dw).1 G .167 +(ith a \214le of commands,)-2.667 F F1($0)2.667 E F0 .167 +(is set to the name of that \214le.)2.667 F(If)5.167 E F1(bash)2.667 E +F0 .168(is started with the)2.668 F F12.668 E F0(op-)2.668 E .896 +(tion, then)144 156 R F1($0)3.396 E F0 .895(is set to the \214rst ar) +3.396 F .895(gument after the string to be e)-.18 F -.15(xe)-.15 G .895 +(cuted, if one is present.).15 F(Other)5.895 E(-)-.2 E +(wise, it is set to the \214lename used to in)144 168 Q -.2(vo)-.4 G -.1 +(ke).2 G F1(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 H +2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F1(Shell V) +87 184.8 Q(ariables)-.92 E F0(The follo)108 196.8 Q(wing v)-.25 E +(ariables are set by the shell:)-.25 E F1(_)108 213.6 Q F0 1.525 +(At shell startup, set to the pathname used to in)144 213.6 R -.2(vo)-.4 +G 1.725 -.1(ke t).2 H 1.526(he shell or shell script being e).1 F -.15 +(xe)-.15 G 1.526(cuted as).15 F .174(passed in the en)144 225.6 R .174 +(vironment or ar)-.4 F .173(gument list.)-.18 F(Subsequently)5.173 E +2.673(,e)-.65 G .173(xpands to the last ar)-2.823 F .173 +(gument to the pre-)-.18 F .336(vious simple command e)144 237.6 R -.15 +(xe)-.15 G .336(cuted in the fore).15 F .336(ground, after e)-.15 F +2.837(xpansion. Also)-.15 F .337(set to the full pathname)2.837 F .366 +(used to in)144 249.6 R -.2(vo)-.4 G .566 -.1(ke e).2 H .366 +(ach command e).1 F -.15(xe)-.15 G .366(cuted and placed in the en).15 F +.365(vironment e)-.4 F .365(xported to that command.)-.15 F(When checki\ +ng mail, this parameter holds the name of the mail \214le currently bei\ +ng check)144 261.6 Q(ed.)-.1 E F1 -.3(BA)108 273.6 S(SH).3 E F0 +(Expands to the full \214lename used to in)144 273.6 Q -.2(vo)-.4 G .2 +-.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A F1 -.3(BA)108 +285.6 S(SHOPTS).3 E F0 2.548(Ac)144 297.6 S .049 +(olon-separated list of enabled shell options.)-2.548 F .049(Each w) +5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049 +(gument for the)-.18 F F12.549 E F0 .116(option to the)144 309.6 R +F1(shopt)2.616 E F0 -.2(bu)2.616 G .116(iltin command \(see).2 F F2 .116 +(SHELL B)2.616 F(UIL)-.09 E .116(TIN COMMANDS)-.828 F F0(belo)2.366 E +2.616(w\). The)-.25 F .115(options ap-)2.615 F 1.066(pearing in)144 +321.6 R F2 -.27(BA)3.566 G(SHOPTS).27 E F0 1.066(are those reported as) +3.316 F/F3 10/Times-Italic@0 SF(on)3.796 E F0(by)3.807 E F1(shopt)3.567 +E F0 6.067(.I)C 3.567(ft)-6.067 G 1.067(his v)-3.567 F 1.067 +(ariable is in the en)-.25 F(vironment)-.4 E(when)144 333.6 Q F1(bash) +3.142 E F0 .642(starts up, each shell option in the list will be enable\ +d before reading an)3.142 F 3.141(ys)-.15 G .641(tartup \214les.)-3.141 +F(This v)144 345.6 Q(ariable is read-only)-.25 E(.)-.65 E F1 -.3(BA)108 +357.6 S(SHPID).3 E F0 .187(Expands to the process ID of the current)144 +369.6 R F1(bash)2.687 E F0 2.688(process. This)2.688 F(dif)2.688 E .188 +(fers from)-.25 F F1($$)2.688 E F0 .188(under certain circum-)2.688 F +.548(stances, such as subshells that do not require)144 381.6 R F1(bash) +3.048 E F0 .548(to be re-initialized.)3.048 F .548(Assignments to)5.548 +F F2 -.27(BA)3.048 G(SHPID).27 E F0(ha)144 393.6 Q .3 -.15(ve n)-.2 H +2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F1 -.3(BA)2.5 G(SHPID).3 E +F0(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) +-2.5 E F1 -.3(BA)108 405.6 S(SH_ALIASES).3 E F0 1.195(An associati)144 +417.6 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195(ariable whose m\ +embers correspond to the internal list of aliases as main-)-.25 F .16 +(tained by the)144 429.6 R F1(alias)2.66 E F0 -.2(bu)2.66 G 2.66 +(iltin. Elements).2 F .16 (added to this array appear in the alias list; ho)2.66 F(we)-.25 E -.15 (ve)-.25 G .96 -.4(r, u).15 H(nsetting).4 E 4.503 -(array elements currently does not cause aliases to be remo)144 168 R +(array elements currently does not cause aliases to be remo)144 441.6 R -.15(ve)-.15 G 7.003(df).15 G 4.503(rom the alias list.)-7.003 F(If) -9.502 E F1 -.3(BA)144 180 S(SH_ALIASES).3 E F0 +9.503 E F1 -.3(BA)144 453.6 S(SH_ALIASES).3 E F0 (is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1 -.3(BA)108 192 S(SH_ARGC).3 E F0 .934(An array v)144 204 R -.934(ariable whose v)-.25 F .934 +-2.5 E F1 -.3(BA)108 465.6 S(SH_ARGC).3 E F0 .935(An array v)144 477.6 R +.935(ariable whose v)-.25 F .934 (alues are the number of parameters in each frame of the current)-.25 F -F1(bash)3.435 E F0 -.15(exe)144 216 S .535(cution call stack.).15 F .535 -(The number of parameters to the current subroutine \(shell function or\ - script)5.535 F -.15(exe)144 228 S .141(cuted with).15 F F1(.)2.641 E F0 -(or)2.641 E F1(sour)2.641 E(ce)-.18 E F0 2.641(\)i)C 2.641(sa)-2.641 G -2.641(tt)-2.641 G .142(he top of the stack.)-2.641 F .142 -(When a subroutine is e)5.142 F -.15(xe)-.15 G .142 +F1(bash)3.434 E F0 -.15(exe)144 489.6 S .535(cution call stack.).15 F +.535(The number of parameters to the current subroutine \(shell functio\ +n or script)5.535 F -.15(exe)144 501.6 S .142(cuted with).15 F F1(.) +2.642 E F0(or)2.642 E F1(sour)2.642 E(ce)-.18 E F0 2.642(\)i)C 2.642(sa) +-2.642 G 2.642(tt)-2.642 G .142(he top of the stack.)-2.642 F .141 +(When a subroutine is e)5.141 F -.15(xe)-.15 G .141 (cuted, the number of).15 F 1.265(parameters passed is pushed onto)144 -240 R F2 -.27(BA)3.765 G(SH_ARGC).27 E/F3 9/Times-Roman@0 SF(.)A F0 +513.6 R F2 -.27(BA)3.765 G(SH_ARGC).27 E/F4 9/Times-Roman@0 SF(.)A F0 1.265(The shell sets)5.765 F F2 -.27(BA)3.765 G(SH_ARGC).27 E F0 1.265 -(only when in e)3.515 F(x-)-.15 E .947(tended deb)144 252 R .947 +(only when in e)3.515 F(x-)-.15 E .948(tended deb)144 525.6 R .947 (ugging mode \(see the description of the)-.2 F F1(extdeb)3.447 E(ug)-.2 -E F0 .947(option to the)3.447 F F1(shopt)3.447 E F0 -.2(bu)3.448 G .948 -(iltin belo).2 F(w\).)-.25 E(Setting)144 264 Q F1(extdeb)3.363 E(ug)-.2 -E F0 .863(after the shell has started to e)3.363 F -.15(xe)-.15 G .862 -(cute a script, or referencing this v).15 F .862(ariable when)-.25 F F1 -(extdeb)144 276 Q(ug)-.2 E F0(is not set, may result in inconsistent v) -2.5 E(alues.)-.25 E F1 -.3(BA)108 288 S(SH_ARGV).3 E F0 .206(An array v) -144 300 R .206(ariable containing all of the parameters in the current) --.25 F F1(bash)2.706 E F0 -.15(exe)2.706 G .207(cution call stack.).15 F -.207(The \214-)5.207 F .567(nal parameter of the last subroutine call i\ -s at the top of the stack; the \214rst parameter of the initial)144 312 -R 1.424(call is at the bottom.)144 324 R 1.424(When a subroutine is e) +E F0 .947(option to the)3.447 F F1(shopt)3.447 E F0 -.2(bu)3.447 G .947 +(iltin belo).2 F(w\).)-.25 E(Setting)144 537.6 Q F1(extdeb)3.362 E(ug) +-.2 E F0 .862(after the shell has started to e)3.362 F -.15(xe)-.15 G +.863(cute a script, or referencing this v).15 F .863(ariable when)-.25 F +F1(extdeb)144 549.6 Q(ug)-.2 E F0 +(is not set, may result in inconsistent v)2.5 E(alues.)-.25 E F1 -.3(BA) +108 561.6 S(SH_ARGV).3 E F0 .207(An array v)144 573.6 R .206 +(ariable containing all of the parameters in the current)-.25 F F1(bash) +2.706 E F0 -.15(exe)2.706 G .206(cution call stack.).15 F .206 +(The \214-)5.206 F .567(nal parameter of the last subroutine call is at\ + the top of the stack; the \214rst parameter of the initial)144 585.6 R +1.424(call is at the bottom.)144 597.6 R 1.424(When a subroutine is e) 6.424 F -.15(xe)-.15 G 1.424 -(cuted, the parameters supplied are pushed onto).15 F F2 -.27(BA)144 336 -S(SH_ARGV).27 E F3(.)A F0 .854(The shell sets)5.354 F F2 -.27(BA)3.354 G -(SH_ARGV).27 E F0 .853(only when in e)3.104 F .853(xtended deb)-.15 F -.853(ugging mode \(see the de-)-.2 F .475(scription of the)144 348 R F1 -(extdeb)2.975 E(ug)-.2 E F0 .475(option to the)2.975 F F1(shopt)2.975 E -F0 -.2(bu)2.975 G .475(iltin belo).2 F 2.975(w\). Setting)-.25 F F1 -(extdeb)2.976 E(ug)-.2 E F0 .476(after the shell has)2.976 F .45 -(started to e)144 360 R -.15(xe)-.15 G .45 -(cute a script, or referencing this v).15 F .45(ariable when)-.25 F F1 -(extdeb)2.95 E(ug)-.2 E F0 .45(is not set, may result in in-)2.95 F -(consistent v)144 372 Q(alues.)-.25 E F1 -.3(BA)108 384 S(SH_ARGV0).3 E -F0 .25(When referenced, this v)144 396 R .25(ariable e)-.25 F .251 -(xpands to the name of the shell or shell script \(identical to)-.15 F -F1($0)2.751 E F0 2.751(;s)C(ee)-2.751 E .041 -(the description of special parameter 0 abo)144 408 R -.15(ve)-.15 G +(cuted, the parameters supplied are pushed onto).15 F F2 -.27(BA)144 +609.6 S(SH_ARGV).27 E F4(.)A F0 .853(The shell sets)5.353 F F2 -.27(BA) +3.353 G(SH_ARGV).27 E F0 .853(only when in e)3.103 F .854(xtended deb) +-.15 F .854(ugging mode \(see the de-)-.2 F .476(scription of the)144 +621.6 R F1(extdeb)2.976 E(ug)-.2 E F0 .476(option to the)2.976 F F1 +(shopt)2.975 E F0 -.2(bu)2.975 G .475(iltin belo).2 F 2.975 +(w\). Setting)-.25 F F1(extdeb)2.975 E(ug)-.2 E F0 .475 +(after the shell has)2.975 F .45(started to e)144 633.6 R -.15(xe)-.15 G +.45(cute a script, or referencing this v).15 F .45(ariable when)-.25 F +F1(extdeb)2.95 E(ug)-.2 E F0 .45(is not set, may result in in-)2.95 F +(consistent v)144 645.6 Q(alues.)-.25 E F1 -.3(BA)108 657.6 S(SH_ARGV0) +.3 E F0 .251(When referenced, this v)144 669.6 R .251(ariable e)-.25 F +.251(xpands to the name of the shell or shell script \(identical to)-.15 +F F1($0)2.75 E F0 2.75(;s)C(ee)-2.75 E .04 +(the description of special parameter 0 abo)144 681.6 R -.15(ve)-.15 G 2.541(\). Assignment).15 F(to)2.541 E F1 -.3(BA)2.541 G(SH_ARGV0).3 E F0 -.04(causes the v)2.541 F .04(alue as-)-.25 F .216 -(signed to also be assigned to)144 420 R F1($0)2.716 E F0 5.216(.I)C(f) --5.216 E F1 -.3(BA)2.716 G(SH_ARGV0).3 E F0 .216 +.041(causes the v)2.541 F .041(alue as-)-.25 F .216 +(signed to also be assigned to)144 693.6 R F1($0)2.716 E F0 5.216(.I)C +(f)-5.216 E F1 -.3(BA)2.716 G(SH_ARGV0).3 E F0 .216 (is unset, it loses its special properties, e)2.716 F -.15(ve)-.25 G -2.716(ni).15 G(f)-2.716 E(it is subsequently reset.)144 432 Q F1 -.3(BA) -108 444 S(SH_CMDS).3 E F0 .668(An associati)144 456 R .968 -.15(ve a) --.25 H .668(rray v).15 F .668(ariable whose members correspond to the i\ -nternal hash table of commands)-.25 F .195(as maintained by the)144 468 -R F1(hash)2.695 E F0 -.2(bu)2.695 G 2.695(iltin. Elements).2 F .196 -(added to this array appear in the hash table; ho)2.696 F(we)-.25 E -.15 -(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently does no\ -t cause command names to be remo)144 480 R -.15(ve)-.15 G 3.352(df).15 G -.852(rom the hash)-3.352 F 2.5(table. If)144 492 R F1 -.3(BA)2.5 G -(SH_CMDS).3 E F0(is unset, it loses its special properties, e)2.5 E -.15 -(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G -(ubsequently reset.)-2.5 E F1 -.3(BA)108 504 S(SH_COMMAND).3 E F0 1.242 -(The command currently being e)144 516 R -.15(xe)-.15 G 1.243 -(cuted or about to be e).15 F -.15(xe)-.15 G 1.243 -(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.243(cuting a).15 F -.263(command as the result of a trap, in which case it is the command e) -144 528 R -.15(xe)-.15 G .262(cuting at the time of the trap.).15 F(If) -144 540 Q F1 -.3(BA)2.5 G(SH_COMMAND).3 E F0 -(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 -(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1 -.3(BA)108 552 S(SH_EXECUTION_STRING).3 E F0(The command ar) -144 564 Q(gument to the)-.18 E F12.5 E F0(in)2.5 E -.2(vo)-.4 G -(cation option.).2 E F1 -.3(BA)108 576 S(SH_LINENO).3 E F0 .692 -(An array v)144 588 R .692(ariable whose members are the line numbers i\ -n source \214les where each corresponding)-.25 F .97(member of)144 600 R -F2(FUNCN)3.47 E(AME)-.18 E F0 -.1(wa)3.22 G 3.47(si).1 G -1.9 -.4(nv o) --3.47 H -.1(ke).4 G(d.).1 E F1(${B)5.969 E(ASH_LINENO[)-.3 E/F4 10 -/Times-Italic@0 SF($i)A F1(]})A F0 .969 -(is the line number in the source)3.469 F 14.671(\214le \()144 612 R F1 -(${B)A(ASH_SOURCE[)-.3 E F4($i+1)A F1(]})A F0 17.171(\)w)C(here)-17.171 -E F1(${FUNCN)17.172 E(AME[)-.2 E F4($i)A F1(]})A F0 -.1(wa)17.172 G -17.172(sc).1 G 14.672(alled \(or)-17.172 F F1(${B)144 624 Q(ASH_LINENO[) --.3 E F4($i-1)A F1(]})A F0 .115 -(if referenced within another shell function\).)2.615 F(Use)5.115 E F2 -(LINENO)2.615 E F0 .115(to obtain the)2.365 F(current line number)144 -636 Q(.)-.55 E F1 -.3(BA)108 648 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E --.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 660 S 1.57(olon-separated list of\ - directories in which the shell looks for dynamically loadable b)-4.07 F -(uiltins)-.2 E(speci\214ed by the)144 672 Q F1(enable)2.5 E F0(command.) -2.5 E F1 -.3(BA)108 684 S(SH_REMA).3 E(TCH)-.95 E F0 .006(An array v)144 -696 R .006(ariable whose members are assigned by the)-.25 F F1(=~)2.506 -E F0 .005(binary operator to the)2.506 F F1([[)2.505 E F0 .005 -(conditional com-)2.505 F 2.506(mand. The)144 708 R .007 -(element with inde)2.506 F 2.507(x0i)-.15 G 2.507(st)-2.507 G .007 -(he portion of the string matching the entire re)-2.507 F .007(gular e) --.15 F(xpression.)-.15 E 4.331(The element with inde)144 720 R(x)-.15 E -F4(n)6.831 E F0 4.331(is the portion of the string matching the)6.831 F -F4(n)6.83 E F0 4.33(th parenthesized)B(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(11)190.395 E 0 Cg EP +2.715(ni).15 G(f)-2.715 E(it is subsequently reset.)144 705.6 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(11)185.955 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(sube)144 84 Q -(xpression.)-.15 E/F1 10/Times-Bold@0 SF -.3(BA)108 96 S(SH_SOURCE).3 E -F0 .125(An array v)144 108 R .125(ariable whose members are the source \ -\214lenames where the corresponding shell function)-.25 F .781 -(names in the)144 120 R/F2 9/Times-Bold@0 SF(FUNCN)3.28 E(AME)-.18 E F0 -.78(array v)3.03 F .78(ariable are de\214ned.)-.25 F .78 -(The shell function)5.78 F F1(${FUNCN)3.28 E(AME[)-.2 E/F3 10 -/Times-Italic@0 SF($i)A F1(]})A F0(is)3.28 E(de\214ned in the \214le)144 -132 Q F1(${B)2.5 E(ASH_SOURCE[)-.3 E F3($i)A F1(]})A F0(and called from) -2.5 E F1(${B)2.5 E(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0(.)A F1 -.3(BA) -108 144 S(SH_SUBSHELL).3 E F0 .296 -(Incremented by one within each subshell or subshell en)144 156 R .296 -(vironment when the shell be)-.4 F .297(gins e)-.15 F -.15(xe)-.15 G -(cuting).15 E 1.277(in that en)144 168 R 3.777(vironment. The)-.4 F -1.277(initial v)3.777 F 1.277(alue is 0.)-.25 F(If)6.277 E F1 -.3(BA) -3.777 G(SH_SUBSHELL).3 E F0 1.276(is unset, it loses its special)3.777 F -(properties, e)144 180 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5 -(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -.3(BA)108 192 S -(SH_VERSINFO).3 E F0 2.644(Ar)144 204 S .144(eadonly array v)-2.644 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF -.3(BA)108 84 S(SH_CMDS).3 E F0 .667(An associati)144 96 R .967 -.15 +(ve a)-.25 H .667(rray v).15 F .668(ariable whose members correspond to\ + the internal hash table of commands)-.25 F .196(as maintained by the) +144 108 R F1(hash)2.696 E F0 -.2(bu)2.696 G 2.696(iltin. Elements).2 F +.195(added to this array appear in the hash table; ho)2.696 F(we)-.25 E +-.15(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently doe\ +s not cause command names to be remo)144 120 R -.15(ve)-.15 G 3.352(df) +.15 G .853(rom the hash)-3.352 F 2.5(table. If)144 132 R F1 -.3(BA)2.5 G +(SH_CMDS).3 E F0(is unset, it loses its special properties, e)2.5 E -.15 +(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G +(ubsequently reset.)-2.5 E F1 -.3(BA)108 144 S(SH_COMMAND).3 E F0 1.243 +(The command currently being e)144 156 R -.15(xe)-.15 G 1.243 +(cuted or about to be e).15 F -.15(xe)-.15 G 1.242 +(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.242(cuting a).15 F +.262(command as the result of a trap, in which case it is the command e) +144 168 R -.15(xe)-.15 G .263(cuting at the time of the trap.).15 F(If) +144 180 Q F1 -.3(BA)2.5 G(SH_COMMAND).3 E F0 +(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) +-2.5 E F1 -.3(BA)108 192 S(SH_EXECUTION_STRING).3 E F0(The command ar) +144 204 Q(gument to the)-.18 E F12.5 E F0(in)2.5 E -.2(vo)-.4 G +(cation option.).2 E F1 -.3(BA)108 216 S(SH_LINENO).3 E F0 .693 +(An array v)144 228 R .692(ariable whose members are the line numbers i\ +n source \214les where each corresponding)-.25 F .969(member of)144 240 +R/F2 9/Times-Bold@0 SF(FUNCN)3.469 E(AME)-.18 E F0 -.1(wa)3.219 G 3.469 +(si).1 G -1.9 -.4(nv o)-3.469 H -.1(ke).4 G(d.).1 E F1(${B)5.969 E +(ASH_LINENO[)-.3 E/F3 10/Times-Italic@0 SF($i)A F1(]})A F0 .97 +(is the line number in the source)3.469 F 14.672(\214le \()144 252 R F1 +(${B)A(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0 17.172(\)w)C(here)-17.172 +E F1(${FUNCN)17.172 E(AME[)-.2 E F3($i)A F1(]})A F0 -.1(wa)17.172 G +17.171(sc).1 G 14.671(alled \(or)-17.171 F F1(${B)144 264 Q(ASH_LINENO[) +-.3 E F3($i-1)A F1(]})A F0 .115 +(if referenced within another shell function\).)2.615 F(Use)5.115 E F2 +(LINENO)2.615 E F0 .115(to obtain the)2.365 F(current line number)144 +276 Q(.)-.55 E F1 -.3(BA)108 288 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E +-.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 300 S 1.57(olon-separated list of\ + directories in which the shell looks for dynamically loadable b)-4.07 F +(uiltins)-.2 E(speci\214ed by the)144 312 Q F1(enable)2.5 E F0(command.) +2.5 E F1 -.3(BA)108 324 S(SH_REMA).3 E(TCH)-.95 E F0 .005(An array v)144 +336 R .005(ariable whose members are assigned by the)-.25 F F1(=~)2.506 +E F0 .006(binary operator to the)2.506 F F1([[)2.506 E F0 .006 +(conditional com-)2.506 F 2.507(mand. The)144 348 R .007 +(element with inde)2.507 F 2.507(x0i)-.15 G 2.507(st)-2.507 G .007 +(he portion of the string matching the entire re)-2.507 F .006(gular e) +-.15 F(xpression.)-.15 E .997(The element with inde)144 360 R(x)-.15 E +F3(n)3.497 E F0 .997(is the portion of the string matching the)3.497 F +F3(n)3.498 E F0 .998(th parenthesized sube)B(xpres-)-.15 E(sion.)144 372 +Q F1 -.3(BA)108 384 S(SH_SOURCE).3 E F0 .126(An array v)144 396 R .125(\ +ariable whose members are the source \214lenames where the correspondin\ +g shell function)-.25 F .78(names in the)144 408 R F2(FUNCN)3.28 E(AME) +-.18 E F0 .78(array v)3.03 F .78(ariable are de\214ned.)-.25 F .78 +(The shell function)5.78 F F1(${FUNCN)3.281 E(AME[)-.2 E F3($i)A F1(]})A +F0(is)3.281 E(de\214ned in the \214le)144 420 Q F1(${B)2.5 E +(ASH_SOURCE[)-.3 E F3($i)A F1(]})A F0(and called from)2.5 E F1(${B)2.5 E +(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0(.)A F1 -.3(BA)108 432 S +(SH_SUBSHELL).3 E F0 .296 +(Incremented by one within each subshell or subshell en)144 444 R .296 +(vironment when the shell be)-.4 F .296(gins e)-.15 F -.15(xe)-.15 G +(cuting).15 E 1.276(in that en)144 456 R 3.776(vironment. The)-.4 F +1.276(initial v)3.776 F 1.277(alue is 0.)-.25 F(If)6.277 E F1 -.3(BA) +3.777 G(SH_SUBSHELL).3 E F0 1.277(is unset, it loses its special)3.777 F +(properties, e)144 468 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5 +(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -.3(BA)108 480 S +(SH_VERSINFO).3 E F0 2.645(Ar)144 492 S .145(eadonly array v)-2.645 F .144(ariable whose members hold v)-.25 F .144 -(ersion information for this instance of)-.15 F F1(bash)2.645 E F0 5.145 -(.T)C(he)-5.145 E -.25(va)144 216 S +(ersion information for this instance of)-.15 F F1(bash)2.644 E F0 5.144 +(.T)C(he)-5.144 E -.25(va)144 504 S (lues assigned to the array members are as follo).25 E(ws:)-.25 E F1 -.3 -(BA)144 234 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 234 Q +(BA)144 522 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 522 Q (ersion number \(the)-.15 E F3 -.37(re)2.5 G(lease).37 E F0(\).)A F1 -.3 -(BA)144 246 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)264 246 Q +(BA)144 534 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)264 534 Q (ersion number \(the)-.15 E F3(ver)2.5 E(sion)-.1 E F0(\).)A F1 -.3(BA) -144 258 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)264 258 Q -.15 -(ve)-.25 G(l.).15 E F1 -.3(BA)144 270 S(SH_VERSINFO[).3 E F0(3)A F1(])A -F0(The b)264 270 Q(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 282 S -(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)264 282 Q -F3(beta1)2.5 E F0(\).)A F1 -.3(BA)144 294 S(SH_VERSINFO[).3 E F0(5)A F1 -(])A F0(The v)264 294 Q(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E/F4 9 -/Times-Roman@0 SF(.)A F1 -.3(BA)108 306 S(SH_VERSION).3 E F0 -(Expands to a string describing the v)144 318 Q +144 546 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)264 546 Q -.15 +(ve)-.25 G(l.).15 E F1 -.3(BA)144 558 S(SH_VERSINFO[).3 E F0(3)A F1(])A +F0(The b)264 558 Q(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 570 S +(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)264 570 Q +F3(beta1)2.5 E F0(\).)A F1 -.3(BA)144 582 S(SH_VERSINFO[).3 E F0(5)A F1 +(])A F0(The v)264 582 Q(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E/F4 9 +/Times-Roman@0 SF(.)A F1 -.3(BA)108 594 S(SH_VERSION).3 E F0 +(Expands to a string describing the v)144 606 Q (ersion of this instance of)-.15 E F1(bash)2.5 E F0(.)A F1(COMP_CW)108 -330 Q(ORD)-.1 E F0 .397(An inde)144 342 R 2.897(xi)-.15 G(nto)-2.897 E +618 Q(ORD)-.1 E F0 .396(An inde)144 630 R 2.896(xi)-.15 G(nto)-2.896 E F1(${COMP_W)2.896 E(ORDS})-.1 E F0 .396(of the w)2.896 F .396 -(ord containing the current cursor position.)-.1 F .396(This v)5.396 F -(ari-)-.25 E 1.18(able is a)144 354 R -.25(va)-.2 G 1.181 +(ord containing the current cursor position.)-.1 F .397(This v)5.397 F +(ari-)-.25 E 1.181(able is a)144 642 R -.25(va)-.2 G 1.181 (ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.681 -(db).1 G 3.681(yt)-3.681 G 1.181(he programmable completion f)-3.681 F -1.181(acilities \(see)-.1 F F1(Pr)144 366 Q(ogrammable Completion)-.18 E -F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 378 Q F0(The k)144 390 Q .3 +(db).1 G 3.681(yt)-3.681 G 1.18(he programmable completion f)-3.681 F +1.18(acilities \(see)-.1 F F1(Pr)144 654 Q(ogrammable Completion)-.18 E +F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 666 Q F0(The k)144 678 Q .3 -.15(ey \()-.1 H(or \214nal k).15 E .3 -.15(ey o)-.1 H 2.5(fak).15 G .3 -.15(ey s)-2.6 H(equence\) used to in).15 E -.2(vo)-.4 G .2 -.1(ke t).2 -H(he current completion function.).1 E F1(COMP_LINE)108 402 Q F0 1.208 -(The current command line.)144 414 R 1.208(This v)6.208 F 1.208 +H(he current completion function.).1 E F1(COMP_LINE)108 690 Q F0 1.207 +(The current command line.)144 702 R 1.208(This v)6.208 F 1.208 (ariable is a)-.25 F -.25(va)-.2 G 1.208 -(ilable only in shell functions and e).25 F 1.207(xternal com-)-.15 F -1.037(mands in)144 426 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537 +(ilable only in shell functions and e).25 F 1.208(xternal com-)-.15 F +1.037(mands in)144 714 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537 (yt)-3.537 G 1.037(he programmable completion f)-3.537 F 1.037 (acilities \(see)-.1 F F1(Pr)3.537 E 1.037(ogrammable Completion)-.18 F -F0(be-)3.537 E(lo)144 438 Q(w\).)-.25 E F1(COMP_POINT)108 450 Q F0 .667 -(The inde)144 462 R 3.167(xo)-.15 G 3.167(ft)-3.167 G .666 -(he current cursor position relati)-3.167 F .966 -.15(ve t)-.25 H 3.166 -(ot).15 G .666(he be)-3.166 F .666(ginning of the current command.)-.15 -F .666(If the)5.666 F .534 -(current cursor position is at the end of the current command, the v)144 -474 R .535(alue of this v)-.25 F .535(ariable is equal to)-.25 F F1 -(${#COMP_LINE})144 486 Q F0 5.705(.T)C .705(his v)-5.705 F .704 -(ariable is a)-.25 F -.25(va)-.2 G .704 -(ilable only in shell functions and e).25 F .704(xternal commands in-) --.15 F -.2(vo)144 498 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G -(he programmable completion f)-2.5 E(acilities \(see)-.1 E F1(Pr)2.5 E -(ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(COMP_TYPE)108 -510 Q F0 .041(Set to an inte)144 522 R .041(ger v)-.15 F .041(alue corr\ -esponding to the type of completion attempted that caused a completion) --.25 F .338(function to be called:)144 534 R F3 -.5(TA)2.837 G(B).5 E F0 -2.837(,f)C .337(or normal completion,)-2.837 F F3(?)2.837 E F0 2.837(,f) -C .337(or listing completions after successi)-2.837 F .637 -.15(ve t) --.25 H(abs,).15 E F3(!)144 546 Q F0 3.067(,f)C .567 -(or listing alternati)-3.067 F -.15(ve)-.25 G 3.067(so).15 G 3.067(np) --3.067 G .567(artial w)-3.067 F .567(ord completion,)-.1 F F3(@)3.067 E -F0 3.067(,t)C 3.067(ol)-3.067 G .567(ist completions if the w)-3.067 F -.567(ord is not un-)-.1 F .418(modi\214ed, or)144 558 R F3(%)2.918 E F0 -2.918(,f)C .418(or menu completion.)-2.918 F .417(This v)5.417 F .417 -(ariable is a)-.25 F -.25(va)-.2 G .417 -(ilable only in shell functions and e).25 F(xter)-.15 E(-)-.2 E .704 -(nal commands in)144 570 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204 -(yt)-3.204 G .704(he programmable completion f)-3.204 F .704 -(acilities \(see)-.1 F F1(Pr)3.204 E .704(ogrammable Comple-)-.18 F -(tion)144 582 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 594 Q(ORDBREAKS) --.1 E F0 1.336(The set of characters that the)144 606 R F1 -.18(re)3.836 -G(adline).18 E F0 1.336(library treats as w)3.836 F 1.335 -(ord separators when performing w)-.1 F(ord)-.1 E 3.125(completion. If) -144 618 R F2(COMP_W)3.125 E(ORDBREAKS)-.09 E F0 .626 -(is unset, it loses its special properties, e)2.875 F -.15(ve)-.25 G -3.126(ni).15 G 3.126(fi)-3.126 G 3.126(ti)-3.126 G 3.126(ss)-3.126 G -(ubse-)-3.126 E(quently reset.)144 630 Q F1(COMP_W)108 642 Q(ORDS)-.1 E -F0 .654(An array v)144 654 R .654(ariable \(see)-.25 F F1(Arrays)3.154 E -F0(belo)3.154 E .654(w\) consisting of the indi)-.25 F .653(vidual w) --.25 F .653(ords in the current command)-.1 F 3.191(line. The)144 666 R -.692(line is split into w)3.192 F .692(ords as)-.1 F F1 -.18(re)3.192 G -(adline).18 E F0 -.1(wo)3.192 G .692(uld split it, using).1 F F2(COMP_W) -3.192 E(ORDBREAKS)-.09 E F0 .692(as de-)2.942 F 1.558(scribed abo)144 -678 R -.15(ve)-.15 G 6.558(.T).15 G 1.558(his v)-6.558 F 1.558 -(ariable is a)-.25 F -.25(va)-.2 G 1.558 -(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.057 -(db).1 G 4.057(yt)-4.057 G 1.557(he programmable)-4.057 F(completion f) -144 690 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 E -F0(belo)2.5 E(w\).)-.25 E F1(COPR)108 702 Q(OC)-.3 E F0 .168(An array v) -144 714 R .168(ariable \(see)-.25 F F1(Arrays)2.668 E F0(belo)2.669 E -.169 -(w\) created to hold the \214le descriptors for output from and input) --.25 F(to an unnamed coprocess \(see)144 726 Q F1(Copr)2.5 E(ocesses) --.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(12)190.395 E 0 Cg EP +F0(be-)3.537 E(lo)144 726 Q(w\).)-.25 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(12)185.955 E 0 Cg EP %%Page: 13 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(DIRST)108 84 Q -.55(AC)-.9 G(K).55 E F0 .79(An array v)144 96 R .79 -(ariable \(see)-.25 F F1(Arrays)3.29 E F0(belo)3.289 E .789 +SF(COMP_POINT)108 84 Q F0 .666(The inde)144 96 R 3.166(xo)-.15 G 3.166 +(ft)-3.166 G .666(he current cursor position relati)-3.166 F .966 -.15 +(ve t)-.25 H 3.166(ot).15 G .666(he be)-3.166 F .666 +(ginning of the current command.)-.15 F .667(If the)5.667 F .535 +(current cursor position is at the end of the current command, the v)144 +108 R .534(alue of this v)-.25 F .534(ariable is equal to)-.25 F F1 +(${#COMP_LINE})144 120 Q F0 5.704(.T)C .704(his v)-5.704 F .704 +(ariable is a)-.25 F -.25(va)-.2 G .704 +(ilable only in shell functions and e).25 F .705(xternal commands in-) +-.15 F -.2(vo)144 132 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G +(he programmable completion f)-2.5 E(acilities \(see)-.1 E F1(Pr)2.5 E +(ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(COMP_TYPE)108 +144 Q F0 .042(Set to an inte)144 156 R .042(ger v)-.15 F .041(alue corr\ +esponding to the type of completion attempted that caused a completion) +-.25 F .337(function to be called:)144 168 R/F2 10/Times-Italic@0 SF -.5 +(TA)2.837 G(B).5 E F0 2.837(,f)C .337(or normal completion,)-2.837 F F2 +(?)2.837 E F0 2.837(,f)C .337(or listing completions after successi) +-2.837 F .638 -.15(ve t)-.25 H(abs,).15 E F2(!)144 180 Q F0 3.068(,f)C +.567(or listing alternati)-3.068 F -.15(ve)-.25 G 3.067(so).15 G 3.067 +(np)-3.067 G .567(artial w)-3.067 F .567(ord completion,)-.1 F F2(@) +3.067 E F0 3.067(,t)C 3.067(ol)-3.067 G .567(ist completions if the w) +-3.067 F .567(ord is not un-)-.1 F .417(modi\214ed, or)144 192 R F2(%) +2.917 E F0 2.917(,f)C .417(or menu completion.)-2.917 F .417(This v) +5.417 F .417(ariable is a)-.25 F -.25(va)-.2 G .418 +(ilable only in shell functions and e).25 F(xter)-.15 E(-)-.2 E .704 +(nal commands in)144 204 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204 +(yt)-3.204 G .704(he programmable completion f)-3.204 F .704 +(acilities \(see)-.1 F F1(Pr)3.204 E .704(ogrammable Comple-)-.18 F +(tion)144 216 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 228 Q(ORDBREAKS) +-.1 E F0 1.335(The set of characters that the)144 240 R F1 -.18(re)3.836 +G(adline).18 E F0 1.336(library treats as w)3.836 F 1.336 +(ord separators when performing w)-.1 F(ord)-.1 E 3.126(completion. If) +144 252 R/F3 9/Times-Bold@0 SF(COMP_W)3.126 E(ORDBREAKS)-.09 E F0 .626 +(is unset, it loses its special properties, e)2.876 F -.15(ve)-.25 G +3.125(ni).15 G 3.125(fi)-3.125 G 3.125(ti)-3.125 G 3.125(ss)-3.125 G +(ubse-)-3.125 E(quently reset.)144 264 Q F1(COMP_W)108 276 Q(ORDS)-.1 E +F0 .653(An array v)144 288 R .653(ariable \(see)-.25 F F1(Arrays)3.153 E +F0(belo)3.153 E .654(w\) consisting of the indi)-.25 F .654(vidual w) +-.25 F .654(ords in the current command)-.1 F 3.192(line. The)144 300 R +.692(line is split into w)3.192 F .692(ords as)-.1 F F1 -.18(re)3.192 G +(adline).18 E F0 -.1(wo)3.192 G .692(uld split it, using).1 F F3(COMP_W) +3.192 E(ORDBREAKS)-.09 E F0 .691(as de-)2.942 F 1.557(scribed abo)144 +312 R -.15(ve)-.15 G 6.557(.T).15 G 1.557(his v)-6.557 F 1.557 +(ariable is a)-.25 F -.25(va)-.2 G 1.558 +(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.058 +(db).1 G 4.058(yt)-4.058 G 1.558(he programmable)-4.058 F(completion f) +144 324 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 E +F0(belo)2.5 E(w\).)-.25 E F1(COPR)108 336 Q(OC)-.3 E F0 .169(An array v) +144 348 R .169(ariable \(see)-.25 F F1(Arrays)2.669 E F0(belo)2.669 E +.169 +(w\) created to hold the \214le descriptors for output from and input) +-.25 F(to an unnamed coprocess \(see)144 360 Q F1(Copr)2.5 E(ocesses) +-.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(DIRST)108 372 Q -.55(AC) +-.9 G(K).55 E F0 .789(An array v)144 384 R .789(ariable \(see)-.25 F F1 +(Arrays)3.289 E F0(belo)3.289 E .789 (w\) containing the current contents of the directory stack.)-.25 F(Di-) -5.789 E .099(rectories appear in the stack in the order the)144 108 R +5.79 E .099(rectories appear in the stack in the order the)144 396 R 2.599(ya)-.15 G .099(re displayed by the)-2.599 F F1(dirs)2.599 E F0 -.2 -(bu)2.599 G 2.599(iltin. Assigning).2 F .099(to mem-)2.599 F .84 -(bers of this array v)144 120 R .84 +(bu)2.599 G 2.598(iltin. Assigning).2 F .098(to mem-)2.598 F .84 +(bers of this array v)144 408 R .84 (ariable may be used to modify directories already in the stack, b)-.25 -F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 132 Q F1(popd)3.45 E F0 --.2(bu)3.45 G .951(iltins must be used to add and remo).2 F 1.251 -.15 -(ve d)-.15 H 3.451(irectories. Assignment).15 F .951(to this v)3.451 F -.951(ariable will)-.25 F .379(not change the current directory)144 144 R -5.379(.I)-.65 G(f)-5.379 E/F2 9/Times-Bold@0 SF(DIRST)2.879 E -.495(AC) --.81 G(K).495 E F0 .378(is unset, it loses its special properties, e) -2.629 F -.15(ve)-.25 G 2.878(ni).15 G 2.878(fi)-2.878 G 2.878(ti)-2.878 -G(s)-2.878 E(subsequently reset.)144 156 Q F1(EPOCHREAL)108 168 Q(TIME) --.92 E F0 .337(Each time this parameter is referenced, it e)144 180 R -.338(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see) -144 192 Q/F3 10/Times-Italic@0 SF(time)2.917 E F0 .417 -(\(3\)\) as a \215oating point v)B .416 -(alue with micro-second granularity)-.25 F 5.416(.A)-.65 G .416 -(ssignments to)-5.416 F F2(EPOCHRE-)2.916 E(AL)144 204 Q(TIME)-.828 E F0 -1.09(are ignored.)3.34 F(If)6.09 E F2(EPOCHREAL)3.59 E(TIME)-.828 E F0 -1.09(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 G -3.591(ni).15 G 3.591(fi)-3.591 G 3.591(ti)-3.591 G(s)-3.591 E -(subsequently reset.)144 216 Q F1(EPOCHSECONDS)108 228 Q F0 .338 -(Each time this parameter is referenced, it e)144 240 R .337 +F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 420 Q F1(popd)3.451 E F0 +-.2(bu)3.451 G .951(iltins must be used to add and remo).2 F 1.251 -.15 +(ve d)-.15 H 3.45(irectories. Assignment).15 F .95(to this v)3.45 F .95 +(ariable will)-.25 F .378(not change the current directory)144 432 R +5.378(.I)-.65 G(f)-5.378 E F3(DIRST)2.878 E -.495(AC)-.81 G(K).495 E F0 +.379(is unset, it loses its special properties, e)2.628 F -.15(ve)-.25 G +2.879(ni).15 G 2.879(fi)-2.879 G 2.879(ti)-2.879 G(s)-2.879 E +(subsequently reset.)144 444 Q F1(EPOCHREAL)108 456 Q(TIME)-.92 E F0 +.338(Each time this parameter is referenced, it e)144 468 R .337 (xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144 -252 Q F3(time)4.041 E F0 4.041(\(3\)\). Assignments)B(to)4.041 E F2 -(EPOCHSECONDS)4.041 E F0 1.542(are ignored.)3.792 F(If)6.542 E F2 -(EPOCHSECONDS)4.042 E F0 1.542(is unset, it)3.792 F -(loses its special properties, e)144 264 Q -.15(ve)-.25 G 2.5(ni).15 G +480 Q F2(time)2.916 E F0 .416(\(3\)\) as a \215oating point v)B .417 +(alue with micro-second granularity)-.25 F 5.417(.A)-.65 G .417 +(ssignments to)-5.417 F F3(EPOCHRE-)2.917 E(AL)144 492 Q(TIME)-.828 E F0 +1.091(are ignored.)3.341 F(If)6.091 E F3(EPOCHREAL)3.59 E(TIME)-.828 E +F0 1.09(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 +G 3.59(ni).15 G 3.59(fi)-3.59 G 3.59(ti)-3.59 G(s)-3.59 E +(subsequently reset.)144 504 Q F1(EPOCHSECONDS)108 516 Q F0 .337 +(Each time this parameter is referenced, it e)144 528 R .338 +(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144 +540 Q F2(time)4.042 E F0 4.042(\(3\)\). Assignments)B(to)4.042 E F3 +(EPOCHSECONDS)4.042 E F0 1.542(are ignored.)3.792 F(If)6.542 E F3 +(EPOCHSECONDS)4.041 E F0 1.541(is unset, it)3.791 F +(loses its special properties, e)144 552 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -(EUID)108 276 Q F0 1.104(Expands to the ef)144 276 R(fecti)-.25 E 1.403 +(EUID)108 564 Q F0 1.103(Expands to the ef)144 564 R(fecti)-.25 E 1.403 -.15(ve u)-.25 H 1.103(ser ID of the current user).15 F 3.603(,i)-.4 G -1.103(nitialized at shell startup.)-3.603 F 1.103(This v)6.103 F 1.103 -(ariable is)-.25 F(readonly)144 288 Q(.)-.65 E F1(FUNCN)108 300 Q(AME) --.2 E F0 .478(An array v)144 312 R .479 +1.103(nitialized at shell startup.)-3.603 F 1.104(This v)6.103 F 1.104 +(ariable is)-.25 F(readonly)144 576 Q(.)-.65 E F1(FUNCN)108 588 Q(AME) +-.2 E F0 .479(An array v)144 600 R .479 (ariable containing the names of all shell functions currently in the e) --.25 F -.15(xe)-.15 G .479(cution call stack.).15 F .277 -(The element with inde)144 324 R 2.777(x0i)-.15 G 2.777(st)-2.777 G .276 -(he name of an)-2.777 F 2.776(yc)-.15 G(urrently-e)-2.776 E -.15(xe)-.15 -G .276(cuting shell function.).15 F .276(The bottom-most)5.276 F .384 -(element \(the one with the highest inde)144 336 R .384(x\) is)-.15 F/F4 -10/Courier@0 SF("main")2.884 E F0 5.384(.T)C .384(his v)-5.384 F .385 -(ariable e)-.25 F .385(xists only when a shell func-)-.15 F .076 -(tion is e)144 348 R -.15(xe)-.15 G 2.576(cuting. Assignments).15 F(to) -2.576 E F2(FUNCN)2.576 E(AME)-.18 E F0(ha)2.326 E .376 -.15(ve n)-.2 H -2.576(oe).15 G -.25(ff)-2.576 G 2.576(ect. If).25 F F2(FUNCN)2.575 E -(AME)-.18 E F0 .075(is unset, it loses its)2.325 F -(special properties, e)144 360 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E .11(This v)144 -378 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO) +-.25 F -.15(xe)-.15 G .478(cution call stack.).15 F .276 +(The element with inde)144 612 R 2.776(x0i)-.15 G 2.776(st)-2.776 G .276 +(he name of an)-2.776 F 2.777(yc)-.15 G(urrently-e)-2.777 E -.15(xe)-.15 +G .277(cuting shell function.).15 F .277(The bottom-most)5.277 F .385 +(element \(the one with the highest inde)144 624 R .384(x\) is)-.15 F/F4 +10/Courier@0 SF("main")2.884 E F0 5.384(.T)C .384(his v)-5.384 F .384 +(ariable e)-.25 F .384(xists only when a shell func-)-.15 F .075 +(tion is e)144 636 R -.15(xe)-.15 G 2.575(cuting. Assignments).15 F(to) +2.575 E F3(FUNCN)2.575 E(AME)-.18 E F0(ha)2.325 E .376 -.15(ve n)-.2 H +2.576(oe).15 G -.25(ff)-2.576 G 2.576(ect. If).25 F F3(FUNCN)2.576 E +(AME)-.18 E F0 .076(is unset, it loses its)2.326 F +(special properties, e)144 648 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 +G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E .111(This v)144 +666 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO) .3 E F0(and)2.611 E F1 -.3(BA)2.611 G(SH_SOURCE).3 E F0 5.111(.E)C .111 -(ach element of)-5.111 F F1(FUNC-)2.611 E -.2(NA)144 390 S(ME).2 E F0 +(ach element of)-5.111 F F1(FUNC-)2.61 E -.2(NA)144 678 S(ME).2 E F0 1.404(has corresponding elements in)3.904 F F1 -.3(BA)3.904 G(SH_LINENO) .3 E F0(and)3.904 E F1 -.3(BA)3.904 G(SH_SOURCE).3 E F0 1.404 -(to describe the)3.904 F .012(call stack.)144 402 R -.15(Fo)5.012 G -2.512(ri).15 G(nstance,)-2.512 E F1(${FUNCN)2.512 E(AME[)-.2 E F3($i)A +(to describe the)3.904 F .012(call stack.)144 690 R -.15(Fo)5.012 G +2.512(ri).15 G(nstance,)-2.512 E F1(${FUNCN)2.512 E(AME[)-.2 E F2($i)A F1(]})A F0 -.1(wa)2.512 G 2.512(sc).1 G .012(alled from the \214le) --2.512 F F1(${B)2.512 E(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0 1.184 -(at line number)144 414 R F1(${B)3.684 E(ASH_LINENO[)-.3 E F3($i)A F1 -(]})A F0 6.184(.T)C(he)-6.184 E F1(caller)3.683 E F0 -.2(bu)3.683 G -1.183(iltin displays the current call stack using).2 F -(this information.)144 426 Q F1(GR)108 438 Q(OUPS)-.3 E F0 1.228 -(An array v)144 450 R 1.228(ariable containing the list of groups of wh\ -ich the current user is a member)-.25 F 6.229(.A)-.55 G(ssign-)-6.229 E -.572(ments to)144 462 R F2(GR)3.072 E(OUPS)-.27 E F0(ha)2.822 E .872 --.15(ve n)-.2 H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F F2 -(GR)3.072 E(OUPS)-.27 E F0 .572 -(is unset, it loses its special properties, e)2.822 F -.15(ve)-.25 G -3.072(ni).15 G 3.071(fi)-3.072 G 3.071(ti)-3.071 G(s)-3.071 E -(subsequently reset.)144 474 Q F1(HISTCMD)108 486 Q F0 2.81 -(The history number)144 498 R 5.31(,o)-.4 G 5.31(ri)-5.31 G(nde)-5.31 E -5.311(xi)-.15 G 5.311(nt)-5.311 G 2.811 -(he history list, of the current command.)-5.311 F 2.811(Assignments to) -7.811 F F2(HISTCMD)144 510 Q F0 1.135(are ignored.)3.385 F(If)6.135 E F2 -(HISTCMD)3.635 E F0 1.135(is unset, it loses its special properties, e) -3.385 F -.15(ve)-.25 G 3.634(ni).15 G 3.634(fi)-3.634 G 3.634(ti)-3.634 -G 3.634(ss)-3.634 G(ubse-)-3.634 E(quently reset.)144 522 Q F1(HOSTN)108 -534 Q(AME)-.2 E F0(Automatically set to the name of the current host.) -144 546 Q F1(HOSTTYPE)108 558 Q F0 .222(Automatically set to a string t\ -hat uniquely describes the type of machine on which)144 570 R F1(bash) -2.723 E F0 .223(is e)2.723 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 -582 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 594 Q F0 -1.408(Each time this parameter is referenced, the shell substitutes a d\ -ecimal number representing the)144 606 R .078(current sequential line n\ -umber \(starting with 1\) within a script or function.)144 618 R .079 -(When not in a script or)5.078 F .307(function, the v)144 630 R .307 -(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.306 E -F2(LINENO)2.806 E F0 .306(is unset, it loses its)2.556 F -(special properties, e)144 642 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 654 Q -(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\ -es the system type on which)144 666 R F1(bash)3.398 E F0 .899(is e)3.398 -F -.15(xe)-.15 G .899(cuting, in).15 F(the standard GNU)144 678 Q F3 -(cpu-company-system)2.5 E F0 2.5(format. The)2.5 F(def)2.5 E -(ault is system-dependent.)-.1 E F1(MAPFILE)108 690 Q F0 .294 -(An array v)144 702 R .294(ariable \(see)-.25 F F1(Arrays)2.794 E F0 -(belo)2.794 E .294(w\) created to hold the te)-.25 F .293 -(xt read by the)-.15 F F1(map\214le)2.793 E F0 -.2(bu)2.793 G .293 -(iltin when no).2 F -.25(va)144 714 S(riable name is supplied.).25 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(13)190.395 E 0 Cg EP +-2.512 F F1(${B)2.512 E(ASH_SOURCE[)-.3 E F2($i+1)A F1(]})A F0 1.183 +(at line number)144 702 R F1(${B)3.683 E(ASH_LINENO[)-.3 E F2($i)A F1 +(]})A F0 6.183(.T)C(he)-6.183 E F1(caller)3.683 E F0 -.2(bu)3.683 G +1.184(iltin displays the current call stack using).2 F +(this information.)144 714 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(13)185.955 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(OLDPWD)108 84 Q F0(The pre)144 96 Q(vious w)-.25 E +SF(GR)108 84 Q(OUPS)-.3 E F0 1.229(An array v)144 96 R 1.228(ariable co\ +ntaining the list of groups of which the current user is a member)-.25 F +6.228(.A)-.55 G(ssign-)-6.228 E .571(ments to)144 108 R/F2 9 +/Times-Bold@0 SF(GR)3.071 E(OUPS)-.27 E F0(ha)2.822 E .872 -.15(ve n)-.2 +H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F F2(GR)3.072 E +(OUPS)-.27 E F0 .572(is unset, it loses its special properties, e)2.822 +F -.15(ve)-.25 G 3.072(ni).15 G 3.072(fi)-3.072 G 3.072(ti)-3.072 G(s) +-3.072 E(subsequently reset.)144 120 Q F1(HISTCMD)108 132 Q F0 2.811 +(The history number)144 144 R 5.311(,o)-.4 G 5.311(ri)-5.311 G(nde) +-5.311 E 5.311(xi)-.15 G 5.311(nt)-5.311 G 2.811 +(he history list, of the current command.)-5.311 F 2.81(Assignments to) +7.81 F F2(HISTCMD)144 156 Q F0 1.134(are ignored.)3.384 F(If)6.134 E F2 +(HISTCMD)3.634 E F0 1.135(is unset, it loses its special properties, e) +3.385 F -.15(ve)-.25 G 3.635(ni).15 G 3.635(fi)-3.635 G 3.635(ti)-3.635 +G 3.635(ss)-3.635 G(ubse-)-3.635 E(quently reset.)144 168 Q F1(HOSTN)108 +180 Q(AME)-.2 E F0(Automatically set to the name of the current host.) +144 192 Q F1(HOSTTYPE)108 204 Q F0 .223(Automatically set to a string t\ +hat uniquely describes the type of machine on which)144 216 R F1(bash) +2.722 E F0 .222(is e)2.722 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 +228 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 240 Q F0 +1.408(Each time this parameter is referenced, the shell substitutes a d\ +ecimal number representing the)144 252 R .078(current sequential line n\ +umber \(starting with 1\) within a script or function.)144 264 R .078 +(When not in a script or)5.078 F .306(function, the v)144 276 R .306 +(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.307 E +F2(LINENO)2.807 E F0 .307(is unset, it loses its)2.557 F +(special properties, e)144 288 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 +G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 300 Q +(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\ +es the system type on which)144 312 R F1(bash)3.398 E F0 .898(is e)3.398 +F -.15(xe)-.15 G .898(cuting, in).15 F(the standard GNU)144 324 Q/F3 10 +/Times-Italic@0 SF(cpu-company-system)2.5 E F0 2.5(format. The)2.5 F +(def)2.5 E(ault is system-dependent.)-.1 E F1(MAPFILE)108 336 Q F0 .293 +(An array v)144 348 R .293(ariable \(see)-.25 F F1(Arrays)2.793 E F0 +(belo)2.793 E .293(w\) created to hold the te)-.25 F .294 +(xt read by the)-.15 F F1(map\214le)2.794 E F0 -.2(bu)2.794 G .294 +(iltin when no).2 F -.25(va)144 360 S(riable name is supplied.).25 E F1 +(OLDPWD)108 372 Q F0(The pre)144 384 Q(vious w)-.25 E (orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1 -(OPT)108 108 Q(ARG)-.9 E F0 1.626(The v)144 120 R 1.627 +(OPT)108 396 Q(ARG)-.9 E F0 1.627(The v)144 408 R 1.627 (alue of the last option ar)-.25 F 1.627(gument processed by the)-.18 F -F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.627(iltin command \(see).2 F/F2 9 -/Times-Bold@0 SF(SHELL)4.127 E -.09(BU)144 132 S(IL).09 E(TIN COMMANDS) --.828 E F0(belo)2.25 E(w\).)-.25 E F1(OPTIND)108 144 Q F0 1.652 -(The inde)144 156 R 4.152(xo)-.15 G 4.152(ft)-4.152 G 1.652(he ne)-4.152 -F 1.652(xt ar)-.15 F 1.652(gument to be processed by the)-.18 F F1 -(getopts)4.151 E F0 -.2(bu)4.151 G 1.651(iltin command \(see).2 F F2 -(SHELL)4.151 E -.09(BU)144 168 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo) -2.25 E(w\).)-.25 E F1(OSTYPE)108 180 Q F0 .329(Automatically set to a s\ -tring that describes the operating system on which)144 192 R F1(bash) -2.83 E F0 .33(is e)2.83 F -.15(xe)-.15 G 2.83(cuting. The).15 F(def)144 -204 Q(ault is system-dependent.)-.1 E F1(PIPEST)108 216 Q -.95(AT)-.9 G -(US).95 E F0 .61(An array v)144 228 R .61(ariable \(see)-.25 F F1 -(Arrays)3.11 E F0(belo)3.11 E .61(w\) containing a list of e)-.25 F .61 +F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.626(iltin command \(see).2 F F2 +(SHELL)4.126 E -.09(BU)144 420 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo) +2.25 E(w\).)-.25 E F1(OPTIND)108 432 Q F0 1.651(The inde)144 444 R 4.151 +(xo)-.15 G 4.151(ft)-4.151 G 1.651(he ne)-4.151 F 1.651(xt ar)-.15 F +1.652(gument to be processed by the)-.18 F F1(getopts)4.152 E F0 -.2(bu) +4.152 G 1.652(iltin command \(see).2 F F2(SHELL)4.152 E -.09(BU)144 456 +S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(OSTYPE)108 +468 Q F0 .329(Automatically set to a string that describes the operatin\ +g system on which)144 480 R F1(bash)2.829 E F0 .329(is e)2.829 F -.15 +(xe)-.15 G 2.829(cuting. The).15 F(def)144 492 Q +(ault is system-dependent.)-.1 E F1(PIPEST)108 504 Q -.95(AT)-.9 G(US) +.95 E F0 .61(An array v)144 516 R .61(ariable \(see)-.25 F F1(Arrays) +3.11 E F0(belo)3.11 E .61(w\) containing a list of e)-.25 F .61 (xit status v)-.15 F .61(alues from the processes in)-.25 F -(the most-recently-e)144 240 Q -.15(xe)-.15 G(cuted fore).15 E +(the most-recently-e)144 528 Q -.15(xe)-.15 G(cuted fore).15 E (ground pipeline \(which may contain only a single command\).)-.15 E F1 -(PPID)108 252 Q F0(The process ID of the shell')144 252 Q 2.5(sp)-.55 G +(PPID)108 540 Q F0(The process ID of the shell')144 540 Q 2.5(sp)-.55 G 2.5(arent. This)-2.5 F -.25(va)2.5 G(riable is readonly).25 E(.)-.65 E -F1(PWD)108 264 Q F0(The current w)144 264 Q +F1(PWD)108 552 Q F0(The current w)144 552 Q (orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1 -(RANDOM)108 276 Q F0 .417(Each time this parameter is referenced, it e) -144 288 R .417(xpands to a random inte)-.15 F .417 -(ger between 0 and 32767.)-.15 F(As-)5.417 E .551(signing a v)144 300 R -.551(alue to)-.25 F F2(RANDOM)3.051 E F0 .551 -(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.55 E -F2(RANDOM)3.05 E F0(is)2.8 E(unset, it loses its special properties, e) -144 312 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5 -(ss)-2.5 G(ubsequently reset.)-2.5 E F1(READLINE_LINE)108 324 Q F0 1.546 -(The contents of the)144 336 R F1 -.18(re)4.047 G(adline).18 E F0 1.547 -(line b)4.047 F(uf)-.2 E(fer)-.25 E 4.047(,f)-.4 G 1.547(or use with) --4.047 F/F3 10/Courier@0 SF 1.547(bind -x)4.047 F F0(\(see)4.047 E F2 -1.547(SHELL B)4.047 F(UIL)-.09 E 1.547(TIN COM-)-.828 F(MANDS)144 348 Q -F0(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 360 Q F0 .107 -(The position of the mark \(sa)144 372 R -.15(ve)-.2 G 2.607(di).15 G -.107(nsertion point\) in the)-2.607 F F1 -.18(re)2.606 G(adline).18 E F0 -.106(line b)2.606 F(uf)-.2 E(fer)-.25 E 2.606(,f)-.4 G .106(or use with) --2.606 F F3 .106(bind -x)2.606 F F0(\(see)144 384 Q F2 1.016(SHELL B) -3.516 F(UIL)-.09 E 1.016(TIN COMMANDS)-.828 F F0(belo)3.266 E 3.516 -(w\). The)-.25 F 1.017(characters between the insertion point and the) -3.516 F(mark are often called the)144 396 Q/F4 10/Times-Italic@0 SF -.37 -(re)2.5 G(gion)-.03 E F0(.)A F1(READLINE_POINT)108 408 Q F0 .314 -(The position of the insertion point in the)144 420 R F1 -.18(re)2.813 G -(adline).18 E F0 .313(line b)2.813 F(uf)-.2 E(fer)-.25 E 2.813(,f)-.4 G -.313(or use with)-2.813 F F3 .313(bind -x)2.813 F F0(\(see)2.813 E F2 -(SHELL)2.813 E -.09(BU)144 432 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo) -2.25 E(w\).)-.25 E F1(REPL)108 444 Q(Y)-.92 E F0 -(Set to the line of input read by the)144 456 Q F1 -.18(re)2.5 G(ad).18 -E F0 -.2(bu)2.5 G(iltin command when no ar).2 E(guments are supplied.) --.18 E F1(SECONDS)108 468 Q F0 .795(Each time this parameter is referen\ -ced, the number of seconds since shell in)144 480 R -.2(vo)-.4 G .795 -(cation is returned.).2 F .713(If a v)144 492 R .712 -(alue is assigned to)-.25 F F2(SECONDS)3.212 E/F5 9/Times-Roman@0 SF(,)A -F0 .712(the v)2.962 F .712 -(alue returned upon subsequent references is the number)-.25 F .627 -(of seconds since the assignment plus the v)144 504 R .627 -(alue assigned.)-.25 F .628(The number of seconds at shell in)5.627 F --.2(vo)-.4 G(ca-).2 E .458(tion and the current time is al)144 516 R -.1 -(wa)-.1 G .458(ys determined by querying the system clock.).1 F(If)5.457 -E F2(SECONDS)2.957 E F0 .457(is un-)2.707 F -(set, it loses its special properties, e)144 528 Q -.15(ve)-.25 G 2.5 +(RANDOM)108 564 Q F0 .417(Each time this parameter is referenced, it e) +144 576 R .417(xpands to a random inte)-.15 F .417 +(ger between 0 and 32767.)-.15 F(As-)5.416 E .55(signing a v)144 588 R +.55(alue to)-.25 F F2(RANDOM)3.05 E F0 .551 +(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.551 +E F2(RANDOM)3.051 E F0(is)2.801 E +(unset, it loses its special properties, e)144 600 Q -.15(ve)-.25 G 2.5 (ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) --2.5 E F1(SHELLOPTS)108 540 Q F0 3.262(Ac)144 552 S .763 -(olon-separated list of enabled shell options.)-3.262 F .763(Each w) -5.763 F .763(ord in the list is a v)-.1 F .763(alid ar)-.25 F .763 -(gument for the)-.18 F F1144 564 Q F0 1.174(option to the)3.674 F -F1(set)3.674 E F0 -.2(bu)3.674 G 1.174(iltin command \(see).2 F F2 1.173 -(SHELL B)3.673 F(UIL)-.09 E 1.173(TIN COMMANDS)-.828 F F0(belo)3.423 E -3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 576 R F2 -(SHELLOPTS)2.519 E F0 .019(are those reported as)2.269 F F4(on)2.749 E -F0(by)2.759 E F1 .019(set \255o)2.519 F F0 5.019(.I)C 2.519(ft)-5.019 G -.019(his v)-2.519 F .02(ariable is in the en)-.25 F(vironment)-.4 E -(when)144 588 Q F1(bash)3.142 E F0 .642(starts up, each shell option in\ - the list will be enabled before reading an)3.142 F 3.141(ys)-.15 G .641 -(tartup \214les.)-3.141 F(This v)144 600 Q(ariable is read-only)-.25 E -(.)-.65 E F1(SHL)108 612 Q(VL)-.92 E F0 -(Incremented by one each time an instance of)144 624 Q F1(bash)2.5 E F0 -(is started.)2.5 E F1(SRANDOM)108 636 Q F0 .76(This v)144 648 R .76 -(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random number each tim\ -e it is referenced. The random)-.15 F .565 -(number generator is not linear on systems that support)144 660 R F3 -(/dev/urandom)3.064 E F0(or)3.064 E F4(ar)3.064 E(c4r)-.37 E(andom)-.15 -E F0 3.064(,s)C 3.064(oe)-3.064 G(ach)-3.064 E .788 -(returned number has no relationship to the numbers preceding it.)144 -672 R .788(The random number generator)5.788 F .088 -(cannot be seeded, so assignments to this v)144 684 R .087(ariable ha) --.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.587 -(ect. If).25 F F2(SRANDOM)2.587 E F0 .087(is unset, it loses its)2.337 F -(special properties, e)144 696 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 -G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(UID)108 708 Q -F0(Expands to the user ID of the current user)144 708 Q 2.5(,i)-.4 G -(nitialized at shell startup.)-2.5 E(This v)5 E(ariable is readonly)-.25 -E(.)-.65 E .993(The follo)108 724.8 R .993(wing v)-.25 F .994 -(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F1 -(bash)3.494 E F0 .994(assigns a def)3.494 F .994(ault v)-.1 F .994 -(alue to a v)-.25 F(ariable;)-.25 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(14)190.395 E 0 Cg EP +-2.5 E F1(READLINE_ARGUMENT)108 612 Q F0(An)144 624 Q 4.456(yn)-.15 G +1.956(umeric ar)-4.456 F 1.956(gument gi)-.18 F -.15(ve)-.25 G 4.456(nt) +.15 G 4.456(oaR)-4.456 G 1.956(eadline command that w)-4.456 F 1.956 +(as de\214ned using)-.1 F/F4 10/Courier@0 SF 1.955(bind -x)4.455 F F0 +(\(see)4.455 E F2(SHELL B)144 636 Q(UIL)-.09 E(TIN COMMANDS)-.828 E F0 +(belo)2.25 E(w\) when it w)-.25 E(as in)-.1 E -.2(vo)-.4 G -.1(ke).2 G +(d.).1 E F1(READLINE_LINE)108 648 Q F0 1.546(The contents of the)144 660 +R F1 -.18(re)4.047 G(adline).18 E F0 1.547(line b)4.047 F(uf)-.2 E(fer) +-.25 E 4.047(,f)-.4 G 1.547(or use with)-4.047 F F4 1.547(bind -x)4.047 +F F0(\(see)4.047 E F2 1.547(SHELL B)4.047 F(UIL)-.09 E 1.547(TIN COM-) +-.828 F(MANDS)144 672 Q F0(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 +684 Q F0 .107(The position of the mark \(sa)144 696 R -.15(ve)-.2 G +2.607(di).15 G .107(nsertion point\) in the)-2.607 F F1 -.18(re)2.606 G +(adline).18 E F0 .106(line b)2.606 F(uf)-.2 E(fer)-.25 E 2.606(,f)-.4 G +.106(or use with)-2.606 F F4 .106(bind -x)2.606 F F0(\(see)144 708 Q F2 +1.016(SHELL B)3.516 F(UIL)-.09 E 1.016(TIN COMMANDS)-.828 F F0(belo) +3.266 E 3.516(w\). The)-.25 F 1.017 +(characters between the insertion point and the)3.516 F +(mark are often called the)144 720 Q F3 -.37(re)2.5 G(gion)-.03 E F0(.)A +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(14)185.955 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(these cases are noted belo)108 84 Q -.65(w.)-.25 G/F1 10/Times-Bold@0 -SF -.3(BA)108 100.8 S(SH_COMP).3 E -.95(AT)-.74 G F0 .503(The v)144 -112.8 R .502(alue is used to set the shell')-.25 F 3.002(sc)-.55 G .502 -(ompatibility le)-3.002 F -.15(ve)-.25 G 3.002(l. See).15 F/F2 9 -/Times-Bold@0 SF .502(SHELL COMP)3.002 F -.855(AT)-.666 G .502 -(IBILITY MODE).855 F F0(be-)2.752 E(lo)144 124.8 Q 2.662(wf)-.25 G .162 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(READLINE_POINT)108 84 Q F0 .314 +(The position of the insertion point in the)144 96 R F1 -.18(re)2.813 G +(adline).18 E F0 .313(line b)2.813 F(uf)-.2 E(fer)-.25 E 2.813(,f)-.4 G +.313(or use with)-2.813 F/F2 10/Courier@0 SF .313(bind -x)2.813 F F0 +(\(see)2.813 E/F3 9/Times-Bold@0 SF(SHELL)2.813 E -.09(BU)144 108 S(IL) +.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(REPL)108 120 Q +(Y)-.92 E F0(Set to the line of input read by the)144 132 Q F1 -.18(re) +2.5 G(ad).18 E F0 -.2(bu)2.5 G(iltin command when no ar).2 E +(guments are supplied.)-.18 E F1(SECONDS)108 144 Q F0 .177 +(Each time this parameter is referenced, it e)144 156 R .178 +(xpands to the number of seconds since shell in)-.15 F -.2(vo)-.4 G +(cation.).2 E .713(If a v)144 168 R .712(alue is assigned to)-.25 F F3 +(SECONDS)3.212 E/F4 9/Times-Roman@0 SF(,)A F0 .712(the v)2.962 F .712 +(alue returned upon subsequent references is the number)-.25 F .627 +(of seconds since the assignment plus the v)144 180 R .627 +(alue assigned.)-.25 F .628(The number of seconds at shell in)5.627 F +-.2(vo)-.4 G(ca-).2 E .112(tion and the current time are al)144 192 R +-.1(wa)-.1 G .111(ys determined by querying the system clock.).1 F(If) +5.111 E F3(SECONDS)2.611 E F0 .111(is un-)2.361 F +(set, it loses its special properties, e)144 204 Q -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) +-2.5 E F1(SHELLOPTS)108 216 Q F0 3.262(Ac)144 228 S .763 +(olon-separated list of enabled shell options.)-3.262 F .763(Each w) +5.763 F .763(ord in the list is a v)-.1 F .763(alid ar)-.25 F .763 +(gument for the)-.18 F F1144 240 Q F0 1.174(option to the)3.674 F +F1(set)3.674 E F0 -.2(bu)3.674 G 1.174(iltin command \(see).2 F F3 1.173 +(SHELL B)3.673 F(UIL)-.09 E 1.173(TIN COMMANDS)-.828 F F0(belo)3.423 E +3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 252 R F3 +(SHELLOPTS)2.519 E F0 .019(are those reported as)2.269 F/F5 10 +/Times-Italic@0 SF(on)2.749 E F0(by)2.759 E F1 .019(set \255o)2.519 F F0 +5.019(.I)C 2.519(ft)-5.019 G .019(his v)-2.519 F .02 +(ariable is in the en)-.25 F(vironment)-.4 E(when)144 264 Q F1(bash) +3.142 E F0 .642(starts up, each shell option in the list will be enable\ +d before reading an)3.142 F 3.141(ys)-.15 G .641(tartup \214les.)-3.141 +F(This v)144 276 Q(ariable is read-only)-.25 E(.)-.65 E F1(SHL)108 288 Q +(VL)-.92 E F0(Incremented by one each time an instance of)144 300 Q F1 +(bash)2.5 E F0(is started.)2.5 E F1(SRANDOM)108 312 Q F0 .76(This v)144 +324 R .76(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random number\ + each time it is referenced. The random)-.15 F .565 +(number generator is not linear on systems that support)144 336 R F2 +(/dev/urandom)3.064 E F0(or)3.064 E F5(ar)3.064 E(c4r)-.37 E(andom)-.15 +E F0 3.064(,s)C 3.064(oe)-3.064 G(ach)-3.064 E .788 +(returned number has no relationship to the numbers preceding it.)144 +348 R .788(The random number generator)5.788 F .088 +(cannot be seeded, so assignments to this v)144 360 R .087(ariable ha) +-.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.587 +(ect. If).25 F F3(SRANDOM)2.587 E F0 .087(is unset, it loses its)2.337 F +(special properties, e)144 372 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 +G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(UID)108 384 Q +F0(Expands to the user ID of the current user)144 384 Q 2.5(,i)-.4 G +(nitialized at shell startup.)-2.5 E(This v)5 E(ariable is readonly)-.25 +E(.)-.65 E .993(The follo)108 400.8 R .993(wing v)-.25 F .994 +(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F1 +(bash)3.494 E F0 .994(assigns a def)3.494 F .994(ault v)-.1 F .994 +(alue to a v)-.25 F(ariable;)-.25 E(these cases are noted belo)108 412.8 +Q -.65(w.)-.25 G F1 -.3(BA)108 429.6 S(SH_COMP).3 E -.95(AT)-.74 G F0 +.503(The v)144 441.6 R .502(alue is used to set the shell')-.25 F 3.002 +(sc)-.55 G .502(ompatibility le)-3.002 F -.15(ve)-.25 G 3.002(l. See).15 +F F3 .502(SHELL COMP)3.002 F -.855(AT)-.666 G .502(IBILITY MODE).855 F +F0(be-)2.752 E(lo)144 453.6 Q 2.662(wf)-.25 G .162 (or a description of the v)-2.662 F .162(arious compatibility le)-.25 F -.15(ve)-.25 G .162(ls and their ef).15 F 2.663(fects. The)-.25 F -.25 (va)2.663 G .163(lue may be a dec-).25 F .33 -(imal number \(e.g., 4.2\) or an inte)144 136.8 R .33 +(imal number \(e.g., 4.2\) or an inte)144 465.6 R .33 (ger \(e.g., 42\) corresponding to the desired compatibility le)-.15 F --.15(ve)-.25 G 2.83(l. If).15 F F1 -.3(BA)144 148.8 S(SH_COMP).3 E -.95 +-.15(ve)-.25 G 2.83(l. If).15 F F1 -.3(BA)144 477.6 S(SH_COMP).3 E -.95 (AT)-.74 G F0 .86 (is unset or set to the empty string, the compatibility le)4.31 F -.15 (ve)-.25 G 3.361(li).15 G 3.361(ss)-3.361 G .861(et to the def)-3.361 F -(ault)-.1 E .39(for the current v)144 160.8 R 2.89(ersion. If)-.15 F F1 +(ault)-.1 E .39(for the current v)144 489.6 R 2.89(ersion. If)-.15 F F1 -.3(BA)2.89 G(SH_COMP).3 E -.95(AT)-.74 G F0 .39(is set to a v)3.84 F .39(alue that is not one of the v)-.25 F .39(alid compati-)-.25 F .277 -(bility le)144 172.8 R -.15(ve)-.25 G .278 +(bility le)144 501.6 R -.15(ve)-.25 G .278 (ls, the shell prints an error message and sets the compatibility le).15 F -.15(ve)-.25 G 2.778(lt).15 G 2.778(ot)-2.778 G .278(he def)-2.778 F -.278(ault for the)-.1 F 1.401(current v)144 184.8 R 3.901(ersion. The) +.278(ault for the)-.1 F 1.401(current v)144 513.6 R 3.901(ersion. The) -.15 F -.25(va)3.901 G 1.401(lid v).25 F 1.401 (alues correspond to the compatibility le)-.25 F -.15(ve)-.25 G 1.401 -(ls described belo).15 F 3.9(wu)-.25 G(nder)-3.9 E F2(BSHELL)144 196.8 Q -/F3 9/Times-Roman@0 SF(COMP)A -.999(AT)-.828 G(IBILITY).999 E F2(MODE)A -F3(.)A F0 -.15(Fo)4.997 G 2.997(re).15 G .497(xample, 4.2 and 42 are v) --3.147 F .497(alid v)-.25 F .498(alues that correspond to the)-.25 F F1 -.774(compat42 shopt)144 208.8 R F0 .774 -(option and set the compatibility le)3.274 F -.15(ve)-.25 G 3.274(lt).15 -G 3.274(o4)-3.274 G 3.274(2. The)-3.274 F .774(current v)3.274 F .773 -(ersion is also a v)-.15 F(alid)-.25 E -.25(va)144 220.8 S(lue.).25 E F1 --.3(BA)108 232.8 S(SH_ENV).3 E F0 .505(If this parameter is set when)144 -244.8 R F1(bash)3.005 E F0 .505(is e)3.005 F -.15(xe)-.15 G .506 -(cuting a shell script, its v).15 F .506 -(alue is interpreted as a \214lename)-.25 F .391 -(containing commands to initialize the shell, as in)144 256.8 R/F4 10 -/Times-Italic@0 SF(~/.bashr)2.39 E(c)-.37 E F0 5.39(.T).31 G .39(he v) --5.39 F .39(alue of)-.25 F F2 -.27(BA)2.89 G(SH_ENV).27 E F0 .39 -(is subjected)2.64 F .525(to parameter e)144 268.8 R .525 +(ls described belo).15 F 3.9(wu)-.25 G(nder)-3.9 E F3(BSHELL)144 525.6 Q +F4(COMP)A -.999(AT)-.828 G(IBILITY).999 E F3(MODE)A F4(.)A F0 -.15(Fo) +4.997 G 2.997(re).15 G .497(xample, 4.2 and 42 are v)-3.147 F .497 +(alid v)-.25 F .498(alues that correspond to the)-.25 F F1 .774 +(compat42 shopt)144 537.6 R F0 .774(option and set the compatibility le) +3.274 F -.15(ve)-.25 G 3.274(lt).15 G 3.274(o4)-3.274 G 3.274(2. The) +-3.274 F .774(current v)3.274 F .773(ersion is also a v)-.15 F(alid)-.25 +E -.25(va)144 549.6 S(lue.).25 E F1 -.3(BA)108 561.6 S(SH_ENV).3 E F0 +.505(If this parameter is set when)144 573.6 R F1(bash)3.005 E F0 .505 +(is e)3.005 F -.15(xe)-.15 G .506(cuting a shell script, its v).15 F +.506(alue is interpreted as a \214lename)-.25 F .391 +(containing commands to initialize the shell, as in)144 585.6 R F5 +(~/.bashr)2.39 E(c)-.37 E F0 5.39(.T).31 G .39(he v)-5.39 F .39(alue of) +-.25 F F3 -.27(BA)2.89 G(SH_ENV).27 E F0 .39(is subjected)2.64 F .525 +(to parameter e)144 597.6 R .525 (xpansion, command substitution, and arithmetic e)-.15 F .525 -(xpansion before being interpreted)-.15 F(as a \214lename.)144 280.8 Q -F2 -.666(PA)5 G(TH)-.189 E F0 +(xpansion before being interpreted)-.15 F(as a \214lename.)144 609.6 Q +F3 -.666(PA)5 G(TH)-.189 E F0 (is not used to search for the resultant \214lename.)2.25 E F1 -.3(BA) -108 292.8 S(SH_XTRA).3 E(CEFD)-.55 E F0 .481(If set to an inte)144 304.8 +108 621.6 S(SH_XTRA).3 E(CEFD)-.55 E F0 .481(If set to an inte)144 633.6 R .481(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F(,)-.4 E F1(bash)2.98 E F0 .48(will write the trace output gener)2.98 F -(-)-.2 E 3.114(ated when)144 316.8 R/F5 10/Courier@0 SF 3.114(set -x) -5.614 F F0 3.114(is enabled to that \214le descriptor)5.614 F 8.114(.T) --.55 G 3.114(he \214le descriptor is closed when)-8.114 F F2 -.27(BA)144 -328.8 S(SH_XTRA).27 E(CEFD)-.495 E F0 .138(is unset or assigned a ne) -2.388 F 2.638(wv)-.25 G 2.638(alue. Unsetting)-2.888 F F2 -.27(BA)2.638 -G(SH_XTRA).27 E(CEFD)-.495 E F0 .138(or assigning it)2.388 F 2.531(the \ -empty string causes the trace output to be sent to the standard error) -144 340.8 R 7.531(.N)-.55 G 2.531(ote that setting)-7.531 F F2 -.27(BA) -144 352.8 S(SH_XTRA).27 E(CEFD)-.495 E F0 .74(to 2 \(the standard error\ - \214le descriptor\) and then unsetting it will result in the)2.991 F -(standard error being closed.)144 364.8 Q F1(CDP)108 376.8 Q -.95(AT) --.74 G(H).95 E F0 1.247(The search path for the)144 388.8 R F1(cd)3.747 +(-)-.2 E 3.114(ated when)144 645.6 R F2 3.114(set -x)5.614 F F0 3.114 +(is enabled to that \214le descriptor)5.614 F 8.114(.T)-.55 G 3.114 +(he \214le descriptor is closed when)-8.114 F F3 -.27(BA)144 657.6 S +(SH_XTRA).27 E(CEFD)-.495 E F0 .138(is unset or assigned a ne)2.388 F +2.638(wv)-.25 G 2.638(alue. Unsetting)-2.888 F F3 -.27(BA)2.638 G +(SH_XTRA).27 E(CEFD)-.495 E F0 .138(or assigning it)2.388 F 2.531(the e\ +mpty string causes the trace output to be sent to the standard error)144 +669.6 R 7.531(.N)-.55 G 2.531(ote that setting)-7.531 F F3 -.27(BA)144 +681.6 S(SH_XTRA).27 E(CEFD)-.495 E F0 .74(to 2 \(the standard error \ +\214le descriptor\) and then unsetting it will result in the)2.991 F +(standard error being closed.)144 693.6 Q F1(CDP)108 705.6 Q -.95(AT) +-.74 G(H).95 E F0 1.247(The search path for the)144 717.6 R F1(cd)3.747 E F0 3.747(command. This)3.747 F 1.248 (is a colon-separated list of directories in which the)3.747 F 3.796 -(shell looks for destination directories speci\214ed by the)144 400.8 R +(shell looks for destination directories speci\214ed by the)144 729.6 R F1(cd)6.295 E F0 6.295(command. A)6.295 F 3.795(sample v)6.295 F 3.795 -(alue is)-.25 F F5(".:~:/usr")144 412.8 Q F0(.)A F1(CHILD_MAX)108 424.8 -Q F0 .997(Set the number of e)144 436.8 R .997(xited child status v)-.15 -F .997(alues for the shell to remember)-.25 F 5.997(.B)-.55 G .997 -(ash will not allo)-5.997 F 3.498(wt)-.25 G(his)-3.498 E -.25(va)144 -448.8 S 1.078(lue to be decreased belo).25 F 3.577(waP)-.25 G 1.077 -(OSIX-mandated minimum, and there is a maximum v)-3.577 F 1.077 -(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 460.8 Q -2.5(xceed. The)-.15 F(minimum v)2.5 E(alue is system-dependent.)-.25 E -F1(COLUMNS)108 472.8 Q F0 .828(Used by the)144 484.8 R F1(select)3.328 E -F0 .829(compound command to determine the terminal width when printing \ -selection)3.328 F 3.466(lists. Automatically)144 496.8 R .966 -(set if the)3.466 F F1(checkwinsize)3.466 E F0 .966 -(option is enabled or in an interacti)3.466 F 1.266 -.15(ve s)-.25 H -.966(hell upon re-).15 F(ceipt of a)144 508.8 Q F2(SIGWINCH)2.5 E F3(.)A -F1(COMPREPL)108 520.8 Q(Y)-.92 E F0 .847(An array v)144 532.8 R .848 -(ariable from which)-.25 F F1(bash)3.348 E F0 .848 -(reads the possible completions generated by a shell function)3.348 F -(in)144 544.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.785(db).1 G 2.785(yt)-2.785 G -.285(he programmable completion f)-2.785 F .285(acility \(see)-.1 F F1 -(Pr)2.785 E .285(ogrammable Completion)-.18 F F0(belo)2.785 E 2.785 -(w\). Each)-.25 F(array element contains one possible completion.)144 -556.8 Q F1(EMA)108 568.8 Q(CS)-.55 E F0(If)144 580.8 Q F1(bash)2.535 E -F0 .035(\214nds this v)2.535 F .035(ariable in the en)-.25 F .036 -(vironment when the shell starts with v)-.4 F(alue)-.25 E F5(t)2.536 E -F0 2.536(,i)C 2.536(ta)-2.536 G .036(ssumes that the)-2.536 F -(shell is running in an Emacs shell b)144 592.8 Q(uf)-.2 E -(fer and disables line editing.)-.25 E F1(ENV)108 604.8 Q F0 .671 -(Expanded and e)144 604.8 R -.15(xe)-.15 G .671(cuted similarly to).15 F -F2 -.27(BA)3.17 G(SH_ENV).27 E F0(\(see)2.92 E F1(INV)3.17 E(OCA)-.45 E -(TION)-.95 E F0(abo)3.17 E -.15(ve)-.15 G 3.17(\)w).15 G .67 -(hen an interacti)-3.17 F -.15(ve)-.25 G(shell is in)144 616.8 Q -.2(vo) --.4 G -.1(ke).2 G 2.5(di).1 G(n)-2.5 E F4(posix mode)2.5 E F0(.)A F1 -(EXECIGNORE)108 628.8 Q F0 2.716(Ac)144 640.8 S .216 -(olon-separated list of shell patterns \(see)-2.716 F F1 -.1(Pa)2.717 G -(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F0 2.717(\)d)C .217 -(e\214ning the list of \214lenames to be)-2.717 F .117 -(ignored by command search using)144 652.8 R F1 -.74(PA)2.617 G(TH)-.21 -E F0 5.117(.F)C .116 -(iles whose full pathnames match one of these patterns)-5.117 F 1.432 -(are not considered e)144 664.8 R -.15(xe)-.15 G 1.432 -(cutable \214les for the purposes of completion and command e).15 F -.15 -(xe)-.15 G 1.433(cution via).15 F F1 -.74(PA)144 676.8 S(TH)-.21 E F0 -2.909(lookup. This)2.909 F .408(does not af)2.908 F .408(fect the beha) --.25 F .408(vior of the)-.2 F F1([)2.908 E F0(,)A F1(test)2.908 E F0 -2.908(,a)C(nd)-2.908 E F1([[)2.908 E F0 2.908(commands. Full)2.908 F -(pathnames)2.908 E .364(in the command hash table are not subject to)144 -688.8 R F1(EXECIGNORE)2.864 E F0 5.364(.U)C .364(se this v)-5.364 F .364 -(ariable to ignore shared)-.25 F 1.37(library \214les that ha)144 700.8 -R 1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37 -(cutable bit set, b).15 F 1.37(ut are not e)-.2 F -.15(xe)-.15 G 1.37 -(cutable \214les.).15 F 1.37(The pattern matching)6.37 F -(honors the setting of the)144 712.8 Q F1(extglob)2.5 E F0 -(shell option.)2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(15) -190.395 E 0 Cg EP +(alue is)-.25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(15) +185.955 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(FCEDIT)108 84 Q F0(The def)144 96 Q(ault editor for the)-.1 E F1(fc) -2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E F1(FIGNORE)108 108 Q F0 2.598 -(Ac)144 120 S .098(olon-separated list of suf)-2.598 F<8c78>-.25 E .098 -(es to ignore when performing \214lename completion \(see)-.15 F/F2 9 -/Times-Bold@0 SF(READLINE)2.599 E F0(belo)144 132 Q 2.705(w\). A)-.25 F -.205(\214lename whose suf)2.705 F .205 -(\214x matches one of the entries in)-.25 F F2(FIGNORE)2.705 E F0 .205 -(is e)2.455 F .204(xcluded from the list)-.15 F(of matched \214lenames.) -144 144 Q 2.5(As)5 G(ample v)-2.5 E(alue is)-.25 E/F3 10/Courier@0 SF -(".o:~")2.5 E F0(.)A F1(FUNCNEST)108 156 Q F0 .23(If set to a numeric v) -144 168 R .231 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Courier@0 SF +(".:~:/usr")144 84 Q F0(.)A/F2 10/Times-Bold@0 SF(CHILD_MAX)108 96 Q F0 +.997(Set the number of e)144 108 R .997(xited child status v)-.15 F .997 +(alues for the shell to remember)-.25 F 5.997(.B)-.55 G .997 +(ash will not allo)-5.997 F 3.498(wt)-.25 G(his)-3.498 E -.25(va)144 120 +S 1.078(lue to be decreased belo).25 F 3.577(waP)-.25 G 1.077 +(OSIX-mandated minimum, and there is a maximum v)-3.577 F 1.077 +(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 132 Q +2.5(xceed. The)-.15 F(minimum v)2.5 E(alue is system-dependent.)-.25 E +F2(COLUMNS)108 144 Q F0 .828(Used by the)144 156 R F2(select)3.328 E F0 +.829(compound command to determine the terminal width when printing sel\ +ection)3.328 F 3.466(lists. Automatically)144 168 R .966(set if the) +3.466 F F2(checkwinsize)3.466 E F0 .966 +(option is enabled or in an interacti)3.466 F 1.266 -.15(ve s)-.25 H +.966(hell upon re-).15 F(ceipt of a)144 180 Q/F3 9/Times-Bold@0 SF +(SIGWINCH)2.5 E/F4 9/Times-Roman@0 SF(.)A F2(COMPREPL)108 192 Q(Y)-.92 E +F0 .847(An array v)144 204 R .848(ariable from which)-.25 F F2(bash) +3.348 E F0 .848 +(reads the possible completions generated by a shell function)3.348 F +(in)144 216 Q -.2(vo)-.4 G -.1(ke).2 G 2.785(db).1 G 2.785(yt)-2.785 G +.285(he programmable completion f)-2.785 F .285(acility \(see)-.1 F F2 +(Pr)2.785 E .285(ogrammable Completion)-.18 F F0(belo)2.785 E 2.785 +(w\). Each)-.25 F(array element contains one possible completion.)144 +228 Q F2(EMA)108 240 Q(CS)-.55 E F0(If)144 252 Q F2(bash)2.535 E F0 .035 +(\214nds this v)2.535 F .035(ariable in the en)-.25 F .036 +(vironment when the shell starts with v)-.4 F(alue)-.25 E F1(t)2.536 E +F0 2.536(,i)C 2.536(ta)-2.536 G .036(ssumes that the)-2.536 F +(shell is running in an Emacs shell b)144 264 Q(uf)-.2 E +(fer and disables line editing.)-.25 E F2(ENV)108 276 Q F0 .671 +(Expanded and e)144 276 R -.15(xe)-.15 G .671(cuted similarly to).15 F +F3 -.27(BA)3.17 G(SH_ENV).27 E F0(\(see)2.92 E F2(INV)3.17 E(OCA)-.45 E +(TION)-.95 E F0(abo)3.17 E -.15(ve)-.15 G 3.17(\)w).15 G .67 +(hen an interacti)-3.17 F -.15(ve)-.25 G(shell is in)144 288 Q -.2(vo) +-.4 G -.1(ke).2 G 2.5(di).1 G(n)-2.5 E/F5 10/Times-Italic@0 SF +(posix mode)2.5 E F0(.)A F2(EXECIGNORE)108 300 Q F0 2.716(Ac)144 312 S +.216(olon-separated list of shell patterns \(see)-2.716 F F2 -.1(Pa) +2.717 G(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F0 2.717(\)d)C .217 +(e\214ning the list of \214lenames to be)-2.717 F .117 +(ignored by command search using)144 324 R F2 -.74(PA)2.617 G(TH)-.21 E +F0 5.117(.F)C .116 +(iles whose full pathnames match one of these patterns)-5.117 F 1.432 +(are not considered e)144 336 R -.15(xe)-.15 G 1.432 +(cutable \214les for the purposes of completion and command e).15 F -.15 +(xe)-.15 G 1.433(cution via).15 F F2 -.74(PA)144 348 S(TH)-.21 E F0 +2.909(lookup. This)2.909 F .408(does not af)2.908 F .408(fect the beha) +-.25 F .408(vior of the)-.2 F F2([)2.908 E F0(,)A F2(test)2.908 E F0 +2.908(,a)C(nd)-2.908 E F2([[)2.908 E F0 2.908(commands. Full)2.908 F +(pathnames)2.908 E .364(in the command hash table are not subject to)144 +360 R F2(EXECIGNORE)2.864 E F0 5.364(.U)C .364(se this v)-5.364 F .364 +(ariable to ignore shared)-.25 F 1.37(library \214les that ha)144 372 R +1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37 +(cutable bit set, b).15 F 1.37(ut are not e)-.2 F -.15(xe)-.15 G 1.37 +(cutable \214les.).15 F 1.37(The pattern matching)6.37 F +(honors the setting of the)144 384 Q F2(extglob)2.5 E F0(shell option.) +2.5 E F2(FCEDIT)108 396 Q F0(The def)144 408 Q(ault editor for the)-.1 E +F2(fc)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E F2(FIGNORE)108 420 Q F0 +2.598(Ac)144 432 S .098(olon-separated list of suf)-2.598 F<8c78>-.25 E +.098(es to ignore when performing \214lename completion \(see)-.15 F F3 +(READLINE)2.599 E F0(belo)144 444 Q 2.705(w\). A)-.25 F .205 +(\214lename whose suf)2.705 F .205(\214x matches one of the entries in) +-.25 F F3(FIGNORE)2.705 E F0 .205(is e)2.455 F .204 +(xcluded from the list)-.15 F(of matched \214lenames.)144 456 Q 2.5(As)5 +G(ample v)-2.5 E(alue is)-.25 E F1(".o:~")2.5 E F0(.)A F2(FUNCNEST)108 +468 Q F0 .23(If set to a numeric v)144 480 R .231 (alue greater than 0, de\214nes a maximum function nesting le)-.25 F -.15(ve)-.25 G 2.731(l. Function).15 F(in)2.731 E -.2(vo)-.4 G(-).2 E -(cations that e)144 180 Q(xceed this nesting le)-.15 E -.15(ve)-.25 G -2.5(lw).15 G(ill cause the current command to abort.)-2.5 E F1 -(GLOBIGNORE)108 192 Q F0 2.924(Ac)144 204 S .423(olon-separated list of\ +(cations that e)144 492 Q(xceed this nesting le)-.15 E -.15(ve)-.25 G +2.5(lw).15 G(ill cause the current command to abort.)-2.5 E F2 +(GLOBIGNORE)108 504 Q F0 2.924(Ac)144 516 S .423(olon-separated list of\ patterns de\214ning the set of \214le names to be ignored by pathname \ -e)-2.924 F(xpan-)-.15 E 2.947(sion. If)144 216 R 2.947<618c>2.947 G .447 +e)-2.924 F(xpan-)-.15 E 2.947(sion. If)144 528 R 2.947<618c>2.947 G .447 (le name matched by a pathname e)-2.947 F .448 -(xpansion pattern also matches one of the patterns in)-.15 F F2 -(GLOBIGNORE)144 228 Q/F4 9/Times-Roman@0 SF(,)A F0(it is remo)2.25 E --.15(ve)-.15 G 2.5(df).15 G(rom the list of matches.)-2.5 E F1 -(HISTCONTR)108 240 Q(OL)-.3 E F0 2.654(Ac)144 252 S .153 -(olon-separated list of v)-2.654 F .153(alues controlling ho)-.25 F -2.653(wc)-.25 G .153(ommands are sa)-2.653 F -.15(ve)-.2 G 2.653(do).15 -G 2.653(nt)-2.653 G .153(he history list.)-2.653 F .153(If the list) -5.153 F .49(of v)144 264 R .49(alues includes)-.25 F/F5 10 -/Times-Italic@0 SF(ignor)3 E(espace)-.37 E F0 2.99(,l).18 G .49 -(ines which be)-2.99 F .49(gin with a)-.15 F F1(space)2.99 E F0 .49 +(xpansion pattern also matches one of the patterns in)-.15 F F3 +(GLOBIGNORE)144 540 Q F4(,)A F0(it is remo)2.25 E -.15(ve)-.15 G 2.5(df) +.15 G(rom the list of matches.)-2.5 E F2(HISTCONTR)108 552 Q(OL)-.3 E F0 +2.654(Ac)144 564 S .153(olon-separated list of v)-2.654 F .153 +(alues controlling ho)-.25 F 2.653(wc)-.25 G .153(ommands are sa)-2.653 +F -.15(ve)-.2 G 2.653(do).15 G 2.653(nt)-2.653 G .153(he history list.) +-2.653 F .153(If the list)5.153 F .49(of v)144 576 R .49(alues includes) +-.25 F F5(ignor)3 E(espace)-.37 E F0 2.99(,l).18 G .49(ines which be) +-2.99 F .49(gin with a)-.15 F F2(space)2.99 E F0 .49 (character are not sa)2.99 F -.15(ve)-.2 G 2.99(di).15 G 2.99(nt)-2.99 G -.49(he his-)-2.99 F .558(tory list.)144 276 R 3.058(Av)5.558 G .558 +.49(he his-)-2.99 F .558(tory list.)144 588 R 3.058(Av)5.558 G .558 (alue of)-3.308 F F5(ignor)3.068 E(edups)-.37 E F0 .558 (causes lines matching the pre)3.328 F .557 (vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.925 -(Av)144 288 S .425(alue of)-3.175 F F5(ignor)2.935 E(eboth)-.37 E F0 +(Av)144 600 S .425(alue of)-3.175 F F5(ignor)2.935 E(eboth)-.37 E F0 .426(is shorthand for)3.205 F F5(ignor)2.926 E(espace)-.37 E F0(and) 2.926 E F5(ignor)2.926 E(edups)-.37 E F0 5.426(.A)C -.25(va)-2.5 G .426 (lue of).25 F F5(er)3.116 E(asedups)-.15 E F0(causes)3.196 E .699 -(all pre)144 300 R .698 +(all pre)144 612 R .698 (vious lines matching the current line to be remo)-.25 F -.15(ve)-.15 G 3.198(df).15 G .698(rom the history list before that line is)-3.198 F -(sa)144 312 Q -.15(ve)-.2 G 2.763(d. An).15 F 2.763(yv)-.15 G .263 +(sa)144 624 Q -.15(ve)-.2 G 2.763(d. An).15 F 2.763(yv)-.15 G .263 (alue not in the abo)-3.013 F .563 -.15(ve l)-.15 H .263 -(ist is ignored.).15 F(If)5.263 E F2(HISTCONTR)2.763 E(OL)-.27 E F0 .264 -(is unset, or does not include)2.513 F 2.942(av)144 324 S .442(alid v) +(ist is ignored.).15 F(If)5.263 E F3(HISTCONTR)2.763 E(OL)-.27 E F0 .264 +(is unset, or does not include)2.513 F 2.942(av)144 636 S .442(alid v) -3.192 F .442(alue, all lines read by the shell parser are sa)-.25 F -.15(ve)-.2 G 2.941(do).15 G 2.941(nt)-2.941 G .441 -(he history list, subject to the v)-2.941 F .441(alue of)-.25 F F2 -(HISTIGNORE)144 336 Q F4(.)A F0 1.981(The second and subsequent lines o\ +(he history list, subject to the v)-2.941 F .441(alue of)-.25 F F3 +(HISTIGNORE)144 648 Q F4(.)A F0 1.981(The second and subsequent lines o\ f a multi-line compound command are not)6.481 F -(tested, and are added to the history re)144 348 Q -.05(ga)-.15 G -(rdless of the v).05 E(alue of)-.25 E F2(HISTCONTR)2.5 E(OL)-.27 E F4(.) -A F1(HISTFILE)108 360 Q F0 .181 -(The name of the \214le in which command history is sa)144 372 R -.15 -(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F2(HIST)2.681 E(OR)-.162 E(Y) +(tested, and are added to the history re)144 660 Q -.05(ga)-.15 G +(rdless of the v).05 E(alue of)-.25 E F3(HISTCONTR)2.5 E(OL)-.27 E F4(.) +A F2(HISTFILE)108 672 Q F0 .181 +(The name of the \214le in which command history is sa)144 684 R -.15 +(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F3(HIST)2.681 E(OR)-.162 E(Y) -.315 E F0(belo)2.431 E 2.681(w\). The)-.25 F(def)2.681 E .181(ault v) --.1 F(alue)-.25 E(is)144 384 Q F5(~/.bash_history)2.5 E F0 5(.I)C 2.5 +-.1 F(alue)-.25 E(is)144 696 Q F5(~/.bash_history)2.5 E F0 5(.I)C 2.5 (fu)-5 G(nset, the command history is not sa)-2.5 E -.15(ve)-.2 G 2.5 -(dw).15 G(hen a shell e)-2.5 E(xits.)-.15 E F1(HISTFILESIZE)108 396 Q F0 -1.622(The maximum number of lines contained in the history \214le.)144 -408 R 1.623(When this v)6.623 F 1.623(ariable is assigned a)-.25 F -.25 -(va)144 420 S .125(lue, the history \214le is truncated, if necessary) -.25 F 2.625(,t)-.65 G 2.624(oc)-2.625 G .124 -(ontain no more than that number of lines by re-)-2.624 F(mo)144 432 Q -.065(ving the oldest entries.)-.15 F .066(The history \214le is also tr\ -uncated to this size after writing it when a shell)5.065 F -.15(ex)144 -444 S 2.928(its. If).15 F .428(the v)2.928 F .428 -(alue is 0, the history \214le is truncated to zero size.)-.25 F .427 -(Non-numeric v)5.427 F .427(alues and numeric)-.25 F -.25(va)144 456 S -.152(lues less than zero inhibit truncation.).25 F .152 -(The shell sets the def)5.152 F .152(ault v)-.1 F .152(alue to the v) --.25 F .152(alue of)-.25 F F1(HISTSIZE)2.652 E F0(after reading an)144 -468 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 480 Q F0 -2.658(Ac)144 492 S .158(olon-separated list of patterns used to decide \ -which command lines should be sa)-2.658 F -.15(ve)-.2 G 2.657(do).15 G -2.657(nt)-2.657 G .157(he his-)-2.657 F .707(tory list.)144 504 R .707 -(Each pattern is anchored at the be)5.707 F .708 -(ginning of the line and must match the complete line)-.15 F .626 -(\(no implicit `)144 516 R F1(*)A F0 3.126('i)C 3.126(sa)-3.126 G 3.126 -(ppended\). Each)-3.126 F .626(pattern is tested ag)3.126 F .625 -(ainst the line after the checks speci\214ed by)-.05 F F2(HISTCONTR)144 -528 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793 -(In addition to the normal shell pattern matching characters, `)6.793 F -F1(&)A F0(')A 1.44(matches the pre)144 540 R 1.44(vious history line.) --.25 F(`)6.44 E F1(&)A F0 3.94('m)C 1.44 -(ay be escaped using a backslash; the backslash is re-)-3.94 F(mo)144 -552 Q -.15(ve)-.15 G 3.95(db).15 G 1.45(efore attempting a match.)-3.95 -F 1.45(The second and subsequent lines of a multi-line compound)6.45 F -1.269(command are not tested, and are added to the history re)144 564 R --.05(ga)-.15 G 1.269(rdless of the v).05 F 1.269(alue of)-.25 F F2 -(HISTIGNORE)3.769 E F4(.)A F0 -(The pattern matching honors the setting of the)144 576 Q F1(extglob)2.5 -E F0(shell option.)2.5 E F1(HISTSIZE)108 588 Q F0 1.387 -(The number of commands to remember in the command history \(see)144 600 -R F2(HIST)3.887 E(OR)-.162 E(Y)-.315 E F0(belo)3.637 E 3.887(w\). If) --.25 F(the)3.888 E -.25(va)144 612 S .413(lue is 0, commands are not sa) -.25 F -.15(ve)-.2 G 2.913(di).15 G 2.913(nt)-2.913 G .413 -(he history list.)-2.913 F .413(Numeric v)5.413 F .412 -(alues less than zero result in e)-.25 F(v-)-.25 E .343 -(ery command being sa)144 624 R -.15(ve)-.2 G 2.843(do).15 G 2.843(nt) --2.843 G .343(he history list \(there is no limit\).)-2.843 F .344 -(The shell sets the def)5.343 F .344(ault v)-.1 F .344(alue to)-.25 F -(500 after reading an)144 636 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1 -(HISTTIMEFORMA)108 648 Q(T)-.95 E F0 .952(If this v)144 660 R .952 -(ariable is set and not null, its v)-.25 F .951 -(alue is used as a format string for)-.25 F F5(strftime)3.451 E F0 .951 -(\(3\) to print the)B .672 -(time stamp associated with each history entry displayed by the)144 672 -R F1(history)3.173 E F0 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v) -3.173 F .673(ariable is)-.25 F .144 -(set, time stamps are written to the history \214le so the)144 684 R -2.644(ym)-.15 G .144(ay be preserv)-2.644 F .144 -(ed across shell sessions.)-.15 F(This)5.144 E(uses the history comment\ - character to distinguish timestamps from other history lines.)144 696 Q -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(16)190.395 E 0 Cg EP +(dw).15 G(hen a shell e)-2.5 E(xits.)-.15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(16)185.955 E 0 Cg EP %%Page: 17 17 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(HOME)108 84 Q F0 1.27 -(The home directory of the current user; the def)144 96 R 1.27(ault ar) +SF(HISTFILESIZE)108 84 Q F0 1.622 +(The maximum number of lines contained in the history \214le.)144 96 R +1.623(When this v)6.623 F 1.623(ariable is assigned a)-.25 F -.25(va)144 +108 S .125(lue, the history \214le is truncated, if necessary).25 F +2.625(,t)-.65 G 2.624(oc)-2.625 G .124 +(ontain no more than that number of lines by re-)-2.624 F(mo)144 120 Q +.065(ving the oldest entries.)-.15 F .066(The history \214le is also tr\ +uncated to this size after writing it when a shell)5.065 F -.15(ex)144 +132 S 2.928(its. If).15 F .428(the v)2.928 F .428 +(alue is 0, the history \214le is truncated to zero size.)-.25 F .427 +(Non-numeric v)5.427 F .427(alues and numeric)-.25 F -.25(va)144 144 S +.152(lues less than zero inhibit truncation.).25 F .152 +(The shell sets the def)5.152 F .152(ault v)-.1 F .152(alue to the v) +-.25 F .152(alue of)-.25 F F1(HISTSIZE)2.652 E F0(after reading an)144 +156 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 168 Q F0 +2.658(Ac)144 180 S .158(olon-separated list of patterns used to decide \ +which command lines should be sa)-2.658 F -.15(ve)-.2 G 2.657(do).15 G +2.657(nt)-2.657 G .157(he his-)-2.657 F .707(tory list.)144 192 R .707 +(Each pattern is anchored at the be)5.707 F .708 +(ginning of the line and must match the complete line)-.15 F .626 +(\(no implicit `)144 204 R F1(*)A F0 3.126('i)C 3.126(sa)-3.126 G 3.126 +(ppended\). Each)-3.126 F .626(pattern is tested ag)3.126 F .625 +(ainst the line after the checks speci\214ed by)-.05 F/F2 9/Times-Bold@0 +SF(HISTCONTR)144 216 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793 +(In addition to the normal shell pattern matching characters, `)6.793 F +F1(&)A F0(')A 1.44(matches the pre)144 228 R 1.44(vious history line.) +-.25 F(`)6.44 E F1(&)A F0 3.94('m)C 1.44 +(ay be escaped using a backslash; the backslash is re-)-3.94 F(mo)144 +240 Q -.15(ve)-.15 G 3.95(db).15 G 1.45(efore attempting a match.)-3.95 +F 1.45(The second and subsequent lines of a multi-line compound)6.45 F +1.269(command are not tested, and are added to the history re)144 252 R +-.05(ga)-.15 G 1.269(rdless of the v).05 F 1.269(alue of)-.25 F F2 +(HISTIGNORE)3.769 E/F3 9/Times-Roman@0 SF(.)A F0 +(The pattern matching honors the setting of the)144 264 Q F1(extglob)2.5 +E F0(shell option.)2.5 E F1(HISTSIZE)108 276 Q F0 1.387 +(The number of commands to remember in the command history \(see)144 288 +R F2(HIST)3.887 E(OR)-.162 E(Y)-.315 E F0(belo)3.637 E 3.887(w\). If) +-.25 F(the)3.888 E -.25(va)144 300 S .413(lue is 0, commands are not sa) +.25 F -.15(ve)-.2 G 2.913(di).15 G 2.913(nt)-2.913 G .413 +(he history list.)-2.913 F .413(Numeric v)5.413 F .412 +(alues less than zero result in e)-.25 F(v-)-.25 E .343 +(ery command being sa)144 312 R -.15(ve)-.2 G 2.843(do).15 G 2.843(nt) +-2.843 G .343(he history list \(there is no limit\).)-2.843 F .344 +(The shell sets the def)5.343 F .344(ault v)-.1 F .344(alue to)-.25 F +(500 after reading an)144 324 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1 +(HISTTIMEFORMA)108 336 Q(T)-.95 E F0 .952(If this v)144 348 R .952 +(ariable is set and not null, its v)-.25 F .951 +(alue is used as a format string for)-.25 F/F4 10/Times-Italic@0 SF +(strftime)3.451 E F0 .951(\(3\) to print the)B .672 +(time stamp associated with each history entry displayed by the)144 360 +R F1(history)3.173 E F0 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v) +3.173 F .673(ariable is)-.25 F .144 +(set, time stamps are written to the history \214le so the)144 372 R +2.644(ym)-.15 G .144(ay be preserv)-2.644 F .144 +(ed across shell sessions.)-.15 F(This)5.144 E(uses the history comment\ + character to distinguish timestamps from other history lines.)144 384 Q +F1(HOME)108 396 Q F0 1.27 +(The home directory of the current user; the def)144 408 R 1.27(ault ar) -.1 F 1.27(gument for the)-.18 F F1(cd)3.77 E F0 -.2(bu)3.77 G 1.27 -(iltin command.).2 F(The)6.27 E -.25(va)144 108 S(lue of this v).25 E +(iltin command.).2 F(The)6.27 E -.25(va)144 420 S(lue of this v).25 E (ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F1 -(HOSTFILE)108 120 Q F0 1.015 -(Contains the name of a \214le in the same format as)144 132 R/F2 10 -/Times-Italic@0 SF(/etc/hosts)5.181 E F0 1.015 -(that should be read when the shell)5.181 F .55 -(needs to complete a hostname.)144 144 R .551 +(HOSTFILE)108 432 Q F0 1.015 +(Contains the name of a \214le in the same format as)144 444 R F4 +(/etc/hosts)5.181 E F0 1.015(that should be read when the shell)5.181 F +.55(needs to complete a hostname.)144 456 R .551 (The list of possible hostname completions may be changed while)5.551 F -1.059(the shell is running; the ne)144 156 R 1.059 +1.059(the shell is running; the ne)144 468 R 1.059 (xt time hostname completion is attempted after the v)-.15 F 1.058 -(alue is changed,)-.25 F F1(bash)144 168 Q F0 .138 +(alue is changed,)-.25 F F1(bash)144 480 Q F0 .138 (adds the contents of the ne)2.638 F 2.638<778c>-.25 G .138(le to the e) --2.638 F .138(xisting list.)-.15 F(If)5.138 E/F3 9/Times-Bold@0 SF -(HOSTFILE)2.638 E F0 .138(is set, b)2.388 F .139(ut has no v)-.2 F .139 -(alue, or)-.25 F .518(does not name a readable \214le,)144 180 R F1 -(bash)3.018 E F0 .518(attempts to read)3.018 F F2(/etc/hosts)4.683 E F0 -.517(to obtain the list of possible host-)4.683 F(name completions.)144 -192 Q(When)5 E F3(HOSTFILE)2.5 E F0 -(is unset, the hostname list is cleared.)2.25 E F1(IFS)108 204 Q F0(The) -144 204 Q F2 .555(Internal F)3.635 F .555(ield Separ)-.45 F(ator)-.15 E -F0 .555(that is used for w)3.785 F .556(ord splitting after e)-.1 F .556 -(xpansion and to split lines into)-.15 F -.1(wo)144 216 S(rds with the) -.1 E F1 -.18(re)2.5 G(ad).18 E F0 -.2(bu)2.5 G(iltin command.).2 E -(The def)5 E(ault v)-.1 E(alue is `)-.25 E(`')-.25 E('.)-.74 E F1(IGNOREEOF)108 228 Q F0 .503 -(Controls the action of an interacti)144 240 R .803 -.15(ve s)-.25 H -.503(hell on receipt of an).15 F F3(EOF)3.003 E F0 .503 +-2.638 F .138(xisting list.)-.15 F(If)5.138 E F2(HOSTFILE)2.638 E F0 +.138(is set, b)2.388 F .139(ut has no v)-.2 F .139(alue, or)-.25 F .518 +(does not name a readable \214le,)144 492 R F1(bash)3.018 E F0 .518 +(attempts to read)3.018 F F4(/etc/hosts)4.683 E F0 .517 +(to obtain the list of possible host-)4.683 F(name completions.)144 504 +Q(When)5 E F2(HOSTFILE)2.5 E F0(is unset, the hostname list is cleared.) +2.25 E F1(IFS)108 516 Q F0(The)144 516 Q F4 .555(Internal F)3.635 F .555 +(ield Separ)-.45 F(ator)-.15 E F0 .555(that is used for w)3.785 F .556 +(ord splitting after e)-.1 F .556(xpansion and to split lines into)-.15 +F -.1(wo)144 528 S(rds with the).1 E F1 -.18(re)2.5 G(ad).18 E F0 -.2 +(bu)2.5 G(iltin command.).2 E(The def)5 E(ault v)-.1 E(alue is `)-.25 E +(`')-.25 E('.)-.74 E F1(IGNOREEOF)108 540 Q +F0 .503(Controls the action of an interacti)144 552 R .803 -.15(ve s) +-.25 H .503(hell on receipt of an).15 F F2(EOF)3.003 E F0 .503 (character as the sole input.)2.753 F .503(If set,)5.503 F .426(the v) -144 252 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F3 +144 564 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F2 (EOF)3.076 E F0 .426 (characters which must be typed as the \214rst characters)2.676 F .303 -(on an input line before)144 264 R F1(bash)2.802 E F0 -.15(ex)2.802 G +(on an input line before)144 576 R F1(bash)2.802 E F0 -.15(ex)2.802 G 2.802(its. If).15 F .302(the v)2.802 F .302(ariable e)-.25 F .302 (xists b)-.15 F .302(ut does not ha)-.2 F .602 -.15(ve a n)-.2 H .302 -(umeric v).15 F .302(alue, or has)-.25 F(no v)144 276 Q(alue, the def) +(umeric v).15 F .302(alue, or has)-.25 F(no v)144 588 Q(alue, the def) -.25 E(ault v)-.1 E(alue is 10.)-.25 E(If it does not e)5 E(xist,)-.15 E -F3(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1 -(INPUTRC)108 288 Q F0 .26(The \214lename for the)144 300 R F1 -.18(re) +F2(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1 +(INPUTRC)108 600 Q F0 .26(The \214lename for the)144 612 R F1 -.18(re) 2.76 G(adline).18 E F0 .26(startup \214le, o)2.76 F -.15(ve)-.15 G .26 -(rriding the def).15 F .261(ault of)-.1 F F2(~/.inputr)4.427 E(c)-.37 E -F0(\(see)4.427 E F3(READLINE)2.761 E F0(be-)2.511 E(lo)144 312 Q(w\).) --.25 E F1(INSIDE_EMA)108 324 Q(CS)-.55 E F0 .034(If this v)144 336 R +(rriding the def).15 F .261(ault of)-.1 F F4(~/.inputr)4.427 E(c)-.37 E +F0(\(see)4.427 E F2(READLINE)2.761 E F0(be-)2.511 E(lo)144 624 Q(w\).) +-.25 E F1(INSIDE_EMA)108 636 Q(CS)-.55 E F0 .034(If this v)144 648 R .034(ariable appears in the en)-.25 F .034 (vironment when the shell starts,)-.4 F F1(bash)2.533 E F0 .033 -(assumes that it is running in-)2.533 F(side an Emacs shell b)144 348 Q +(assumes that it is running in-)2.533 F(side an Emacs shell b)144 660 Q (uf)-.2 E(fer and may disable line editing, depending on the v)-.25 E -(alue of)-.25 E F1(TERM)2.5 E F0(.)A F1(LANG)108 360 Q F0 1.239 -(Used to determine the locale cate)144 360 R 1.239(gory for an)-.15 F +(alue of)-.25 E F1(TERM)2.5 E F0(.)A F1(LANG)108 672 Q F0 1.239 +(Used to determine the locale cate)144 672 R 1.239(gory for an)-.15 F 3.739(yc)-.15 G(ate)-3.739 E 1.24 (gory not speci\214cally selected with a v)-.15 F(ariable)-.25 E -(starting with)144 372 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 384 Q F0 .974 -(This v)144 396 R .974(ariable o)-.25 F -.15(ve)-.15 G .974 -(rrides the v).15 F .973(alue of)-.25 F F3(LANG)3.473 E F0 .973(and an) +(starting with)144 684 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 696 Q F0 .974 +(This v)144 708 R .974(ariable o)-.25 F -.15(ve)-.15 G .974 +(rrides the v).15 F .973(alue of)-.25 F F2(LANG)3.473 E F0 .973(and an) 3.223 F 3.473(yo)-.15 G(ther)-3.473 E F1(LC_)3.473 E F0 -.25(va)3.473 G -.973(riable specifying a locale cate-).25 F(gory)144 408 Q(.)-.65 E F1 -(LC_COLLA)108 420 Q(TE)-.95 E F0 .411(This v)144 432 R .412(ariable det\ -ermines the collation order used when sorting the results of pathname e) --.25 F(xpansion,)-.15 E 1.465(and determines the beha)144 444 R 1.465 -(vior of range e)-.2 F 1.464(xpressions, equi)-.15 F -.25(va)-.25 G -1.464(lence classes, and collating sequences).25 F(within pathname e)144 -456 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 468 Q F0 -1.935(This v)144 480 R 1.936 -(ariable determines the interpretation of characters and the beha)-.25 F -1.936(vior of character classes)-.2 F(within pathname e)144 492 Q -(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 504 Q(GES)-.55 E -F0(This v)144 516 Q(ariable determines the locale used to translate dou\ -ble-quoted strings preceded by a)-.25 E F1($)2.5 E F0(.)A F1(LC_NUMERIC) -108 528 Q F0(This v)144 540 Q(ariable determines the locale cate)-.25 E -(gory used for number formatting.)-.15 E F1(LC_TIME)108 552 Q F0(This v) -144 564 Q(ariable determines the locale cate)-.25 E -(gory used for data and time formatting.)-.15 E F1(LINES)108 576 Q F0 -.055(Used by the)144 576 R F1(select)2.555 E F0 .054(compound command t\ -o determine the column length for printing selection lists.)2.555 F .264 -(Automatically set if the)144 588 R F1(checkwinsize)2.764 E F0 .264 -(option is enabled or in an interacti)2.764 F .565 -.15(ve s)-.25 H .265 -(hell upon receipt of a).15 F F3(SIGWINCH)144 600 Q/F4 9/Times-Roman@0 -SF(.)A F1(MAIL)108 612 Q F0 .422 -(If this parameter is set to a \214le or directory name and the)144 612 -R F3(MAILP)2.921 E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.671 G .421 -(riable is not set,).25 F F1(bash)2.921 E F0(in-)2.921 E -(forms the user of the arri)144 624 Q -.25(va)-.25 G 2.5(lo).25 G 2.5 -(fm)-2.5 G(ail in the speci\214ed \214le or Maildir)-2.5 E -(-format directory)-.2 E(.)-.65 E F1(MAILCHECK)108 636 Q F0 .098 -(Speci\214es ho)144 648 R 2.598(wo)-.25 G .098(ften \(in seconds\)) --2.598 F F1(bash)2.598 E F0 .098(checks for mail.)2.598 F .098(The def) -5.098 F .098(ault is 60 seconds.)-.1 F .099(When it is time)5.099 F .224 -(to check for mail, the shell does so before displaying the primary pro\ -mpt.)144 660 R .223(If this v)5.223 F .223(ariable is unset,)-.25 F -(or set to a v)144 672 Q(alue that is not a number greater than or equa\ -l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 684 Q --.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 696 S .49 -(olon-separated list of \214lenames to be check)-2.99 F .49 -(ed for mail.)-.1 F .49(The message to be printed when mail)5.49 F(arri) -144 708 Q -.15(ve)-.25 G 2.62(si).15 G 2.62(nap)-2.62 G .12(articular \ -\214le may be speci\214ed by separating the \214lename from the message\ - with a `?'.)-2.62 F(When used in the te)144 720 Q(xt of the message,) --.15 E F1($_)2.5 E F0 -.15(ex)2.5 G -(pands to the name of the current mail\214le.).15 E(Example:)5 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(17)190.395 E 0 Cg EP +.973(riable specifying a locale cate-).25 F(gory)144 720 Q(.)-.65 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(17)185.955 E 0 Cg EP %%Page: 18 18 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(MAILP)144 84 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A(ar/mail/bfox?"Y) +SF(LC_COLLA)108 84 Q(TE)-.95 E F0 .411(This v)144 96 R .412(ariable det\ +ermines the collation order used when sorting the results of pathname e) +-.25 F(xpansion,)-.15 E 1.465(and determines the beha)144 108 R 1.465 +(vior of range e)-.2 F 1.464(xpressions, equi)-.15 F -.25(va)-.25 G +1.464(lence classes, and collating sequences).25 F(within pathname e)144 +120 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 132 Q F0 +1.935(This v)144 144 R 1.936 +(ariable determines the interpretation of characters and the beha)-.25 F +1.936(vior of character classes)-.2 F(within pathname e)144 156 Q +(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 168 Q(GES)-.55 E +F0(This v)144 180 Q(ariable determines the locale used to translate dou\ +ble-quoted strings preceded by a)-.25 E F1($)2.5 E F0(.)A F1(LC_NUMERIC) +108 192 Q F0(This v)144 204 Q(ariable determines the locale cate)-.25 E +(gory used for number formatting.)-.15 E F1(LC_TIME)108 216 Q F0(This v) +144 228 Q(ariable determines the locale cate)-.25 E +(gory used for data and time formatting.)-.15 E F1(LINES)108 240 Q F0 +.055(Used by the)144 240 R F1(select)2.555 E F0 .054(compound command t\ +o determine the column length for printing selection lists.)2.555 F .264 +(Automatically set if the)144 252 R F1(checkwinsize)2.764 E F0 .264 +(option is enabled or in an interacti)2.764 F .565 -.15(ve s)-.25 H .265 +(hell upon receipt of a).15 F/F2 9/Times-Bold@0 SF(SIGWINCH)144 264 Q/F3 +9/Times-Roman@0 SF(.)A F1(MAIL)108 276 Q F0 .422 +(If this parameter is set to a \214le or directory name and the)144 276 +R F2(MAILP)2.921 E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.671 G .421 +(riable is not set,).25 F F1(bash)2.921 E F0(in-)2.921 E +(forms the user of the arri)144 288 Q -.25(va)-.25 G 2.5(lo).25 G 2.5 +(fm)-2.5 G(ail in the speci\214ed \214le or Maildir)-2.5 E +(-format directory)-.2 E(.)-.65 E F1(MAILCHECK)108 300 Q F0 .098 +(Speci\214es ho)144 312 R 2.598(wo)-.25 G .098(ften \(in seconds\)) +-2.598 F F1(bash)2.598 E F0 .098(checks for mail.)2.598 F .098(The def) +5.098 F .098(ault is 60 seconds.)-.1 F .099(When it is time)5.099 F .224 +(to check for mail, the shell does so before displaying the primary pro\ +mpt.)144 324 R .223(If this v)5.223 F .223(ariable is unset,)-.25 F +(or set to a v)144 336 Q(alue that is not a number greater than or equa\ +l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 348 Q +-.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 360 S .49 +(olon-separated list of \214lenames to be check)-2.99 F .49 +(ed for mail.)-.1 F .49(The message to be printed when mail)5.49 F(arri) +144 372 Q -.15(ve)-.25 G 2.62(si).15 G 2.62(nap)-2.62 G .12(articular \ +\214le may be speci\214ed by separating the \214lename from the message\ + with a `?'.)-2.62 F(When used in the te)144 384 Q(xt of the message,) +-.15 E F1($_)2.5 E F0 -.15(ex)2.5 G +(pands to the name of the current mail\214le.).15 E(Example:)5 E F1 +(MAILP)144 396 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A(ar/mail/bfox?"Y) -.25 E(ou ha)-1.1 E .3 -.15(ve m)-.2 H -(ail":~/shell\255mail?"$_ has mail!"\010).15 E F1(Bash)144 96 Q F0 .015 +(ail":~/shell\255mail?"$_ has mail!"\010).15 E F1(Bash)144 408 Q F0 .015 (can be con\214gured to supply a def)2.515 F .015(ault v)-.1 F .015 (alue for this v)-.25 F .015(ariable \(there is no v)-.25 F .015 (alue by def)-.25 F .015(ault\), b)-.1 F(ut)-.2 E(the location of the u\ -ser mail \214les that it uses is system dependent \(e.g., /v)144 108 Q -(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 120 Q F0 .39 -(If set to the v)144 132 R .39(alue 1,)-.25 F F1(bash)2.89 E F0 .389 +ser mail \214les that it uses is system dependent \(e.g., /v)144 420 Q +(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 432 Q F0 .39 +(If set to the v)144 444 R .39(alue 1,)-.25 F F1(bash)2.89 E F0 .389 (displays error messages generated by the)2.889 F F1(getopts)2.889 E F0 --.2(bu)2.889 G .389(iltin command \(see).2 F/F2 9/Times-Bold@0 SF .359 -(SHELL B)144 144 R(UIL)-.09 E .359(TIN COMMANDS)-.828 F F0(belo)2.609 E -(w\).)-.25 E F2(OPTERR)5.359 E F0 .36 -(is initialized to 1 each time the shell is in)2.609 F -.2(vo)-.4 G -.1 -(ke).2 G(d).1 E(or a shell script is e)144 156 Q -.15(xe)-.15 G(cuted.) -.15 E F1 -.74(PA)108 168 S(TH)-.21 E F0 .588 -(The search path for commands.)144 168 R .587 +-.2(bu)2.889 G .389(iltin command \(see).2 F F2 .359(SHELL B)144 456 R +(UIL)-.09 E .359(TIN COMMANDS)-.828 F F0(belo)2.609 E(w\).)-.25 E F2 +(OPTERR)5.359 E F0 .36(is initialized to 1 each time the shell is in) +2.609 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E(or a shell script is e)144 468 Q +-.15(xe)-.15 G(cuted.).15 E F1 -.74(PA)108 480 S(TH)-.21 E F0 .588 +(The search path for commands.)144 480 R .587 (It is a colon-separated list of directories in which the shell looks) -5.588 F .471(for commands \(see)144 180 R F2 .471(COMMAND EXECUTION) +5.588 F .471(for commands \(see)144 492 R F2 .471(COMMAND EXECUTION) 2.971 F F0(belo)2.722 E 2.972(w\). A)-.25 F .472 -(zero-length \(null\) directory name in the)2.972 F -.25(va)144 192 S +(zero-length \(null\) directory name in the)2.972 F -.25(va)144 504 S .536(lue of).25 F F2 -.666(PA)3.036 G(TH)-.189 E F0 .535 (indicates the current directory)2.786 F 5.535(.A)-.65 G .535 (null directory name may appear as tw)-2.5 F 3.035(oa)-.1 G(djacent) --3.035 E .867(colons, or as an initial or trailing colon.)144 204 R .868 +-3.035 E .867(colons, or as an initial or trailing colon.)144 516 R .868 (The def)5.868 F .868(ault path is system-dependent, and is set by the) --.1 F(administrator who installs)144 216 Q F1(bash)2.5 E F0 5(.A)C -(common v)-2.5 E(alue is)-.25 E/F3 10/Courier@0 SF +-.1 F(administrator who installs)144 528 Q F1(bash)2.5 E F0 5(.A)C +(common v)-2.5 E(alue is)-.25 E/F4 10/Courier@0 SF (/usr/local/bin:/usr/lo-)2.5 E(cal/sbin:/usr/bin:/usr/sbin:/bin:/sbin) -144 228 Q F0(.)A F1(POSIXL)108 240 Q(Y_CORRECT)-.92 E F0 .471(If this v) -144 252 R .471(ariable is in the en)-.25 F .471(vironment when)-.4 F F1 -(bash)2.971 E F0 .471(starts, the shell enters)2.971 F/F4 10 +144 540 Q F0(.)A F1(POSIXL)108 552 Q(Y_CORRECT)-.92 E F0 .471(If this v) +144 564 R .471(ariable is in the en)-.25 F .471(vironment when)-.4 F F1 +(bash)2.971 E F0 .471(starts, the shell enters)2.971 F/F5 10 /Times-Italic@0 SF .472(posix mode)2.972 F F0 .472(before reading)2.972 -F .011(the startup \214les, as if the)144 264 R F1(\255\255posix)2.511 E +F .011(the startup \214les, as if the)144 576 R F1(\255\255posix)2.511 E F0(in)2.511 E -.2(vo)-.4 G .011(cation option had been supplied.).2 F -.011(If it is set while the shell is)5.011 F(running,)144 276 Q F1(bash) -4.497 E F0(enables)4.497 E F4 1.997(posix mode)4.497 F F0 4.497(,a)C -4.497(si)-4.497 G 4.497(ft)-4.497 G 1.997(he command)-4.497 F F3 1.997 +.011(If it is set while the shell is)5.011 F(running,)144 588 Q F1(bash) +4.497 E F0(enables)4.497 E F5 1.997(posix mode)4.497 F F0 4.497(,a)C +4.497(si)-4.497 G 4.497(ft)-4.497 G 1.997(he command)-4.497 F F4 1.997 (set -o posix)4.497 F F0 1.998(had been e)4.497 F -.15(xe)-.15 G(cuted.) -.15 E(When the shell enters)144 288 Q F4(posix mode)2.5 E F0 2.5(,i)C +.15 E(When the shell enters)144 600 Q F5(posix mode)2.5 E F0 2.5(,i)C 2.5(ts)-2.5 G(ets this v)-2.5 E(ariable if it w)-.25 E -(as not already set.)-.1 E F1(PR)108 300 Q(OMPT_COMMAND)-.3 E F0 .155 -(If this v)144 312 R .155(ariable is set, and is an array)-.25 F 2.655 +(as not already set.)-.1 E F1(PR)108 612 Q(OMPT_COMMAND)-.3 E F0 .155 +(If this v)144 624 R .155(ariable is set, and is an array)-.25 F 2.655 (,t)-.65 G .155(he v)-2.655 F .155(alue of each set element is e)-.25 F -.15(xe)-.15 G .155(cuted as a command prior).15 F .407 -(to issuing each primary prompt.)144 324 R .407(If this is set b)5.407 F +(to issuing each primary prompt.)144 636 R .407(If this is set b)5.407 F .407(ut not an array v)-.2 F .407(ariable, its v)-.25 F .407 -(alue is used as a com-)-.25 F(mand to e)144 336 Q -.15(xe)-.15 G -(cute instead.).15 E F1(PR)108 348 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676 -(If set to a number greater than zero, the v)144 360 R .676 +(alue is used as a com-)-.25 F(mand to e)144 648 Q -.15(xe)-.15 G +(cute instead.).15 E F1(PR)108 660 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676 +(If set to a number greater than zero, the v)144 672 R .676 (alue is used as the number of trailing directory compo-)-.25 F .923 -(nents to retain when e)144 372 R .923(xpanding the)-.15 F F1(\\w)3.423 +(nents to retain when e)144 684 R .923(xpanding the)-.15 F F1(\\w)3.423 E F0(and)3.423 E F1(\\W)3.423 E F0 .923(prompt string escapes \(see) 3.423 F F2(PR)3.423 E(OMPTING)-.27 E F0(belo)3.173 E(w\).)-.25 E -(Characters remo)144 384 Q -.15(ve)-.15 G 2.5(da).15 G -(re replaced with an ellipsis.)-2.5 E F1(PS0)108 396 Q F0 1.174(The v) -144 396 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see) +(Characters remo)144 696 Q -.15(ve)-.15 G 2.5(da).15 G +(re replaced with an ellipsis.)-2.5 E F1(PS0)108 708 Q F0 1.174(The v) +144 708 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see) -.15 F F2(PR)3.674 E(OMPTING)-.27 E F0(belo)3.424 E 1.174 (w\) and displayed by interacti)-.25 F -.15(ve)-.25 G -(shells after reading a command and before the command is e)144 408 Q --.15(xe)-.15 G(cuted.).15 E F1(PS1)108 420 Q F0 .064(The v)144 420 R -.065(alue of this parameter is e)-.25 F .065(xpanded \(see)-.15 F F2(PR) -2.565 E(OMPTING)-.27 E F0(belo)2.315 E .065 -(w\) and used as the primary prompt)-.25 F 2.5(string. The)144 432 R -(def)2.5 E(ault v)-.1 E(alue is `)-.25 E(`)-.74 E F1(\\s\255\\v\\$)A F0 --.74('')2.5 G(.).74 E F1(PS2)108 444 Q F0 .118(The v)144 444 R .118 -(alue of this parameter is e)-.25 F .118(xpanded as with)-.15 F F2(PS1) -2.617 E F0 .117(and used as the secondary prompt string.)2.367 F(The) -5.117 E(def)144 456 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G -(.).74 E F1(PS3)108 468 Q F0 1.115(The v)144 468 R 1.115 -(alue of this parameter is used as the prompt for the)-.25 F F1(select) -3.615 E F0 1.116(command \(see)3.616 F F2 1.116(SHELL GRAM-)3.616 F(MAR) -144 480 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 492 Q F0 -.101(The v)144 492 R .101(alue of this parameter is e)-.25 F .101 -(xpanded as with)-.15 F F2(PS1)2.6 E F0 .1(and the v)2.35 F .1 -(alue is printed before each command)-.25 F F1(bash)144 504 Q F0 .334 -(displays during an e)2.834 F -.15(xe)-.15 G .335(cution trace.).15 F -.335(The \214rst character of the e)5.335 F .335(xpanded v)-.15 F .335 -(alue of)-.25 F F2(PS4)2.835 E F0 .335(is repli-)2.585 F -(cated multiple times, as necessary)144 516 Q 2.5(,t)-.65 G 2.5(oi)-2.5 -G(ndicate multiple le)-2.5 E -.15(ve)-.25 G(ls of indirection.).15 E -(The def)5 E(ault is `)-.1 E(`)-.74 E F1(+)A F0 -.74('')2.5 G(.).74 E F1 -(SHELL)108 528 Q F0 .543(This v)144 540 R .543(ariable e)-.25 F .543 -(xpands to the full pathname to the shell.)-.15 F .542 -(If it is not set when the shell starts,)5.543 F F1(bash)3.042 E F0 -(assigns to it the full pathname of the current user')144 552 Q 2.5(sl) --.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 564 Q(T)-.95 E F0 .826(The v) -144 576 R .826 -(alue of this parameter is used as a format string specifying ho)-.25 F -3.327(wt)-.25 G .827(he timing information for)-3.327 F .649 -(pipelines pre\214x)144 588 R .649(ed with the)-.15 F F1(time)3.149 E F0 -(reserv)3.149 E .649(ed w)-.15 F .648(ord should be displayed.)-.1 F -(The)5.648 E F1(%)3.148 E F0 .648(character introduces)3.148 F .711 -(an escape sequence that is e)144 600 R .711(xpanded to a time v)-.15 F -.712(alue or other information.)-.25 F .712(The escape sequences)5.712 F -(and their meanings are as follo)144 612 Q -(ws; the braces denote optional portions.)-.25 E F1(%%)144 630 Q F0 2.5 -(Al)194 630 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 642 Q F4(p)A F1 -(][l]R)A F0(The elapsed time in seconds.)194 642 Q F1(%[)144 654 Q F4(p) -A F1(][l]U)A F0(The number of CPU seconds spent in user mode.)194 654 Q -F1(%[)144 666 Q F4(p)A F1(][l]S)A F0 -(The number of CPU seconds spent in system mode.)194 666 Q F1(%P)144 678 -Q F0(The CPU percentage, computed as \(%U + %S\) / %R.)194 678 Q .87 -(The optional)144 694.8 R F4(p)3.37 E F0 .87(is a digit specifying the) -3.37 F F4(pr)3.37 E(ecision)-.37 E F0 3.37(,t)C .87 -(he number of fractional digits after a decimal)-3.37 F 2.525(point. A) -144 706.8 R -.25(va)2.525 G .025 -(lue of 0 causes no decimal point or fraction to be output.).25 F .026 -(At most three places after the)5.025 F .538 -(decimal point may be speci\214ed; v)144 718.8 R .538(alues of)-.25 F F4 -(p)3.038 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.537 E -F4(p)3.037 E F0 .537(is not speci\214ed,)3.037 F(the v)144 730.8 Q -(alue 3 is used.)-.25 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E -(18)190.395 E 0 Cg EP +(shells after reading a command and before the command is e)144 720 Q +-.15(xe)-.15 G(cuted.).15 E(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(18)185.955 E 0 Cg EP %%Page: 19 19 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .667(The optional) -144 84 R/F1 10/Times-Bold@0 SF(l)3.167 E F0 .668 -(speci\214es a longer format, including minutes, of the form)3.168 F/F2 -10/Times-Italic@0 SF(MM)3.168 E F0(m)A F2(SS)A F0(.)A F2(FF)A F0 3.168 -(s. The)B -.25(va)3.168 G(lue).25 E(of)144 96 Q F2(p)2.5 E F0 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(PS1)108 84 Q F0 .064(The v)144 84 R .065(alue of this parameter is e) +-.25 F .065(xpanded \(see)-.15 F/F2 9/Times-Bold@0 SF(PR)2.565 E +(OMPTING)-.27 E F0(belo)2.315 E .065(w\) and used as the primary prompt) +-.25 F 2.5(string. The)144 96 R(def)2.5 E(ault v)-.1 E(alue is `)-.25 E +(`)-.74 E F1(\\s\255\\v\\$)A F0 -.74('')2.5 G(.).74 E F1(PS2)108 108 Q +F0 .118(The v)144 108 R .118(alue of this parameter is e)-.25 F .118 +(xpanded as with)-.15 F F2(PS1)2.617 E F0 .117 +(and used as the secondary prompt string.)2.367 F(The)5.117 E(def)144 +120 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G(.).74 E F1(PS3) +108 132 Q F0 1.115(The v)144 132 R 1.115 +(alue of this parameter is used as the prompt for the)-.25 F F1(select) +3.615 E F0 1.116(command \(see)3.616 F F2 1.116(SHELL GRAM-)3.616 F(MAR) +144 144 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 156 Q F0 +.101(The v)144 156 R .101(alue of this parameter is e)-.25 F .101 +(xpanded as with)-.15 F F2(PS1)2.6 E F0 .1(and the v)2.35 F .1 +(alue is printed before each command)-.25 F F1(bash)144 168 Q F0 .334 +(displays during an e)2.834 F -.15(xe)-.15 G .335(cution trace.).15 F +.335(The \214rst character of the e)5.335 F .335(xpanded v)-.15 F .335 +(alue of)-.25 F F2(PS4)2.835 E F0 .335(is repli-)2.585 F +(cated multiple times, as necessary)144 180 Q 2.5(,t)-.65 G 2.5(oi)-2.5 +G(ndicate multiple le)-2.5 E -.15(ve)-.25 G(ls of indirection.).15 E +(The def)5 E(ault is `)-.1 E(`)-.74 E F1(+)A F0 -.74('')2.5 G(.).74 E F1 +(SHELL)108 192 Q F0 .543(This v)144 204 R .543(ariable e)-.25 F .543 +(xpands to the full pathname to the shell.)-.15 F .542 +(If it is not set when the shell starts,)5.543 F F1(bash)3.042 E F0 +(assigns to it the full pathname of the current user')144 216 Q 2.5(sl) +-.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 228 Q(T)-.95 E F0 .826(The v) +144 240 R .826 +(alue of this parameter is used as a format string specifying ho)-.25 F +3.327(wt)-.25 G .827(he timing information for)-3.327 F .649 +(pipelines pre\214x)144 252 R .649(ed with the)-.15 F F1(time)3.149 E F0 +(reserv)3.149 E .649(ed w)-.15 F .648(ord should be displayed.)-.1 F +(The)5.648 E F1(%)3.148 E F0 .648(character introduces)3.148 F .711 +(an escape sequence that is e)144 264 R .711(xpanded to a time v)-.15 F +.712(alue or other information.)-.25 F .712(The escape sequences)5.712 F +(and their meanings are as follo)144 276 Q +(ws; the braces denote optional portions.)-.25 E F1(%%)144 294 Q F0 2.5 +(Al)194 294 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 306 Q/F3 10 +/Times-Italic@0 SF(p)A F1(][l]R)A F0(The elapsed time in seconds.)194 +306 Q F1(%[)144 318 Q F3(p)A F1(][l]U)A F0 +(The number of CPU seconds spent in user mode.)194 318 Q F1(%[)144 330 Q +F3(p)A F1(][l]S)A F0(The number of CPU seconds spent in system mode.)194 +330 Q F1(%P)144 342 Q F0 +(The CPU percentage, computed as \(%U + %S\) / %R.)194 342 Q .87 +(The optional)144 358.8 R F3(p)3.37 E F0 .87(is a digit specifying the) +3.37 F F3(pr)3.37 E(ecision)-.37 E F0 3.37(,t)C .87 +(he number of fractional digits after a decimal)-3.37 F 2.525(point. A) +144 370.8 R -.25(va)2.525 G .025 +(lue of 0 causes no decimal point or fraction to be output.).25 F .026 +(At most three places after the)5.025 F .538 +(decimal point may be speci\214ed; v)144 382.8 R .538(alues of)-.25 F F3 +(p)3.038 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.537 E +F3(p)3.037 E F0 .537(is not speci\214ed,)3.037 F(the v)144 394.8 Q +(alue 3 is used.)-.25 E .667(The optional)144 411.6 R F1(l)3.167 E F0 +.668(speci\214es a longer format, including minutes, of the form)3.168 F +F3(MM)3.168 E F0(m)A F3(SS)A F0(.)A F3(FF)A F0 3.168(s. The)B -.25(va) +3.168 G(lue).25 E(of)144 423.6 Q F3(p)2.5 E F0 (determines whether or not the fraction is included.)2.5 E 13.365 -(If this v)144 112.8 R 13.365(ariable is not set,)-.25 F F1(bash)15.865 +(If this v)144 440.4 R 13.365(ariable is not set,)-.25 F F1(bash)15.865 E F0 13.364(acts as if it had the v)15.865 F(alue)-.25 E F1($\010\\nr) -144 124.8 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F0 7.113 +144 452.4 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F0 7.113 (.I)C 4.613(ft)-7.113 G 2.113(he v)-4.613 F 2.113 (alue is null, no timing information is dis-)-.25 F 2.5(played. A)144 -136.8 R(trailing ne)2.5 E +464.4 R(trailing ne)2.5 E (wline is added when the format string is displayed.)-.25 E F1(TMOUT)108 -148.8 Q F0 .941(If set to a v)144 160.8 R .941(alue greater than zero,) --.25 F/F3 9/Times-Bold@0 SF(TMOUT)3.441 E F0 .941(is treated as the def) -3.191 F .941(ault timeout for the)-.1 F F1 -.18(re)3.441 G(ad).18 E F0 --.2(bu)3.441 G(iltin.).2 E(The)144 172.8 Q F1(select)2.81 E F0 .31 +476.4 Q F0 .941(If set to a v)144 488.4 R .941(alue greater than zero,) +-.25 F F2(TMOUT)3.441 E F0 .941(is treated as the def)3.191 F .941 +(ault timeout for the)-.1 F F1 -.18(re)3.441 G(ad).18 E F0 -.2(bu)3.441 +G(iltin.).2 E(The)144 500.4 Q F1(select)2.81 E F0 .31 (command terminates if input does not arri)2.81 F .611 -.15(ve a)-.25 H -(fter).15 E F3(TMOUT)2.811 E F0 .311(seconds when input is com-)2.561 F -.886(ing from a terminal.)144 184.8 R .886(In an interacti)5.886 F 1.185 +(fter).15 E F2(TMOUT)2.811 E F0 .311(seconds when input is com-)2.561 F +.886(ing from a terminal.)144 512.4 R .886(In an interacti)5.886 F 1.185 -.15(ve s)-.25 H .885(hell, the v).15 F .885 -(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 196.8 +(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 524.4 S 1.05(it for a line of input after issuing the primary prompt.).1 F F1 (Bash)6.05 E F0 1.05(terminates after w)3.55 F 1.05(aiting for that)-.1 -F(number of seconds if a complete line of input does not arri)144 208.8 -Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 220.8 Q F0 .391(If set,)144 232.8 +F(number of seconds if a complete line of input does not arri)144 536.4 +Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 548.4 Q F0 .391(If set,)144 560.4 R F1(bash)2.891 E F0 .391(uses its v)2.891 F .391 (alue as the name of a directory in which)-.25 F F1(bash)2.89 E F0 .39 -(creates temporary \214les for the)2.89 F(shell')144 244.8 Q 2.5(su)-.55 -G(se.)-2.5 E F1(auto_r)108 256.8 Q(esume)-.18 E F0 .53(This v)144 268.8 +(creates temporary \214les for the)2.89 F(shell')144 572.4 Q 2.5(su)-.55 +G(se.)-2.5 E F1(auto_r)108 584.4 Q(esume)-.18 E F0 .53(This v)144 596.4 R .53(ariable controls ho)-.25 F 3.03(wt)-.25 G .531 (he shell interacts with the user and job control.)-3.03 F .531 -(If this v)5.531 F .531(ariable is set,)-.25 F .539(single w)144 280.8 R +(If this v)5.531 F .531(ariable is set,)-.25 F .539(single w)144 608.4 R .538(ord simple commands without redirections are treated as candidates\ - for resumption of an)-.1 F -.15(ex)144 292.8 S .366(isting stopped job) + for resumption of an)-.1 F -.15(ex)144 620.4 S .366(isting stopped job) .15 F 5.366(.T)-.4 G .366(here is no ambiguity allo)-5.366 F .366 (wed; if there is more than one job be)-.25 F .367(ginning with)-.15 F 1.125(the string typed, the job most recently accessed is selected.)144 -304.8 R(The)6.125 E F2(name)3.985 E F0 1.124(of a stopped job, in this) -3.805 F(conte)144 316.8 Q 1.132 +632.4 R(The)6.125 E F3(name)3.985 E F0 1.124(of a stopped job, in this) +3.805 F(conte)144 644.4 Q 1.132 (xt, is the command line used to start it.)-.15 F 1.133(If set to the v) -6.133 F(alue)-.25 E F2 -.2(ex)3.633 G(act).2 E F0 3.633(,t).68 G 1.133 +6.133 F(alue)-.25 E F3 -.2(ex)3.633 G(act).2 E F0 3.633(,t).68 G 1.133 (he string supplied must)-3.633 F .606 -(match the name of a stopped job e)144 328.8 R .606(xactly; if set to) --.15 F F2(substring)3.445 E F0 3.105(,t).22 G .605 +(match the name of a stopped job e)144 656.4 R .606(xactly; if set to) +-.15 F F3(substring)3.445 E F0 3.105(,t).22 G .605 (he string supplied needs to match a)-3.105 F .884 -(substring of the name of a stopped job)144 340.8 R 5.884(.T)-.4 G(he) --5.884 E F2(substring)3.724 E F0 -.25(va)3.604 G .885(lue pro).25 F .885 -(vides functionality analogous to)-.15 F(the)144 352.8 Q F1(%?)3.334 E -F0 .834(job identi\214er \(see)5.834 F F3 .834(JOB CONTR)3.334 F(OL)-.27 +(substring of the name of a stopped job)144 668.4 R 5.884(.T)-.4 G(he) +-5.884 E F3(substring)3.724 E F0 -.25(va)3.604 G .885(lue pro).25 F .885 +(vides functionality analogous to)-.15 F(the)144 680.4 Q F1(%?)3.334 E +F0 .834(job identi\214er \(see)5.834 F F2 .834(JOB CONTR)3.334 F(OL)-.27 E F0(belo)3.084 E 3.334(w\). If)-.25 F .834(set to an)3.334 F 3.334(yo) -.15 G .834(ther v)-3.334 F .833(alue, the supplied string)-.25 F .315 -(must be a pre\214x of a stopped job')144 364.8 R 2.816(sn)-.55 G .316 +(must be a pre\214x of a stopped job')144 692.4 R 2.816(sn)-.55 G .316 (ame; this pro)-2.816 F .316(vides functionality analogous to the)-.15 F -F1(%)2.816 E F2(string)A F0(job)2.816 E(identi\214er)144 376.8 Q(.)-.55 -E F1(histchars)108 388.8 Q F0 .546(The tw)144 400.8 R 3.046(oo)-.1 G -3.046(rt)-3.046 G .546(hree characters which control history e)-3.046 F -.545(xpansion and tok)-.15 F .545(enization \(see)-.1 F F3(HIST)3.045 E -(OR)-.162 E 2.795(YE)-.315 G(X-)-2.795 E -.666(PA)144 412.8 S(NSION).666 -E F0(belo)2.987 E 3.237(w\). The)-.25 F .737(\214rst character is the) -3.237 F F2 .737(history e)3.237 F(xpansion)-.2 E F0(character)3.238 E -3.238(,t)-.4 G .738(he character which sig-)-3.238 F .761 -(nals the start of a history e)144 424.8 R .761(xpansion, normally `) --.15 F F1(!)A F0 3.261('. The)B .76(second character is the)3.261 F F2 -(quic)3.26 E 3.26(ks)-.2 G(ubstitution)-3.26 E F0(character)144 436.8 Q -3.476(,w)-.4 G .977(hich is used as shorthand for re-running the pre) --3.476 F .977(vious command entered, substituting)-.25 F .131 -(one string for another in the command.)144 448.8 R .131(The def)5.131 F -.131(ault is `)-.1 F F1(^)A F0 2.63('. The)B .13 -(optional third character is the char)2.63 F(-)-.2 E .276(acter which i\ -ndicates that the remainder of the line is a comment when found as the \ -\214rst character)144 460.8 R .46(of a w)144 472.8 R .46 -(ord, normally `)-.1 F F1(#)A F0 2.959('. The)B .459 -(history comment character causes history substitution to be skipped) -2.959 F .466(for the remaining w)144 484.8 R .466(ords on the line.)-.1 -F .467(It does not necessarily cause the shell parser to treat the rest) -5.467 F(of the line as a comment.)144 496.8 Q F1(Arrays)87 513.6 Q(Bash) -108 525.6 Q F0(pro)3.391 E .891(vides one-dimensional inde)-.15 F -.15 -(xe)-.15 G 3.391(da).15 G .891(nd associati)-3.391 F 1.191 -.15(ve a) --.25 H .891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .89 -(ariable may be used as an)-3.641 F(inde)108 537.6 Q -.15(xe)-.15 G -2.573(da).15 G .073(rray; the)-2.573 F F1(declar)2.573 E(e)-.18 E F0 -.2 -(bu)2.573 G .073(iltin will e).2 F .073(xplicitly declare an array)-.15 -F 5.073(.T)-.65 G .074(here is no maximum limit on the size of)-5.073 F -.329(an array)108 549.6 R 2.829(,n)-.65 G .329(or an)-2.829 F 2.829(yr) --.15 G .329(equirement that members be inde)-2.829 F -.15(xe)-.15 G -2.829(do).15 G 2.829(ra)-2.829 G .328(ssigned contiguously)-2.829 F -5.328(.I)-.65 G(nde)-5.328 E -.15(xe)-.15 G 2.828(da).15 G .328 -(rrays are refer)-2.828 F(-)-.2 E 1.595(enced using inte)108 561.6 R -1.595(gers \(including arithmetic e)-.15 F 1.595 -(xpressions\) and are zero-based; associati)-.15 F 1.895 -.15(ve a)-.25 -H 1.595(rrays are refer).15 F(-)-.2 E(enced using arbitrary strings.)108 -573.6 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G -(rray indices must be non-ne)-2.5 E -.05(ga)-.15 G(ti).05 E .3 -.15 -(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.463(An inde)108 590.4 R -.15(xe) --.15 G 4.963(da).15 G 2.463(rray is created automatically if an)-4.963 F -4.963(yv)-.15 G 2.462(ariable is assigned to using the syntax)-5.213 F -F2(name)4.962 E F0([)A F2(sub-)A(script)108 602.4 Q F0(]=)A F2(value)A -F0 5.506(.T)C(he)-5.506 E F2(subscript)3.346 E F0 .507 -(is treated as an arithmetic e)3.687 F .507(xpression that must e)-.15 F --.25(va)-.25 G .507(luate to a number).25 F 5.507(.T)-.55 G 3.007(oe) --6.307 G(x-)-3.157 E 1.193(plicitly declare an inde)108 614.4 R -.15(xe) --.15 G 3.693(da).15 G(rray)-3.693 E 3.693(,u)-.65 G(se)-3.693 E F1 -(declar)3.693 E 3.693<65ad>-.18 G(a)-3.693 E F2(name)3.693 E F0(\(see) -3.692 E F3 1.192(SHELL B)3.692 F(UIL)-.09 E 1.192(TIN COMMANDS)-.828 F -F0(belo)3.442 E(w\).)-.25 E F1(de-)6.192 E(clar)108 626.4 Q 2.5<65ad> --.18 G(a)-2.5 E F2(name)2.5 E F1([)A F2(subscript)A F1(])A F0 -(is also accepted; the)2.5 E F2(subscript)2.5 E F0(is ignored.)2.5 E -(Associati)108 643.2 Q .3 -.15(ve a)-.25 H(rrays are created using).15 E -F1(declar)2.5 E 2.5<65ad>-.18 G(A)-2.5 E F2(name)2.5 E F0(.)A(Attrib)108 -660 Q .94(utes may be speci\214ed for an array v)-.2 F .941 -(ariable using the)-.25 F F1(declar)3.441 E(e)-.18 E F0(and)3.441 E F1 --.18(re)3.441 G(adonly).18 E F0 -.2(bu)3.441 G 3.441(iltins. Each).2 F -(attrib)3.441 E(ute)-.2 E(applies to all members of an array)108 672 Q -(.)-.65 E 1.647 -(Arrays are assigned to using compound assignments of the form)108 688.8 -R F2(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F2(1)A F0 1.647 -(... v)4.147 F(alue)-.25 E F2(n)A F1(\))A F0 4.147(,w)C 1.647(here each) --4.147 F F2(value)108 700.8 Q F0 .211(may be of the form [)2.711 F F2 -(subscript)A F0(]=)A F2(string)A F0 5.211(.I)C(nde)-5.211 E -.15(xe)-.15 -G 2.711(da).15 G .212(rray assignments do not require an)-2.711 F .212 -(ything b)-.15 F(ut)-.2 E F2(string)2.712 E F0(.)A(Each)108 712.8 Q F2 -(value)2.53 E F0 .029(in the list is e)2.529 F .029 -(xpanded using all the shell e)-.15 F .029(xpansions described belo)-.15 -F 2.529(wu)-.25 G(nder)-2.529 E F3(EXP)2.529 E(ANSION)-.666 E/F4 9 -/Times-Roman@0 SF(.)A F0(When)4.529 E .995(assigning to inde)108 724.8 R --.15(xe)-.15 G 3.495(da).15 G .995(rrays, if the optional brack)-3.495 F -.996(ets and subscript are supplied, that inde)-.1 F 3.496(xi)-.15 G -3.496(sa)-3.496 G .996(ssigned to;)-3.496 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(19)190.395 E 0 Cg EP +F1(%)2.816 E F3(string)A F0(job)2.816 E(identi\214er)144 704.4 Q(.)-.55 +E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(19)185.955 E 0 Cg EP %%Page: 20 20 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .417 -(otherwise the inde)108 84 R 2.917(xo)-.15 G 2.917(ft)-2.917 G .417 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(histchars)108 84 Q F0 .546(The tw)144 96 R 3.046(oo)-.1 G 3.046(rt) +-3.046 G .546(hree characters which control history e)-3.046 F .545 +(xpansion and tok)-.15 F .545(enization \(see)-.1 F/F2 9/Times-Bold@0 SF +(HIST)3.045 E(OR)-.162 E 2.795(YE)-.315 G(X-)-2.795 E -.666(PA)144 108 S +(NSION).666 E F0(belo)2.987 E 3.237(w\). The)-.25 F .737 +(\214rst character is the)3.237 F/F3 10/Times-Italic@0 SF .737 +(history e)3.237 F(xpansion)-.2 E F0(character)3.238 E 3.238(,t)-.4 G +.738(he character which sig-)-3.238 F .761 +(nals the start of a history e)144 120 R .761(xpansion, normally `)-.15 +F F1(!)A F0 3.261('. The)B .76(second character is the)3.261 F F3(quic) +3.26 E 3.26(ks)-.2 G(ubstitution)-3.26 E F0(character)144 132 Q 3.476 +(,w)-.4 G .977(hich is used as shorthand for re-running the pre)-3.476 F +.977(vious command entered, substituting)-.25 F .131 +(one string for another in the command.)144 144 R .131(The def)5.131 F +.131(ault is `)-.1 F F1(^)A F0 2.63('. The)B .13 +(optional third character is the char)2.63 F(-)-.2 E .276(acter which i\ +ndicates that the remainder of the line is a comment when found as the \ +\214rst character)144 156 R .46(of a w)144 168 R .46(ord, normally `)-.1 +F F1(#)A F0 2.959('. The)B .459 +(history comment character causes history substitution to be skipped) +2.959 F .466(for the remaining w)144 180 R .466(ords on the line.)-.1 F +.467(It does not necessarily cause the shell parser to treat the rest) +5.467 F(of the line as a comment.)144 192 Q F1(Arrays)87 208.8 Q(Bash) +108 220.8 Q F0(pro)3.391 E .891(vides one-dimensional inde)-.15 F -.15 +(xe)-.15 G 3.391(da).15 G .891(nd associati)-3.391 F 1.191 -.15(ve a) +-.25 H .891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .89 +(ariable may be used as an)-3.641 F(inde)108 232.8 Q -.15(xe)-.15 G +2.573(da).15 G .073(rray; the)-2.573 F F1(declar)2.573 E(e)-.18 E F0 -.2 +(bu)2.573 G .073(iltin will e).2 F .073(xplicitly declare an array)-.15 +F 5.073(.T)-.65 G .074(here is no maximum limit on the size of)-5.073 F +.329(an array)108 244.8 R 2.829(,n)-.65 G .329(or an)-2.829 F 2.829(yr) +-.15 G .329(equirement that members be inde)-2.829 F -.15(xe)-.15 G +2.829(do).15 G 2.829(ra)-2.829 G .328(ssigned contiguously)-2.829 F +5.328(.I)-.65 G(nde)-5.328 E -.15(xe)-.15 G 2.828(da).15 G .328 +(rrays are refer)-2.828 F(-)-.2 E 1.595(enced using inte)108 256.8 R +1.595(gers \(including arithmetic e)-.15 F 1.595 +(xpressions\) and are zero-based; associati)-.15 F 1.895 -.15(ve a)-.25 +H 1.595(rrays are refer).15 F(-)-.2 E(enced using arbitrary strings.)108 +268.8 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G +(rray indices must be non-ne)-2.5 E -.05(ga)-.15 G(ti).05 E .3 -.15 +(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.463(An inde)108 285.6 R -.15(xe) +-.15 G 4.963(da).15 G 2.463(rray is created automatically if an)-4.963 F +4.963(yv)-.15 G 2.462(ariable is assigned to using the syntax)-5.213 F +F3(name)4.962 E F0([)A F3(sub-)A(script)108 297.6 Q F0(]=)A F3(value)A +F0 5.506(.T)C(he)-5.506 E F3(subscript)3.346 E F0 .507 +(is treated as an arithmetic e)3.687 F .507(xpression that must e)-.15 F +-.25(va)-.25 G .507(luate to a number).25 F 5.507(.T)-.55 G 3.007(oe) +-6.307 G(x-)-3.157 E 1.193(plicitly declare an inde)108 309.6 R -.15(xe) +-.15 G 3.693(da).15 G(rray)-3.693 E 3.693(,u)-.65 G(se)-3.693 E F1 +(declar)3.693 E 3.693<65ad>-.18 G(a)-3.693 E F3(name)3.693 E F0(\(see) +3.692 E F2 1.192(SHELL B)3.692 F(UIL)-.09 E 1.192(TIN COMMANDS)-.828 F +F0(belo)3.442 E(w\).)-.25 E F1(de-)6.192 E(clar)108 321.6 Q 2.5<65ad> +-.18 G(a)-2.5 E F3(name)2.5 E F1([)A F3(subscript)A F1(])A F0 +(is also accepted; the)2.5 E F3(subscript)2.5 E F0(is ignored.)2.5 E +(Associati)108 338.4 Q .3 -.15(ve a)-.25 H(rrays are created using).15 E +F1(declar)2.5 E 2.5<65ad>-.18 G(A)-2.5 E F3(name)2.5 E F0(.)A(Attrib)108 +355.2 Q .94(utes may be speci\214ed for an array v)-.2 F .941 +(ariable using the)-.25 F F1(declar)3.441 E(e)-.18 E F0(and)3.441 E F1 +-.18(re)3.441 G(adonly).18 E F0 -.2(bu)3.441 G 3.441(iltins. Each).2 F +(attrib)3.441 E(ute)-.2 E(applies to all members of an array)108 367.2 Q +(.)-.65 E 1.647 +(Arrays are assigned to using compound assignments of the form)108 384 R +F3(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F3(1)A F0 1.647 +(... v)4.147 F(alue)-.25 E F3(n)A F1(\))A F0 4.147(,w)C 1.647(here each) +-4.147 F F3(value)108 396 Q F0 .211(may be of the form [)2.711 F F3 +(subscript)A F0(]=)A F3(string)A F0 5.211(.I)C(nde)-5.211 E -.15(xe)-.15 +G 2.711(da).15 G .212(rray assignments do not require an)-2.711 F .212 +(ything b)-.15 F(ut)-.2 E F3(string)2.712 E F0(.)A(Each)108 408 Q F3 +(value)2.53 E F0 .029(in the list is e)2.529 F .029 +(xpanded using all the shell e)-.15 F .029(xpansions described belo)-.15 +F 2.529(wu)-.25 G(nder)-2.529 E F2(EXP)2.529 E(ANSION)-.666 E/F4 9 +/Times-Roman@0 SF(.)A F0(When)4.529 E .995(assigning to inde)108 420 R +-.15(xe)-.15 G 3.495(da).15 G .995(rrays, if the optional brack)-3.495 F +.996(ets and subscript are supplied, that inde)-.1 F 3.496(xi)-.15 G +3.496(sa)-3.496 G .996(ssigned to;)-3.496 F .417(otherwise the inde)108 +432 R 2.917(xo)-.15 G 2.917(ft)-2.917 G .417 (he element assigned is the last inde)-2.917 F 2.917(xa)-.15 G .416 (ssigned to by the statement plus one.)-2.917 F(Inde)5.416 E(x-)-.15 E -(ing starts at zero.)108 96 Q 1.288(When assigning to an associati)108 -112.8 R 1.588 -.15(ve a)-.25 H(rray).15 E 3.788(,t)-.65 G 1.288(he w) +(ing starts at zero.)108 444 Q 1.288(When assigning to an associati)108 +460.8 R 1.588 -.15(ve a)-.25 H(rray).15 E 3.788(,t)-.65 G 1.288(he w) -3.788 F 1.288(ords in a compound assignment may be either assignment) -.1 F .608 (statements, for which the subscript is required, or a list of w)108 -124.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2 -E 1.956(nating k)108 136.8 R -.15(ey)-.1 G 4.456(sa).15 G 1.956(nd v) --4.456 F(alues:)-.25 E/F1 10/Times-Italic@0 SF(name)4.456 E F0(=)A/F2 10 -/Times-Bold@0 SF(\()A F1 -.1(ke)4.456 G 1.957(y1 value1 k)-.2 F -.3(ey) --.1 G 4.457(2v).3 G(alue2)-4.457 E F0(...)4.457 E F2(\))A F0 6.957(.T)C -1.957(hese are treated identically to)-6.957 F F1(name)4.457 E F0(=)A F2 -(\()A F0([)108 148.8 Q F1 -.1(ke)C(y1)-.2 E F0(]=)A F1(value1)A F0([) -3.133 E F1 -.1(ke)C(y2)-.2 E F0(]=)A F1(value2)A F0(...)3.133 E F2(\))A -F0 5.633(.T)C .633(he \214rst w)-5.633 F .633 -(ord in the list determines ho)-.1 F 3.132(wt)-.25 G .632 -(he remaining w)-3.132 F .632(ords are inter)-.1 F(-)-.2 E .153 -(preted; all assignments in a list must be of the same type.)108 160.8 R +472.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2 +E 1.956(nating k)108 484.8 R -.15(ey)-.1 G 4.456(sa).15 G 1.956(nd v) +-4.456 F(alues:)-.25 E F3(name)4.456 E F0(=)A F1(\()A F3 -.1(ke)4.456 G +1.957(y1 value1 k)-.2 F -.3(ey)-.1 G 4.457(2v).3 G(alue2)-4.457 E F0 +(...)4.457 E F1(\))A F0 6.957(.T)C 1.957 +(hese are treated identically to)-6.957 F F3(name)4.457 E F0(=)A F1(\()A +F0([)108 496.8 Q F3 -.1(ke)C(y1)-.2 E F0(]=)A F3(value1)A F0([)3.133 E +F3 -.1(ke)C(y2)-.2 E F0(]=)A F3(value2)A F0(...)3.133 E F1(\))A F0 5.633 +(.T)C .633(he \214rst w)-5.633 F .633(ord in the list determines ho)-.1 +F 3.132(wt)-.25 G .632(he remaining w)-3.132 F .632(ords are inter)-.1 F +(-)-.2 E .153 +(preted; all assignments in a list must be of the same type.)108 508.8 R .154(When using k)5.154 F -.15(ey)-.1 G(/v).15 E .154(alue pairs, the k) -.25 F -.15(ey)-.1 G 2.654(sm).15 G .154(ay not be)-2.654 F -(missing or empty; a \214nal missing v)108 172.8 Q(alue is treated lik) +(missing or empty; a \214nal missing v)108 520.8 Q(alue is treated lik) -.25 E 2.5(et)-.1 G(he empty string.)-2.5 E .24 -(This syntax is also accepted by the)108 189.6 R F2(declar)2.74 E(e)-.18 +(This syntax is also accepted by the)108 537.6 R F1(declar)2.74 E(e)-.18 E F0 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .239 -(vidual array elements may be assigned to using the)-.25 F F1(name)108 -201.6 Q F0([)A F1(subscript)A F0(]=)A F1(value)A F0 1.917 +(vidual array elements may be assigned to using the)-.25 F F3(name)108 +549.6 Q F0([)A F3(subscript)A F0(]=)A F3(value)A F0 1.917 (syntax introduced abo)4.416 F -.15(ve)-.15 G 6.917(.W).15 G 1.917 (hen assigning to an inde)-6.917 F -.15(xe)-.15 G 4.417(da).15 G(rray) --4.417 E 4.417(,i)-.65 G(f)-4.417 E F1(name)4.777 E F0 1.917(is sub-) -4.597 F .116(scripted by a ne)108 213.6 R -.05(ga)-.15 G(ti).05 E .416 +-4.417 E 4.417(,i)-.65 G(f)-4.417 E F3(name)4.777 E F0 1.917(is sub-) +4.597 F .116(scripted by a ne)108 561.6 R -.05(ga)-.15 G(ti).05 E .416 -.15(ve n)-.25 H(umber).15 E 2.616(,t)-.4 G .115 (hat number is interpreted as relati)-2.616 F .415 -.15(ve t)-.25 H 2.615(oo).15 G .115(ne greater than the maximum inde)-2.615 F(x)-.15 E -(of)108 225.6 Q F1(name)2.676 E F0 2.676(,s)C 2.676(on)-2.676 G -2.25 +(of)108 573.6 Q F3(name)2.676 E F0 2.676(,s)C 2.676(on)-2.676 G -2.25 -.15(eg a)-2.676 H(ti).15 E .476 -.15(ve i)-.25 H .177 (ndices count back from the end of the array).15 F 2.677(,a)-.65 G .177 (nd an inde)-2.677 F 2.677(xo)-.15 G 2.677<66ad>-2.677 G 2.677(1r)-2.677 -G .177(eferences the last el-)-2.677 F(ement.)108 237.6 Q(An)108 254.4 Q +G .177(eferences the last el-)-2.677 F(ement.)108 585.6 Q(An)108 602.4 Q 3.576(ye)-.15 G 1.076(lement of an array may be referenced using ${) --3.576 F F1(name)A F0([)A F1(subscript)A F0 3.575(]}. The)B 1.075 +-3.576 F F3(name)A F0([)A F3(subscript)A F0 3.575(]}. The)B 1.075 (braces are required to a)3.575 F -.2(vo)-.2 G(id).2 E 1.541 -(con\215icts with pathname e)108 266.4 R 4.041(xpansion. If)-.15 F F1 -(subscript)4.041 E F0(is)4.041 E F2(@)4.041 E F0(or)4.041 E F2(*)4.041 E +(con\215icts with pathname e)108 614.4 R 4.041(xpansion. If)-.15 F F3 +(subscript)4.041 E F0(is)4.041 E F1(@)4.041 E F0(or)4.041 E F1(*)4.041 E F0 4.041(,t)C 1.541(he w)-4.041 F 1.541(ord e)-.1 F 1.541 -(xpands to all members of)-.15 F F1(name)4.042 E F0(.)A 1.057 -(These subscripts dif)108 278.4 R 1.057(fer only when the w)-.25 F 1.057 +(xpands to all members of)-.15 F F3(name)4.042 E F0(.)A 1.057 +(These subscripts dif)108 626.4 R 1.057(fer only when the w)-.25 F 1.057 (ord appears within double quotes.)-.1 F 1.056(If the w)6.056 F 1.056 -(ord is double-quoted,)-.1 F(${)108 290.4 Q F1(name)A F0 .52([*]} e)B +(ord is double-quoted,)-.1 F(${)108 638.4 Q F3(name)A F0 .52([*]} e)B .52(xpands to a single w)-.15 F .52(ord with the v)-.1 F .521 (alue of each array member separated by the \214rst character)-.25 F -1.375(of the)108 302.4 R/F3 9/Times-Bold@0 SF(IFS)3.875 E F0 1.375 -(special v)3.625 F 1.375(ariable, and ${)-.25 F F1(name)A F0 1.375 -([@]} e)B 1.375(xpands each element of)-.15 F F1(name)3.875 E F0 1.374 -(to a separate w)3.875 F 3.874(ord. When)-.1 F 2.027 -(there are no array members, ${)108 314.4 R F1(name)A F0 2.028([@]} e)B -2.028(xpands to nothing.)-.15 F 2.028(If the double-quoted e)7.028 F -2.028(xpansion occurs)-.15 F .759(within a w)108 326.4 R .759 -(ord, the e)-.1 F .759 +1.375(of the)108 650.4 R F2(IFS)3.875 E F0 1.375(special v)3.625 F 1.375 +(ariable, and ${)-.25 F F3(name)A F0 1.375([@]} e)B 1.375 +(xpands each element of)-.15 F F3(name)3.875 E F0 1.374(to a separate w) +3.875 F 3.874(ord. When)-.1 F 2.027(there are no array members, ${)108 +662.4 R F3(name)A F0 2.028([@]} e)B 2.028(xpands to nothing.)-.15 F +2.028(If the double-quoted e)7.028 F 2.028(xpansion occurs)-.15 F .759 +(within a w)108 674.4 R .759(ord, the e)-.1 F .759 (xpansion of the \214rst parameter is joined with the be)-.15 F .759 (ginning part of the original w)-.15 F(ord,)-.1 E .515(and the e)108 -338.4 R .516(xpansion of the last parameter is joined with the last par\ +686.4 R .516(xpansion of the last parameter is joined with the last par\ t of the original w)-.15 F 3.016(ord. This)-.1 F .516(is analogous)3.016 -F .228(to the e)108 350.4 R .228(xpansion of the special parameters)-.15 -F F2(*)2.728 E F0(and)2.728 E F2(@)2.728 E F0(\(see)2.728 E F2 .228 +F .228(to the e)108 698.4 R .228(xpansion of the special parameters)-.15 +F F1(*)2.728 E F0(and)2.728 E F1(@)2.728 E F0(\(see)2.728 E F1 .228 (Special P)2.728 F(arameters)-.1 E F0(abo)2.727 E -.15(ve)-.15 G 2.727 -(\). ${#).15 F F1(name)A F0([)A F1(subscript)A F0(]})A -.15(ex)108 362.4 -S .886(pands to the length of ${).15 F F1(name)A F0([)A F1(subscript)A -F0 3.386(]}. If)B F1(subscript)3.386 E F0(is)3.386 E F2(*)3.386 E F0(or) -3.386 E F2(@)3.386 E F0 3.386(,t)C .886(he e)-3.386 F .886 -(xpansion is the number of ele-)-.15 F .295(ments in the array)108 374.4 -R 5.295(.I)-.65 G 2.795(ft)-5.295 G(he)-2.795 E F1(subscript)3.135 E F0 +(\). ${#).15 F F3(name)A F0([)A F3(subscript)A F0(]})A -.15(ex)108 710.4 +S .886(pands to the length of ${).15 F F3(name)A F0([)A F3(subscript)A +F0 3.386(]}. If)B F3(subscript)3.386 E F0(is)3.386 E F1(*)3.386 E F0(or) +3.386 E F1(@)3.386 E F0 3.386(,t)C .886(he e)-3.386 F .886 +(xpansion is the number of ele-)-.15 F .295(ments in the array)108 722.4 +R 5.295(.I)-.65 G 2.795(ft)-5.295 G(he)-2.795 E F3(subscript)3.135 E F0 .295(used to reference an element of an inde)3.475 F -.15(xe)-.15 G 2.794(da).15 G .294(rray e)-2.794 F -.25(va)-.25 G .294 -(luates to a number).25 F .628 -(less than zero, it is interpreted as relati)108 386.4 R .928 -.15(ve t) --.25 H 3.128(oo).15 G .629(ne greater than the maximum inde)-3.128 F -3.129(xo)-.15 G 3.129(ft)-3.129 G .629(he array)-3.129 F 3.129(,s)-.65 G -3.129(on)-3.129 G -2.25 -.15(eg a)-3.129 H(ti).15 E -.15(ve)-.25 G -(indices count back from the end of the array)108 398.4 Q 2.5(,a)-.65 G -(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G -(eferences the last element.)-2.5 E .595(Referencing an array v)108 -415.2 R .595(ariable without a subscript is equi)-.25 F -.25(va)-.25 G -.595(lent to referencing the array with a subscript of).25 F 2.5(0. An) -108 427.2 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25 -E(alid subscript is le)-.25 E -.05(ga)-.15 G(l, and).05 E F2(bash)2.5 E -F0(will create an array if necessary)2.5 E(.)-.65 E(An array v)108 444 Q -(ariable is considered set if a subscript has been assigned a v)-.25 E -2.5(alue. The)-.25 F(null string is a v)2.5 E(alid v)-.25 E(alue.)-.25 E -.417(It is possible to obtain the k)108 460.8 R -.15(ey)-.1 G 2.918(s\() -.15 G .418(indices\) of an array as well as the v)-2.918 F 2.918 -(alues. ${)-.25 F F2(!)A F1(name)A F0([)A F1(@)A F0 .418(]} and ${)B F2 -(!)A F1(name)A F0([)A F1(*)A F0(]})A -.15(ex)108 472.8 S .75 -(pand to the indices assigned in array v).15 F(ariable)-.25 E F1(name) -3.249 E F0 5.749(.T)C .749 -(he treatment when in double quotes is similar to)-5.749 F(the e)108 -484.8 Q(xpansion of the special parameters)-.15 E F1(@)2.5 E F0(and)2.5 -E F1(*)2.5 E F0(within double quotes.)2.5 E(The)108 501.6 Q F2(unset) -2.766 E F0 -.2(bu)2.766 G .267(iltin is used to destro).2 F 2.767(ya)-.1 -G(rrays.)-2.767 E F2(unset)5.267 E F1(name)2.767 E F0([)A F1(subscript)A -F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x) --.15 E F1(sub-)2.767 E(script)108 513.6 Q F0 2.858(,f)C .358 -(or both inde)-2.858 F -.15(xe)-.15 G 2.858(da).15 G .358(nd associati) --2.858 F .658 -.15(ve a)-.25 H 2.858(rrays. Ne).15 F -.05(ga)-.15 G(ti) -.05 E .658 -.15(ve s)-.25 H .358(ubscripts to inde).15 F -.15(xe)-.15 G -2.858(da).15 G .358(rrays are interpreted as de-)-2.858 F 1.204 -(scribed abo)108 525.6 R -.15(ve)-.15 G 6.204(.U).15 G 1.204 -(nsetting the last element of an array v)-6.204 F 1.205 -(ariable does not unset the v)-.25 F(ariable.)-.25 E F2(unset)6.205 E F1 -(name)3.705 E F0(,)A(where)108 537.6 Q F1(name)2.5 E F0(is an array)2.5 -E 2.5(,o)-.65 G(r)-2.5 E F2(unset)2.5 E F1(name)2.5 E F0([)A F1 -(subscript)A F0(], where)A F1(subscript)2.5 E F0(is)2.5 E F2(*)2.5 E F0 -(or)2.5 E F2(@)2.5 E F0 2.5(,r)C(emo)-2.5 E -.15(ve)-.15 G 2.5(st).15 G -(he entire array)-2.5 E(.)-.65 E .029(When using a v)108 554.4 R .029 -(ariable name with a subscript as an ar)-.25 F .028 -(gument to a command, such as with)-.18 F F2(unset)2.528 E F0 2.528(,w)C -.028(ithout us-)-2.528 F .937(ing the w)108 566.4 R .937(ord e)-.1 F -.937(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G -.937(he ar)-3.437 F .938(gument is subject to pathname e)-.18 F 3.438 -(xpansion. If)-.15 F(path-)3.438 E(name e)108 578.4 Q -(xpansion is not desired, the ar)-.15 E(gument should be quoted.)-.18 E -(The)108 595.2 Q F2(declar)2.684 E(e)-.18 E F0(,)A F2(local)2.684 E F0 -2.684(,a)C(nd)-2.684 E F2 -.18(re)2.684 G(adonly).18 E F0 -.2(bu)2.684 G -.184(iltins each accept a).2 F F22.684 E F0 .184 -(option to specify an inde)2.684 F -.15(xe)-.15 G 2.683(da).15 G .183 -(rray and a)-2.683 F F22.683 E F0(op-)2.683 E .041 -(tion to specify an associati)108 607.2 R .341 -.15(ve a)-.25 H(rray).15 -E 5.041(.I)-.65 G 2.541(fb)-5.041 G .041(oth options are supplied,) --2.541 F F22.541 E F0(tak)2.541 E .041(es precedence.)-.1 F(The) -5.041 E F2 -.18(re)2.542 G(ad).18 E F0 -.2(bu)2.542 G .042(iltin ac-).2 -F .864(cepts a)108 619.2 R F23.364 E F0 .864 -(option to assign a list of w)3.364 F .864 -(ords read from the standard input to an array)-.1 F 5.863(.T)-.65 G(he) --5.863 E F2(set)3.363 E F0(and)3.363 E F2(declar)3.363 E(e)-.18 E F0 -.2 -(bu)108 631.2 S(iltins display array v).2 E(alues in a w)-.25 E -(ay that allo)-.1 E(ws them to be reused as assignments.)-.25 E/F4 10.95 -/Times-Bold@0 SF(EXP)72 648 Q(ANSION)-.81 E F0 .76(Expansion is perform\ -ed on the command line after it has been split into w)108 660 R 3.26 -(ords. There)-.1 F .76(are se)3.26 F -.15(ve)-.25 G 3.26(nk).15 G .76 -(inds of)-3.26 F -.15(ex)108 672 S .201(pansion performed:).15 F F1(br) -2.971 E .201(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .201(tilde e) -2.831 F(xpansion)-.2 E F0(,).24 E F1(par)3.951 E .201 -(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .2 -(command sub-)2.901 F(stitution)108 684 Q F0(,).24 E F1(arithmetic e) -2.83 E(xpansion)-.2 E F0(,).24 E F1(wor)2.84 E 2.5(ds)-.37 G(plitting) --2.5 E F0 2.5(,a).22 G(nd)-2.5 E F1(pathname e)3.75 E(xpansion)-.2 E F0 -(.).24 E .418(The order of e)108 700.8 R .418(xpansions is: brace e)-.15 -F .418(xpansion; tilde e)-.15 F .419(xpansion, parameter and v)-.15 F -.419(ariable e)-.25 F .419(xpansion, arithmetic)-.15 F -.15(ex)108 712.8 -S .196(pansion, and command substitution \(done in a left-to-right f).15 -F .195(ashion\); w)-.1 F .195(ord splitting; and pathname e)-.1 F(xpan-) --.15 E(sion.)108 724.8 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E -(20)190.395 E 0 Cg EP +(luates to a number).25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 +E(20)185.955 E 0 Cg EP %%Page: 21 21 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .257 -(On systems that can support it, there is an additional e)108 84 R .257 -(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E/F1 10/Times-Italic@0 SF -(pr)2.757 E .257(ocess substitution)-.45 F F0 5.257(.T)C .257 -(his is per)-5.257 F(-)-.2 E -(formed at the same time as tilde, parameter)108 96 Q 2.5(,v)-.4 G +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .628 +(less than zero, it is interpreted as relati)108 84 R .928 -.15(ve t) +-.25 H 3.128(oo).15 G .629(ne greater than the maximum inde)-3.128 F +3.129(xo)-.15 G 3.129(ft)-3.129 G .629(he array)-3.129 F 3.129(,s)-.65 G +3.129(on)-3.129 G -2.25 -.15(eg a)-3.129 H(ti).15 E -.15(ve)-.25 G +(indices count back from the end of the array)108 96 Q 2.5(,a)-.65 G +(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G +(eferences the last element.)-2.5 E .595(Referencing an array v)108 +112.8 R .595(ariable without a subscript is equi)-.25 F -.25(va)-.25 G +.595(lent to referencing the array with a subscript of).25 F 2.5(0. An) +108 124.8 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25 +E(alid subscript is le)-.25 E -.05(ga)-.15 G(l, and).05 E/F1 10 +/Times-Bold@0 SF(bash)2.5 E F0(will create an array if necessary)2.5 E +(.)-.65 E(An array v)108 141.6 Q +(ariable is considered set if a subscript has been assigned a v)-.25 E +2.5(alue. The)-.25 F(null string is a v)2.5 E(alid v)-.25 E(alue.)-.25 E +.417(It is possible to obtain the k)108 158.4 R -.15(ey)-.1 G 2.918(s\() +.15 G .418(indices\) of an array as well as the v)-2.918 F 2.918 +(alues. ${)-.25 F F1(!)A/F2 10/Times-Italic@0 SF(name)A F0([)A F2(@)A F0 +.418(]} and ${)B F1(!)A F2(name)A F0([)A F2(*)A F0(]})A -.15(ex)108 +170.4 S .75(pand to the indices assigned in array v).15 F(ariable)-.25 E +F2(name)3.249 E F0 5.749(.T)C .749 +(he treatment when in double quotes is similar to)-5.749 F(the e)108 +182.4 Q(xpansion of the special parameters)-.15 E F2(@)2.5 E F0(and)2.5 +E F2(*)2.5 E F0(within double quotes.)2.5 E(The)108 199.2 Q F1(unset) +2.766 E F0 -.2(bu)2.766 G .267(iltin is used to destro).2 F 2.767(ya)-.1 +G(rrays.)-2.767 E F1(unset)5.267 E F2(name)2.767 E F0([)A F2(subscript)A +F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x) +-.15 E F2(sub-)2.767 E(script)108 211.2 Q F0 2.858(,f)C .358 +(or both inde)-2.858 F -.15(xe)-.15 G 2.858(da).15 G .358(nd associati) +-2.858 F .658 -.15(ve a)-.25 H 2.858(rrays. Ne).15 F -.05(ga)-.15 G(ti) +.05 E .658 -.15(ve s)-.25 H .358(ubscripts to inde).15 F -.15(xe)-.15 G +2.858(da).15 G .358(rrays are interpreted as de-)-2.858 F 1.204 +(scribed abo)108 223.2 R -.15(ve)-.15 G 6.204(.U).15 G 1.204 +(nsetting the last element of an array v)-6.204 F 1.205 +(ariable does not unset the v)-.25 F(ariable.)-.25 E F1(unset)6.205 E F2 +(name)3.705 E F0(,)A(where)108 235.2 Q F2(name)3.413 E F0 .913 +(is an array)3.413 F 3.413(,r)-.65 G(emo)-3.413 E -.15(ve)-.15 G 3.413 +(st).15 G .912(he entire array)-3.413 F(.)-.65 E F1(unset)5.912 E F2 +(name)3.412 E F0([)A F2(subscript)A F0 .912(], where)B F2(subscript) +3.412 E F0(is)3.412 E F1(*)3.412 E F0(or)3.412 E F1(@)3.412 E F0 3.412 +(,b)C(e-)-3.412 E(ha)108 247.2 Q -.15(ve)-.2 G 3.125(sd).15 G(if)-3.125 +E .625(ferently depending on whether)-.25 F F2(name)3.125 E F0 .626 +(is an inde)3.125 F -.15(xe)-.15 G 3.126(do).15 G 3.126(ra)-3.126 G +(ssociati)-3.126 E .926 -.15(ve a)-.25 H(rray).15 E 5.626(.I)-.65 G(f) +-5.626 E F2(name)3.126 E F0 .626(is an associati)3.126 F -.15(ve)-.25 G +(array)108 259.2 Q 3.067(,t)-.65 G .567 +(his unsets the element with subscript)-3.067 F F1(*)3.067 E F0(or)3.067 +E F1(@)3.067 E F0 5.567(.I)C(f)-5.567 E F2(name)3.067 E F0 .567 +(is an inde)3.067 F -.15(xe)-.15 G 3.067(da).15 G(rray)-3.067 E 3.067 +(,u)-.65 G .567(nset remo)-3.067 F -.15(ve)-.15 G 3.067(sa).15 G .567 +(ll of the)-3.067 F(elements b)108 271.2 Q(ut does not remo)-.2 E .3 +-.15(ve t)-.15 H(he array itself.).15 E .028(When using a v)108 288 R +.028(ariable name with a subscript as an ar)-.25 F .029 +(gument to a command, such as with)-.18 F F1(unset)2.529 E F0 2.529(,w)C +.029(ithout us-)-2.529 F .938(ing the w)108 300 R .938(ord e)-.1 F .938 +(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G .937 +(he ar)-3.437 F .937(gument is subject to pathname e)-.18 F 3.437 +(xpansion. If)-.15 F(path-)3.437 E(name e)108 312 Q +(xpansion is not desired, the ar)-.15 E(gument should be quoted.)-.18 E +(The)108 328.8 Q F1(declar)2.683 E(e)-.18 E F0(,)A F1(local)2.683 E F0 +2.683(,a)C(nd)-2.683 E F1 -.18(re)2.683 G(adonly).18 E F0 -.2(bu)2.683 G +.184(iltins each accept a).2 F F12.684 E F0 .184 +(option to specify an inde)2.684 F -.15(xe)-.15 G 2.684(da).15 G .184 +(rray and a)-2.684 F F12.684 E F0(op-)2.684 E .042 +(tion to specify an associati)108 340.8 R .341 -.15(ve a)-.25 H(rray).15 +E 5.041(.I)-.65 G 2.541(fb)-5.041 G .041(oth options are supplied,) +-2.541 F F12.541 E F0(tak)2.541 E .041(es precedence.)-.1 F(The) +5.041 E F1 -.18(re)2.541 G(ad).18 E F0 -.2(bu)2.541 G .041(iltin ac-).2 +F .863(cepts a)108 352.8 R F13.363 E F0 .864 +(option to assign a list of w)3.363 F .864 +(ords read from the standard input to an array)-.1 F 5.864(.T)-.65 G(he) +-5.864 E F1(set)3.364 E F0(and)3.364 E F1(declar)3.364 E(e)-.18 E F0 -.2 +(bu)108 364.8 S(iltins display array v).2 E(alues in a w)-.25 E +(ay that allo)-.1 E(ws them to be reused as assignments.)-.25 E/F3 10.95 +/Times-Bold@0 SF(EXP)72 381.6 Q(ANSION)-.81 E F0 .76(Expansion is perfo\ +rmed on the command line after it has been split into w)108 393.6 R 3.26 +(ords. There)-.1 F .76(are se)3.26 F -.15(ve)-.25 G 3.26(nk).15 G .76 +(inds of)-3.26 F -.15(ex)108 405.6 S .2(pansion performed:).15 F F2(br) +2.971 E .201(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .201(tilde e) +2.831 F(xpansion)-.2 E F0(,).24 E F2(par)3.951 E .201 +(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .201 +(command sub-)2.901 F(stitution)108 417.6 Q F0(,).24 E F2(arithmetic e) +2.83 E(xpansion)-.2 E F0(,).24 E F2(wor)2.84 E 2.5(ds)-.37 G(plitting) +-2.5 E F0 2.5(,a).22 G(nd)-2.5 E F2(pathname e)3.75 E(xpansion)-.2 E F0 +(.).24 E .419(The order of e)108 434.4 R .419(xpansions is: brace e)-.15 +F .418(xpansion; tilde e)-.15 F .418(xpansion, parameter and v)-.15 F +.418(ariable e)-.25 F .418(xpansion, arithmetic)-.15 F -.15(ex)108 446.4 +S .195(pansion, and command substitution \(done in a left-to-right f).15 +F .196(ashion\); w)-.1 F .196(ord splitting; and pathname e)-.1 F(xpan-) +-.15 E(sion.)108 458.4 Q .257 +(On systems that can support it, there is an additional e)108 475.2 R +.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F2(pr)2.757 E .257 +(ocess substitution)-.45 F F0 5.257(.T)C .256(his is per)-5.257 F(-)-.2 +E(formed at the same time as tilde, parameter)108 487.2 Q 2.5(,v)-.4 G (ariable, and arithmetic e)-2.75 E(xpansion and command substitution.) --.15 E .003(After these e)108 112.8 R .003 +-.15 E .002(After these e)108 504 R .003 (xpansions are performed, quote characters present in the original w) --.15 F .002(ord are remo)-.1 F -.15(ve)-.15 G 2.502(du).15 G .002 -(nless the)-2.502 F(y)-.15 E(ha)108 124.8 Q .3 -.15(ve b)-.2 H -(een quoted themselv).15 E(es \()-.15 E F1(quote r)A(emo)-.37 E(val)-.1 -E F0(\).)A .171(Only brace e)108 141.6 R .171(xpansion, w)-.15 F .171 +-.15 F .003(ord are remo)-.1 F -.15(ve)-.15 G 2.503(du).15 G .003 +(nless the)-2.503 F(y)-.15 E(ha)108 516 Q .3 -.15(ve b)-.2 H +(een quoted themselv).15 E(es \()-.15 E F2(quote r)A(emo)-.37 E(val)-.1 +E F0(\).)A .172(Only brace e)108 532.8 R .172(xpansion, w)-.15 F .171 (ord splitting, and pathname e)-.1 F .171 -(xpansion can increase the number of w)-.15 F .172(ords of the e)-.1 F -(x-)-.15 E .777(pansion; other e)108 153.6 R .776(xpansions e)-.15 F +(xpansion can increase the number of w)-.15 F .171(ords of the e)-.1 F +(x-)-.15 E .776(pansion; other e)108 544.8 R .776(xpansions e)-.15 F .776(xpand a single w)-.15 F .776(ord to a single w)-.1 F 3.276 (ord. The)-.1 F .776(only e)3.276 F .776(xceptions to this are the e) --.15 F(x-)-.15 E .695(pansions of ")108 165.6 R/F2 10/Times-Bold@0 SF -($@)A F0 3.195("a)C .695(nd ")-3.195 F F2(${)A F1(name)A F2([@]})A F0 -.696(", and, in most cases,)B F2($*)3.196 E F0(and)3.196 E F2(${)3.196 E -F1(name)A F2([*]})A F0 .696(as e)3.196 F .696(xplained abo)-.15 F .996 --.15(ve \()-.15 H(see).15 E/F3 9/Times-Bold@0 SF -.666(PA)3.196 G(-).666 -E(RAMETERS)108 177.6 Q/F4 9/Times-Roman@0 SF(\).)A F2(Brace Expansion)87 -194.4 Q F1(Br)108.58 206.4 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606 +-.15 F(x-)-.15 E .696(pansions of ")108 556.8 R F1($@)A F0 3.196("a)C +.696(nd ")-3.196 F F1(${)A F2(name)A F1([@]})A F0 .696 +(", and, in most cases,)B F1($*)3.196 E F0(and)3.196 E F1(${)3.196 E F2 +(name)A F1([*]})A F0 .695(as e)3.196 F .695(xplained abo)-.15 F .995 +-.15(ve \()-.15 H(see).15 E/F4 9/Times-Bold@0 SF -.666(PA)3.195 G(-).666 +E(RAMETERS)108 568.8 Q/F5 9/Times-Roman@0 SF(\).)A F1(Brace Expansion)87 +585.6 Q F2(Br)108.58 597.6 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606 (is a mechanism by which arbitrary strings may be generated.)3.346 F -.606(This mechanism is similar)5.606 F(to)108 218.4 Q F1 .415 +.606(This mechanism is similar)5.606 F(to)108 609.6 Q F2 .415 (pathname e)2.915 F(xpansion)-.2 E F0 2.915(,b)C .415 (ut the \214lenames generated need not e)-3.115 F 2.915(xist. P)-.15 F .415(atterns to be brace e)-.15 F .415(xpanded tak)-.15 F 2.915(et)-.1 G -(he)-2.915 E .074(form of an optional)108 230.4 R F1(pr)3.823 E(eamble) +(he)-2.915 E .073(form of an optional)108 621.6 R F2(pr)3.823 E(eamble) -.37 E F0 2.573(,f).18 G(ollo)-2.573 E .073 (wed by either a series of comma-separated strings or a sequence e)-.25 -F(xpres-)-.15 E .489(sion between a pair of braces, follo)108 242.4 R -.489(wed by an optional)-.25 F F1(postscript)4.239 E F0 5.49(.T).68 G -.49(he preamble is pre\214x)-5.49 F .49(ed to each string)-.15 F .659(c\ -ontained within the braces, and the postscript is then appended to each\ - resulting string, e)108 254.4 R .658(xpanding left to)-.15 F(right.)108 -266.4 Q .718(Brace e)108 283.2 R .719(xpansions may be nested.)-.15 F -.719(The results of each e)5.719 F .719 +F(xpres-)-.15 E .49(sion between a pair of braces, follo)108 633.6 R +.489(wed by an optional)-.25 F F2(postscript)4.239 E F0 5.489(.T).68 G +.489(he preamble is pre\214x)-5.489 F .489(ed to each string)-.15 F .659 +(contained within the braces, and the postscript is then appended to ea\ +ch resulting string, e)108 645.6 R .659(xpanding left to)-.15 F(right.) +108 657.6 Q .719(Brace e)108 674.4 R .719(xpansions may be nested.)-.15 +F .719(The results of each e)5.719 F .719 (xpanded string are not sorted; left to right order is)-.15 F(preserv) -108 295.2 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F2({)A F0 -(d,c,b)A F2(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.243(As) -108 312 S .743(equence e)-3.243 F .743(xpression tak)-.15 F .743 -(es the form)-.1 F F2({)3.243 E F1(x)A F2(..)A F1(y)A F2([..)A F1(incr)A -F2(]})A F0 3.243(,w)C(here)-3.243 E F1(x)3.243 E F0(and)3.242 E F1(y) -3.242 E F0 .742(are either inte)3.242 F .742(gers or single characters,) --.15 F(and)108 324 Q F1(incr)3.031 E F0 3.031(,a)C 3.032(no)-3.031 G -.532(ptional increment, is an inte)-3.032 F(ger)-.15 E 5.532(.W)-.55 G -.532(hen inte)-5.532 F .532(gers are supplied, the e)-.15 F .532 -(xpression e)-.15 F .532(xpands to each)-.15 F .078(number between)108 -336 R F1(x)2.578 E F0(and)2.578 E F1(y)2.578 E F0 2.578(,i)C(nclusi) --2.578 E -.15(ve)-.25 G 5.078(.S).15 G .078(upplied inte)-5.078 F .077 -(gers may be pre\214x)-.15 F .077(ed with)-.15 F F1(0)2.577 E F0 .077 -(to force each term to ha)2.577 F .377 -.15(ve t)-.2 H(he).15 E .014 -(same width.)108 348 R .014(When either)5.014 F F1(x)2.514 E F0(or)2.514 -E F1(y)2.514 E F0(be)2.514 E .015(gins with a zero, the shell attempts \ -to force all generated terms to contain)-.15 F 1.143 -(the same number of digits, zero-padding where necessary)108 360 R 6.143 -(.W)-.65 G 1.143(hen characters are supplied, the e)-6.143 F(xpression) --.15 E -.15(ex)108 372 S 1.064(pands to each character le).15 F 1.064 -(xicographically between)-.15 F F1(x)3.564 E F0(and)3.564 E F1(y)3.564 E -F0 3.564(,i)C(nclusi)-3.564 E -.15(ve)-.25 G 3.564(,u).15 G 1.064 -(sing the def)-3.564 F 1.064(ault C locale.)-.1 F(Note)6.064 E .245 -(that both)108 384 R F1(x)2.745 E F0(and)2.745 E F1(y)2.745 E F0 .245 -(must be of the same type.)2.745 F .244 -(When the increment is supplied, it is used as the dif)5.245 F .244 -(ference be-)-.25 F(tween each term.)108 396 Q(The def)5 E -(ault increment is 1 or \2551 as appropriate.)-.1 E .581(Brace e)108 -412.8 R .581(xpansion is performed before an)-.15 F 3.081(yo)-.15 G .581 -(ther e)-3.081 F .581(xpansions, and an)-.15 F 3.082(yc)-.15 G .582 -(haracters special to other e)-3.082 F(xpansions)-.15 E .016 -(are preserv)108 424.8 R .016(ed in the result.)-.15 F .016 -(It is strictly te)5.016 F(xtual.)-.15 E F2(Bash)5.016 E F0 .015 -(does not apply an)2.516 F 2.515(ys)-.15 G .015 -(yntactic interpretation to the con-)-2.515 F(te)108 436.8 Q -(xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.) --.15 E 2.501(Ac)108 453.6 S .001(orrectly-formed brace e)-2.501 F .001(\ -xpansion must contain unquoted opening and closing braces, and at least\ - one un-)-.15 F .458(quoted comma or a v)108 465.6 R .458 -(alid sequence e)-.25 F 2.958(xpression. An)-.15 F 2.958(yi)-.15 G .458 -(ncorrectly formed brace e)-2.958 F .457(xpansion is left unchanged.) --.15 F(A)108 477.6 Q F2({)2.521 E F0(or)2.521 E F2(,)2.521 E F0 .021 -(may be quoted with a backslash to pre)2.521 F -.15(ve)-.25 G .022 -(nt its being considered part of a brace e).15 F 2.522(xpression. T)-.15 -F 2.522(oa)-.8 G -.2(vo)-2.722 G(id).2 E .172 -(con\215icts with parameter e)108 489.6 R .172(xpansion, the string)-.15 -F F2(${)2.672 E F0 .172(is not considered eligible for brace e)2.672 F -.172(xpansion, and inhibits)-.15 F(brace e)108 501.6 Q -(xpansion until the closing)-.15 E F2(})2.5 E F0(.)A 1.476(This constru\ -ct is typically used as shorthand when the common pre\214x of the strin\ -gs to be generated is)108 518.4 R(longer than in the abo)108 530.4 Q .3 --.15(ve ex)-.15 H(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144 -547.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 559.2 Q(cho)144 -571.2 Q(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15 -E(w_e)-.25 E(x}})-.15 E .618(Brace e)108 588 R .618 -(xpansion introduces a slight incompatibility with historical v)-.15 F -.618(ersions of)-.15 F F2(sh)3.118 E F0(.)A F2(sh)5.618 E F0 .618 -(does not treat open-)3.118 F .247 -(ing or closing braces specially when the)108 600 R 2.747(ya)-.15 G .247 -(ppear as part of a w)-2.747 F .248(ord, and preserv)-.1 F .248 -(es them in the output.)-.15 F F2(Bash)5.248 E F0(remo)108 612 Q -.15 -(ve)-.15 G 3.53(sb).15 G 1.03(races from w)-3.53 F 1.03 -(ords as a consequence of brace e)-.1 F 3.53(xpansion. F)-.15 F 1.03 -(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F2(sh) -3.53 E F0(as)3.53 E F1(\214le{1,2})108 624 Q F0 .514 -(appears identically in the output.)3.014 F .515(The same w)5.515 F .515 -(ord is output as)-.1 F F1 .515(\214le1 \214le2)4.925 F F0 .515(after e) -3.035 F .515(xpansion by)-.15 F F2(bash)3.015 E F0(.)A .437 -(If strict compatibility with)108 636 R F2(sh)2.936 E F0 .436 -(is desired, start)2.936 F F2(bash)2.936 E F0 .436(with the)2.936 F F2 -(+B)2.936 E F0 .436(option or disable brace e)2.936 F .436 -(xpansion with the)-.15 F F2(+B)108 648 Q F0(option to the)2.5 E F2(set) -2.5 E F0(command \(see)2.5 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS) --.828 E F0(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 664.8 S(lde Expansion) -.18 E F0 1.086(If a w)108 676.8 R 1.086(ord be)-.1 F 1.086 -(gins with an unquoted tilde character \(`)-.15 F F2(~)A F0 1.087 -('\), all of the characters preceding the \214rst unquoted)B .185(slash\ - \(or all characters, if there is no unquoted slash\) are considered a) -108 688.8 R F1(tilde-pr)2.685 E(e\214x)-.37 E F0 5.185(.I)C 2.685(fn) --5.185 G .185(one of the characters)-2.685 F .725(in the tilde-pre\214x\ - are quoted, the characters in the tilde-pre\214x follo)108 700.8 R .726 -(wing the tilde are treated as a possible)-.25 F F1(lo)108 712.8 Q .523 -(gin name)-.1 F F0 5.523(.I)C 3.023(ft)-5.523 G .523 -(his login name is the null string, the tilde is replaced with the v) --3.023 F .522(alue of the shell parameter)-.25 F F3(HOME)108 724.8 Q F4 -(.)A F0(If)6.735 E F3(HOME)4.735 E F0 2.236 -(is unset, the home directory of the user e)4.486 F -.15(xe)-.15 G 2.236 -(cuting the shell is substituted instead.).15 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(21)190.395 E 0 Cg EP +108 686.4 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F1({)A F0 +(d,c,b)A F1(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.148(As) +108 703.2 S .648(equence e)-3.148 F .648(xpression tak)-.15 F .649 +(es the form)-.1 F F1({)3.149 E F2(x)A F1(..)A F2(y)A F1([..)A F2(incr)A +F1(]})A F0 3.149(,w)C(here)-3.149 E F2(x)3.149 E F0(and)3.149 E F2(y) +3.149 E F0 .649(are either inte)3.149 F .649 +(gers or single letters, and)-.15 F F2(incr)108 715.2 Q F0 2.615(,a)C +2.615(no)-2.615 G .115(ptional increment, is an inte)-2.615 F(ger)-.15 E +5.115(.W)-.55 G .115(hen inte)-5.115 F .115(gers are supplied, the e) +-.15 F .115(xpression e)-.15 F .115(xpands to each num-)-.15 F 1.013 +(ber between)108 727.2 R F2(x)3.513 E F0(and)3.513 E F2(y)3.513 E F0 +3.513(,i)C(nclusi)-3.513 E -.15(ve)-.25 G 6.013(.S).15 G 1.013 +(upplied inte)-6.013 F 1.013(gers may be pre\214x)-.15 F 1.013(ed with) +-.15 F F2(0)3.513 E F0 1.013(to force each term to ha)3.513 F 1.314 -.15 +(ve t)-.2 H(he).15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(21)185.955 E 0 Cg EP %%Page: 22 22 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(Otherwise, the ti\ -lde-pre\214x is replaced with the home directory associated with the sp\ -eci\214ed login name.)108 84 Q .093 -(If the tilde-pre\214x is a `~+', the v)108 100.8 R .092 -(alue of the shell v)-.25 F(ariable)-.25 E/F1 9/Times-Bold@0 SF(PWD) -2.592 E F0 .092(replaces the tilde-pre\214x.)2.342 F .092 -(If the tilde-pre\214x is)5.092 F 3.403(a`)108 112.8 S .903 -(~\255', the v)-3.403 F .903(alue of the shell v)-.25 F(ariable)-.25 E -F1(OLDPWD)3.404 E/F2 9/Times-Roman@0 SF(,)A F0 .904 -(if it is set, is substituted.)3.154 F .904(If the characters follo) -5.904 F .904(wing the)-.25 F .88 -(tilde in the tilde-pre\214x consist of a number)108 124.8 R/F3 10 -/Times-Italic@0 SF(N)3.38 E F0 3.38(,o)C .88(ptionally pre\214x)-3.38 F -.879(ed by a `+' or a `\255', the tilde-pre\214x is re-)-.15 F .138(pla\ -ced with the corresponding element from the directory stack, as it w)108 -136.8 R .138(ould be displayed by the)-.1 F/F4 10/Times-Bold@0 SF(dirs) -2.639 E F0 -.2(bu)2.639 G(iltin).2 E(in)108 148.8 Q -.2(vo)-.4 G -.1(ke) -.2 G 2.839(dw).1 G .338(ith the tilde-pre\214x as an ar)-2.839 F 2.838 -(gument. If)-.18 F .338(the characters follo)2.838 F .338 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .015(same width.) +108 84 R .015(When either)5.015 F/F1 10/Times-Italic@0 SF(x)2.515 E F0 +(or)2.515 E F1(y)2.515 E F0(be)2.515 E .014(gins with a zero, the shell\ + attempts to force all generated terms to contain)-.15 F 1.13 +(the same number of digits, zero-padding where necessary)108 96 R 6.131 +(.W)-.65 G 1.131(hen letters are supplied, the e)-6.131 F 1.131 +(xpression e)-.15 F(x-)-.15 E .485(pands to each character le)108 108 R +.485(xicographically between)-.15 F F1(x)2.985 E F0(and)2.984 E F1(y) +2.984 E F0 2.984(,i)C(nclusi)-2.984 E -.15(ve)-.25 G 2.984(,u).15 G .484 +(sing the def)-2.984 F .484(ault C locale.)-.1 F .484(Note that)5.484 F +(both)108 120 Q F1(x)2.966 E F0(and)2.966 E F1(y)2.966 E F0 .467 +(must be of the same type \(inte)2.966 F .467(ger or letter\).)-.15 F +.467(When the increment is supplied, it is used as the)5.467 F(dif)108 +132 Q(ference between each term.)-.25 E(The def)5 E +(ault increment is 1 or \2551 as appropriate.)-.1 E .582(Brace e)108 +148.8 R .582(xpansion is performed before an)-.15 F 3.082(yo)-.15 G .581 +(ther e)-3.082 F .581(xpansions, and an)-.15 F 3.081(yc)-.15 G .581 +(haracters special to other e)-3.081 F(xpansions)-.15 E .015 +(are preserv)108 160.8 R .015(ed in the result.)-.15 F .015 +(It is strictly te)5.015 F(xtual.)-.15 E/F2 10/Times-Bold@0 SF(Bash) +5.016 E F0 .016(does not apply an)2.516 F 2.516(ys)-.15 G .016 +(yntactic interpretation to the con-)-2.516 F(te)108 172.8 Q +(xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.) +-.15 E 2.502(Ac)108 189.6 S .002(orrectly-formed brace e)-2.502 F .001(\ +xpansion must contain unquoted opening and closing braces, and at least\ + one un-)-.15 F .457(quoted comma or a v)108 201.6 R .458 +(alid sequence e)-.25 F 2.958(xpression. An)-.15 F 2.958(yi)-.15 G .458 +(ncorrectly formed brace e)-2.958 F .458(xpansion is left unchanged.) +-.15 F(A)108 213.6 Q F2({)2.522 E F0(or)2.522 E F2(,)2.522 E F0 .022 +(may be quoted with a backslash to pre)2.522 F -.15(ve)-.25 G .021 +(nt its being considered part of a brace e).15 F 2.521(xpression. T)-.15 +F 2.521(oa)-.8 G -.2(vo)-2.721 G(id).2 E .172 +(con\215icts with parameter e)108 225.6 R .172(xpansion, the string)-.15 +F F2(${)2.672 E F0 .172(is not considered eligible for brace e)2.672 F +.172(xpansion, and inhibits)-.15 F(brace e)108 237.6 Q +(xpansion until the closing)-.15 E F2(})2.5 E F0(.)A 1.476(This constru\ +ct is typically used as shorthand when the common pre\214x of the strin\ +gs to be generated is)108 254.4 R(longer than in the abo)108 266.4 Q .3 +-.15(ve ex)-.15 H(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144 +283.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 295.2 Q(cho)144 +307.2 Q(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15 +E(w_e)-.25 E(x}})-.15 E .618(Brace e)108 324 R .618 +(xpansion introduces a slight incompatibility with historical v)-.15 F +.618(ersions of)-.15 F F2(sh)3.118 E F0(.)A F2(sh)5.618 E F0 .618 +(does not treat open-)3.118 F .248 +(ing or closing braces specially when the)108 336 R 2.748(ya)-.15 G .247 +(ppear as part of a w)-2.748 F .247(ord, and preserv)-.1 F .247 +(es them in the output.)-.15 F F2(Bash)5.247 E F0(remo)108 348 Q -.15 +(ve)-.15 G 3.53(sb).15 G 1.03(races from w)-3.53 F 1.03 +(ords as a consequence of brace e)-.1 F 3.53(xpansion. F)-.15 F 1.03 +(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F2(sh) +3.53 E F0(as)3.53 E F1(\214le{1,2})108 360 Q F0 .515 +(appears identically in the output.)3.015 F .515(The same w)5.515 F .515 +(ord is output as)-.1 F F1 .514(\214le1 \214le2)4.925 F F0 .514(after e) +3.034 F .514(xpansion by)-.15 F F2(bash)3.014 E F0(.)A .436 +(If strict compatibility with)108 372 R F2(sh)2.936 E F0 .436 +(is desired, start)2.936 F F2(bash)2.936 E F0 .436(with the)2.936 F F2 +(+B)2.936 E F0 .436(option or disable brace e)2.936 F .437 +(xpansion with the)-.15 F F2(+B)108 384 Q F0(option to the)2.5 E F2(set) +2.5 E F0(command \(see)2.5 E/F3 9/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 +E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 400.8 S +(lde Expansion).18 E F0 1.087(If a w)108 412.8 R 1.087(ord be)-.1 F +1.087(gins with an unquoted tilde character \(`)-.15 F F2(~)A F0 1.086 +('\), all of the characters preceding the \214rst unquoted)B .185(slash\ + \(or all characters, if there is no unquoted slash\) are considered a) +108 424.8 R F1(tilde-pr)2.685 E(e\214x)-.37 E F0 5.185(.I)C 2.685(fn) +-5.185 G .185(one of the characters)-2.685 F .726(in the tilde-pre\214x\ + are quoted, the characters in the tilde-pre\214x follo)108 436.8 R .725 +(wing the tilde are treated as a possible)-.25 F F1(lo)108 448.8 Q .522 +(gin name)-.1 F F0 5.522(.I)C 3.022(ft)-5.522 G .522 +(his login name is the null string, the tilde is replaced with the v) +-3.022 F .523(alue of the shell parameter)-.25 F F3(HOME)108 460.8 Q/F4 +9/Times-Roman@0 SF(.)A F0(If)4.787 E F3(HOME)2.787 E F0 .287 +(is unset, the home directory of the user e)2.537 F -.15(xe)-.15 G .286 +(cuting the shell is substituted instead.).15 F(Other)5.286 E(-)-.2 E(w\ +ise, the tilde-pre\214x is replaced with the home directory associated \ +with the speci\214ed login name.)108 472.8 Q .092 +(If the tilde-pre\214x is a `~+', the v)108 489.6 R .092 +(alue of the shell v)-.25 F(ariable)-.25 E F3(PWD)2.592 E F0 .092 +(replaces the tilde-pre\214x.)2.342 F .093(If the tilde-pre\214x is) +5.093 F 3.404(a`)108 501.6 S .904(~\255', the v)-3.404 F .904 +(alue of the shell v)-.25 F(ariable)-.25 E F3(OLDPWD)3.404 E F4(,)A F0 +.904(if it is set, is substituted.)3.154 F .903(If the characters follo) +5.903 F .903(wing the)-.25 F .879 +(tilde in the tilde-pre\214x consist of a number)108 513.6 R F1(N)3.379 +E F0 3.379(,o)C .879(ptionally pre\214x)-3.379 F .88 +(ed by a `+' or a `\255', the tilde-pre\214x is re-)-.15 F .138(placed \ +with the corresponding element from the directory stack, as it w)108 +525.6 R .138(ould be displayed by the)-.1 F F2(dirs)2.638 E F0 -.2(bu) +2.638 G(iltin).2 E(in)108 537.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.838(dw).1 G +.338(ith the tilde-pre\214x as an ar)-2.838 F 2.838(gument. If)-.18 F +.338(the characters follo)2.838 F .338 (wing the tilde in the tilde-pre\214x consist)-.25 F -(of a number without a leading `+' or `\255', `+' is assumed.)108 160.8 -Q(If the login name is in)108 177.6 Q -.25(va)-.4 G(lid, or the tilde e) -.25 E(xpansion f)-.15 E(ails, the w)-.1 E(ord is unchanged.)-.1 E .166 -(Each v)108 194.4 R .167(ariable assignment is check)-.25 F .167 +(of a number without a leading `+' or `\255', `+' is assumed.)108 549.6 +Q(If the login name is in)108 566.4 Q -.25(va)-.4 G(lid, or the tilde e) +.25 E(xpansion f)-.15 E(ails, the w)-.1 E(ord is unchanged.)-.1 E .167 +(Each v)108 583.2 R .167(ariable assignment is check)-.25 F .167 (ed for unquoted tilde-pre\214x)-.1 F .167(es immediately follo)-.15 F -.167(wing a)-.25 F F4(:)2.667 E F0 .167(or the \214rst)2.667 F F4(=) -2.667 E F0 5.167(.I)C(n)-5.167 E .468(these cases, tilde e)108 206.4 R -.468(xpansion is also performed.)-.15 F(Consequently)5.467 E 2.967(,o) --.65 G .467(ne may use \214lenames with tildes in assign-)-2.967 F -(ments to)108 218.4 Q F1 -.666(PA)2.5 G(TH)-.189 E F2(,)A F1(MAILP)2.25 -E -.855(AT)-.666 G(H).855 E F2(,)A F0(and)2.25 E F1(CDP)2.5 E -.855(AT) --.666 G(H).855 E F2(,)A F0(and the shell assigns the e)2.25 E(xpanded v) --.15 E(alue.)-.25 E .023(Bash also performs tilde e)108 235.2 R .023 -(xpansion on w)-.15 F .024(ords satisfying the conditions of v)-.1 F -.024(ariable assignments \(as described)-.25 F(abo)108 247.2 Q .77 -.15 -(ve u)-.15 H(nder).15 E F1 -.666(PA)2.97 G(RAMETERS).666 E F2(\))A F0 -.47(when the)2.72 F 2.969(ya)-.15 G .469(ppear as ar)-2.969 F .469 -(guments to simple commands.)-.18 F .469(Bash does not do this,)5.469 F --.15(ex)108 259.2 S(cept for the).15 E F3(declar)2.5 E(ation)-.15 E F0 -(commands listed abo)2.5 E -.15(ve)-.15 G 2.5(,w).15 G(hen in)-2.5 E F3 -(posix mode)2.5 E F0(.)A F4 -.1(Pa)87 276 S(rameter Expansion).1 E F0 -.199(The `)108 288 R F4($)A F0 2.699('c)C .199 -(haracter introduces parameter e)-2.699 F .199 -(xpansion, command substitution, or arithmetic e)-.15 F 2.7 -(xpansion. The)-.15 F(pa-)2.7 E .314(rameter name or symbol to be e)108 -300 R .314(xpanded may be enclosed in braces, which are optional b)-.15 -F .314(ut serv)-.2 F 2.813(et)-.15 G 2.813(op)-2.813 G(rotect)-2.813 E -.414(the v)108 312 R .414(ariable to be e)-.25 F .414 -(xpanded from characters immediately follo)-.15 F .415 -(wing it which could be interpreted as part of)-.25 F(the name.)108 324 -Q 1.19(When braces are used, the matching ending brace is the \214rst `) -108 340.8 R F4(})A F0 3.689('n)C 1.189 -(ot escaped by a backslash or within a)-3.689 F .821 -(quoted string, and not within an embedded arithmetic e)108 352.8 R .822 -(xpansion, command substitution, or parameter e)-.15 F(x-)-.15 E -(pansion.)108 364.8 Q(${)108 381.6 Q F3(par)A(ameter)-.15 E F0(})A .106 -(The v)144 393.6 R .106(alue of)-.25 F F3(par)2.606 E(ameter)-.15 E F0 -.106(is substituted.)2.606 F .106(The braces are required when)5.106 F -F3(par)3.856 E(ameter)-.15 E F0 .106(is a positional pa-)3.336 F .11 -(rameter with more than one digit, or when)144 405.6 R F3(par)3.86 E -(ameter)-.15 E F0 .111(is follo)3.341 F .111 -(wed by a character which is not to be)-.25 F .208 -(interpreted as part of its name.)144 417.6 R(The)5.208 E F3(par)2.708 E -(ameter)-.15 E F0 .208(is a shell parameter as described abo)2.708 F --.15(ve)-.15 G F4 -.74(PA)2.858 G(RAME-).74 E(TERS)144 429.6 Q F0 2.5 -(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \()-2.5 E F4(Arrays)A -F0(\).)A .346(If the \214rst character of)108 446.4 R F3(par)2.846 E -(ameter)-.15 E F0 .346(is an e)2.846 F .346(xclamation point \()-.15 F -F4(!)A F0 .346(\), and)B F3(par)2.846 E(ameter)-.15 E F0 .346(is not a) -2.846 F F3(namer)2.846 E(ef)-.37 E F0 2.847(,i)C 2.847(ti)-2.847 G -(ntroduces)-2.847 E 2.907(al)108 458.4 S -2.15 -.25(ev e)-2.907 H 2.907 -(lo).25 G 2.906(fi)-2.907 G(ndirection.)-2.906 E F4(Bash)5.406 E F0 .406 -(uses the v)2.906 F .406(alue formed by e)-.25 F .406 -(xpanding the rest of)-.15 F F3(par)2.906 E(ameter)-.15 E F0 .406 -(as the ne)2.906 F(w)-.25 E F3(par)2.906 E(ame-)-.15 E(ter)108 470.4 Q -F0 2.578(;t)C .078(his is then e)-2.578 F .078(xpanded and that v)-.15 F -.079(alue is used in the rest of the e)-.25 F .079 -(xpansion, rather than the e)-.15 F .079(xpansion of the)-.15 F -(original)108 482.4 Q F3(par)2.543 E(ameter)-.15 E F0 5.043(.T)C .043 -(his is kno)-5.043 F .043(wn as)-.25 F F3(indir)2.543 E .043(ect e)-.37 -F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .042 -(alue is subject to tilde e)-.25 F .042(xpansion, parameter)-.15 F -.15 -(ex)108 494.4 S .248(pansion, command substitution, and arithmetic e).15 -F 2.748(xpansion. If)-.15 F F3(par)2.749 E(ameter)-.15 E F0 .249 -(is a nameref, this e)2.749 F .249(xpands to the)-.15 F 1.51 -(name of the parameter referenced by)108 506.4 R F3(par)4.01 E(ameter) --.15 E F0 1.51(instead of performing the complete indirect e)4.01 F -(xpansion.)-.15 E .387(The e)108 518.4 R .387 -(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F4(!)A -F3(pr)A(e\214x)-.37 E F4(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F4(!)A F3 -(name)A F0([)A F3(@)A F0 .387(]} described belo)B 4.188 -.65(w. T)-.25 H -.388(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108 -530.4 Q 2.5(wt)-.25 G(he left brace in order to introduce indirection.) --2.5 E .334(In each of the cases belo)108 547.2 R -.65(w,)-.25 G F3(wor) -3.484 E(d)-.37 E F0 .334(is subject to tilde e)2.834 F .334 -(xpansion, parameter e)-.15 F .334(xpansion, command substitution,)-.15 -F(and arithmetic e)108 559.2 Q(xpansion.)-.15 E .066 -(When not performing substring e)108 576 R .067 -(xpansion, using the forms documented belo)-.15 F 2.567(w\()-.25 G -(e.g.,)-2.567 E F4(:-)2.567 E F0(\),)A F4(bash)2.567 E F0 .067 -(tests for a pa-)2.567 F(rameter that is unset or null.)108 588 Q(Omitt\ -ing the colon results in a test only for a parameter that is unset.)5 E -(${)108 604.8 Q F3(par)A(ameter)-.15 E F4<3aad>A F3(wor)A(d)-.37 E F0(}) -A F4 .723(Use Default V)144 616.8 R(alues)-.92 E F0 5.723(.I)C(f)-5.723 -E F3(par)4.473 E(ameter)-.15 E F0 .723(is unset or null, the e)3.953 F -.722(xpansion of)-.15 F F3(wor)3.562 E(d)-.37 E F0 .722(is substituted.) -3.992 F(Other)5.722 E(-)-.2 E(wise, the v)144 628.8 Q(alue of)-.25 E F3 -(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 640.8 Q F3 -(par)A(ameter)-.15 E F4(:=)A F3(wor)A(d)-.37 E F0(})A F4 .811 -(Assign Default V)144 652.8 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F3 -(par)4.562 E(ameter)-.15 E F0 .812(is unset or null, the e)4.042 F .812 -(xpansion of)-.15 F F3(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082 -F F3(pa-)4.562 E -.15(ra)144 664.8 S(meter).15 E F0 5.742(.T).73 G .742 -(he v)-5.742 F .742(alue of)-.25 F F3(par)4.492 E(ameter)-.15 E F0 .742 -(is then substituted.)3.972 F .741 -(Positional parameters and special parame-)5.742 F -(ters may not be assigned to in this w)144 676.8 Q(ay)-.1 E(.)-.65 E(${) -108 688.8 Q F3(par)A(ameter)-.15 E F4(:?)A F3(wor)A(d)-.37 E F0(})A F4 -.535(Display Err)144 700.8 R .535(or if Null or Unset)-.18 F F0 5.535 -(.I)C(f)-5.535 E F3(par)4.285 E(ameter)-.15 E F0 .535 -(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F3(wor)3.035 E -(d)-.37 E F0 .535(\(or a mes-)3.035 F .013(sage to that ef)144 712.8 R -.013(fect if)-.25 F F3(wor)2.853 E(d)-.37 E F0 .013(is not present\) is\ - written to the standard error and the shell, if it is not in-)3.283 F -(teracti)144 724.8 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,) --2.65 F(the v)2.5 E(alue of)-.25 E F3(par)2.5 E(ameter)-.15 E F0 -(is substituted.)2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E -(22)190.395 E 0 Cg EP +.167(wing a)-.25 F F2(:)2.667 E F0 .167(or the \214rst)2.667 F F2(=) +2.666 E F0 5.166(.I)C(n)-5.166 E .467(these cases, tilde e)108 595.2 R +.467(xpansion is also performed.)-.15 F(Consequently)5.467 E 2.967(,o) +-.65 G .468(ne may use \214lenames with tildes in assign-)-2.967 F +(ments to)108 607.2 Q F3 -.666(PA)2.5 G(TH)-.189 E F4(,)A F3(MAILP)2.25 +E -.855(AT)-.666 G(H).855 E F4(,)A F0(and)2.25 E F3(CDP)2.5 E -.855(AT) +-.666 G(H).855 E F4(,)A F0(and the shell assigns the e)2.25 E(xpanded v) +-.15 E(alue.)-.25 E .024(Bash also performs tilde e)108 624 R .024 +(xpansion on w)-.15 F .023(ords satisfying the conditions of v)-.1 F +.023(ariable assignments \(as described)-.25 F(abo)108 636 Q .769 -.15 +(ve u)-.15 H(nder).15 E F3 -.666(PA)2.969 G(RAMETERS).666 E F4(\))A F0 +.469(when the)2.719 F 2.969(ya)-.15 G .469(ppear as ar)-2.969 F .469 +(guments to simple commands.)-.18 F .47(Bash does not do this,)5.469 F +-.15(ex)108 648 S(cept for the).15 E F1(declar)2.5 E(ation)-.15 E F0 +(commands listed abo)2.5 E -.15(ve)-.15 G 2.5(,w).15 G(hen in)-2.5 E F1 +(posix mode)2.5 E F0(.)A F2 -.1(Pa)87 664.8 S(rameter Expansion).1 E F0 +.2(The `)108 676.8 R F2($)A F0 2.7('c)C .199 +(haracter introduces parameter e)-2.7 F .199 +(xpansion, command substitution, or arithmetic e)-.15 F 2.699 +(xpansion. The)-.15 F(pa-)2.699 E .314(rameter name or symbol to be e) +108 688.8 R .314 +(xpanded may be enclosed in braces, which are optional b)-.15 F .314 +(ut serv)-.2 F 2.814(et)-.15 G 2.814(op)-2.814 G(rotect)-2.814 E .415 +(the v)108 700.8 R .415(ariable to be e)-.25 F .415 +(xpanded from characters immediately follo)-.15 F .414 +(wing it which could be interpreted as part of)-.25 F(the name.)108 +712.8 Q 1.189 +(When braces are used, the matching ending brace is the \214rst `)108 +729.6 R F2(})A F0 3.69('n)C 1.19(ot escaped by a backslash or within a) +-3.69 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(22)185.955 E 0 +Cg EP %%Page: 23 23 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(${)108 84 Q/F1 10 -/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(:+)A F1 -(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 96 R .745(nate V)-.15 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .822 +(quoted string, and not within an embedded arithmetic e)108 84 R .821 +(xpansion, command substitution, or parameter e)-.15 F(x-)-.15 E +(pansion.)108 96 Q(${)108 112.8 Q/F1 10/Times-Italic@0 SF(par)A(ameter) +-.15 E F0(})A .106(The v)144 124.8 R .106(alue of)-.25 F F1(par)2.606 E +(ameter)-.15 E F0 .106(is substituted.)2.606 F .106 +(The braces are required when)5.106 F F1(par)3.856 E(ameter)-.15 E F0 +.106(is a positional pa-)3.336 F .111 +(rameter with more than one digit, or when)144 136.8 R F1(par)3.861 E +(ameter)-.15 E F0 .111(is follo)3.341 F .11 +(wed by a character which is not to be)-.25 F .208 +(interpreted as part of its name.)144 148.8 R(The)5.208 E F1(par)2.708 E +(ameter)-.15 E F0 .208(is a shell parameter as described abo)2.708 F +-.15(ve)-.15 G/F2 10/Times-Bold@0 SF -.74(PA)2.858 G(RAME-).74 E(TERS) +144 160.8 Q F0 2.5(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \() +-2.5 E F2(Arrays)A F0(\).)A .347(If the \214rst character of)108 177.6 R +F1(par)2.846 E(ameter)-.15 E F0 .346(is an e)2.846 F .346 +(xclamation point \()-.15 F F2(!)A F0 .346(\), and)B F1(par)2.846 E +(ameter)-.15 E F0 .346(is not a)2.846 F F1(namer)2.846 E(ef)-.37 E F0 +2.846(,i)C 2.846(ti)-2.846 G(ntroduces)-2.846 E 2.906(al)108 189.6 S +-2.15 -.25(ev e)-2.906 H 2.906(lo).25 G 2.906(fi)-2.906 G(ndirection.) +-2.906 E F2(Bash)5.406 E F0 .406(uses the v)2.906 F .406 +(alue formed by e)-.25 F .406(xpanding the rest of)-.15 F F1(par)2.906 E +(ameter)-.15 E F0 .406(as the ne)2.906 F(w)-.25 E F1(par)2.907 E(ame-) +-.15 E(ter)108 201.6 Q F0 2.579(;t)C .079(his is then e)-2.579 F .079 +(xpanded and that v)-.15 F .079(alue is used in the rest of the e)-.25 F +.078(xpansion, rather than the e)-.15 F .078(xpansion of the)-.15 F +(original)108 213.6 Q F1(par)2.542 E(ameter)-.15 E F0 5.042(.T)C .042 +(his is kno)-5.042 F .042(wn as)-.25 F F1(indir)2.543 E .043(ect e)-.37 +F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .043 +(alue is subject to tilde e)-.25 F .043(xpansion, parameter)-.15 F -.15 +(ex)108 225.6 S .249(pansion, command substitution, and arithmetic e).15 +F 2.749(xpansion. If)-.15 F F1(par)2.749 E(ameter)-.15 E F0 .248 +(is a nameref, this e)2.749 F .248(xpands to the)-.15 F 1.51 +(name of the parameter referenced by)108 237.6 R F1(par)4.01 E(ameter) +-.15 E F0 1.51(instead of performing the complete indirect e)4.01 F +(xpansion.)-.15 E .388(The e)108 249.6 R .387 +(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F2(!)A +F1(pr)A(e\214x)-.37 E F2(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F2(!)A F1 +(name)A F0([)A F1(@)A F0 .387(]} described belo)B 4.187 -.65(w. T)-.25 H +.387(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108 +261.6 Q 2.5(wt)-.25 G(he left brace in order to introduce indirection.) +-2.5 E .334(In each of the cases belo)108 278.4 R -.65(w,)-.25 G F1(wor) +3.484 E(d)-.37 E F0 .334(is subject to tilde e)2.834 F .334 +(xpansion, parameter e)-.15 F .334(xpansion, command substitution,)-.15 +F(and arithmetic e)108 290.4 Q(xpansion.)-.15 E .067 +(When not performing substring e)108 307.2 R .067 +(xpansion, using the forms documented belo)-.15 F 2.567(w\()-.25 G +(e.g.,)-2.567 E F2(:-)2.567 E F0(\),)A F2(bash)2.567 E F0 .066 +(tests for a pa-)2.567 F(rameter that is unset or null.)108 319.2 Q(Omi\ +tting the colon results in a test only for a parameter that is unset.)5 +E(${)108 336 Q F1(par)A(ameter)-.15 E F2<3aad>A F1(wor)A(d)-.37 E F0(})A +F2 .722(Use Default V)144 348 R(alues)-.92 E F0 5.722(.I)C(f)-5.722 E F1 +(par)4.472 E(ameter)-.15 E F0 .723(is unset or null, the e)3.952 F .723 +(xpansion of)-.15 F F1(wor)3.563 E(d)-.37 E F0 .723(is substituted.) +3.993 F(Other)5.723 E(-)-.2 E(wise, the v)144 360 Q(alue of)-.25 E F1 +(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 372 Q F1(par) +A(ameter)-.15 E F2(:=)A F1(wor)A(d)-.37 E F0(})A F2 .812 +(Assign Default V)144 384 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F1 +(par)4.562 E(ameter)-.15 E F0 .812(is unset or null, the e)4.042 F .812 +(xpansion of)-.15 F F1(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082 +F F1(pa-)4.561 E -.15(ra)144 396 S(meter).15 E F0 5.741(.T).73 G .741 +(he v)-5.741 F .741(alue of)-.25 F F1(par)4.491 E(ameter)-.15 E F0 .742 +(is then substituted.)3.972 F .742 +(Positional parameters and special parame-)5.742 F +(ters may not be assigned to in this w)144 408 Q(ay)-.1 E(.)-.65 E(${) +108 420 Q F1(par)A(ameter)-.15 E F2(:?)A F1(wor)A(d)-.37 E F0(})A F2 +.535(Display Err)144 432 R .535(or if Null or Unset)-.18 F F0 5.535(.I)C +(f)-5.535 E F1(par)4.285 E(ameter)-.15 E F0 .535 +(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F1(wor)3.035 E +(d)-.37 E F0 .535(\(or a mes-)3.035 F .012(sage to that ef)144 444 R +.012(fect if)-.25 F F1(wor)2.852 E(d)-.37 E F0 .013(is not present\) is\ + written to the standard error and the shell, if it is not in-)3.282 F +(teracti)144 456 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,) +-2.65 F(the v)2.5 E(alue of)-.25 E F1(par)2.5 E(ameter)-.15 E F0 +(is substituted.)2.5 E(${)108 468 Q F1(par)A(ameter)-.15 E F2(:+)A F1 +(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 480 R .745(nate V)-.15 F (alue)-.92 E F0 5.745(.I)C(f)-5.745 E F1(par)4.495 E(ameter)-.15 E F0 .745(is null or unset, nothing is substituted, otherwise the e)3.975 F -(xpan-)-.15 E(sion of)144 108 Q F1(wor)2.84 E(d)-.37 E F0 -(is substituted.)3.27 E(${)108 120 Q F1(par)A(ameter)-.15 E F2(:)A F1 -(of)A(fset)-.18 E F0(})A(${)108 132 Q F1(par)A(ameter)-.15 E F2(:)A F1 +(xpan-)-.15 E(sion of)144 492 Q F1(wor)2.84 E(d)-.37 E F0 +(is substituted.)3.27 E(${)108 504 Q F1(par)A(ameter)-.15 E F2(:)A F1 +(of)A(fset)-.18 E F0(})A(${)108 516 Q F1(par)A(ameter)-.15 E F2(:)A F1 (of)A(fset)-.18 E F2(:)A F1(length)A F0(})A F2 .002(Substring Expansion) -144 144 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F1(length)2.502 E +144 528 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F1(length)2.502 E F0 .002(characters of the v)2.502 F .002(alue of)-.25 F F1(par)2.502 E (ameter)-.15 E F0 .002(starting at the)2.502 F .235 -(character speci\214ed by)144 156 R F1(of)2.735 E(fset)-.18 E F0 5.235 +(character speci\214ed by)144 540 R F1(of)2.735 E(fset)-.18 E F0 5.235 (.I)C(f)-5.235 E F1(par)2.735 E(ameter)-.15 E F0(is)2.735 E F2(@)2.735 E F0 2.735(,a)C 2.735(ni)-2.735 G(nde)-2.735 E -.15(xe)-.15 G 2.735(da).15 G .235(rray subscripted by)-2.735 F F2(@)2.735 E F0(or)2.735 E F2(*) 2.735 E F0 2.735(,o)C 2.735(ra)-2.735 G 2.735(na)-2.735 G(s-)-2.735 E -(sociati)144 168 Q 1.578 -.15(ve a)-.25 H 1.278 +(sociati)144 552 Q 1.577 -.15(ve a)-.25 H 1.277 (rray name, the results dif).15 F 1.277(fer as described belo)-.25 F -5.077 -.65(w. I)-.25 H(f).65 E F1(length)3.777 E F0 1.277(is omitted, e) -3.777 F 1.277(xpands to the)-.15 F .042(substring of the v)144 180 R -.042(alue of)-.25 F F1(par)2.542 E(ameter)-.15 E F0 .043 -(starting at the character speci\214ed by)2.542 F F1(of)2.543 E(fset) --.18 E F0 .043(and e)2.543 F .043(xtending to the)-.15 F .847 -(end of the v)144 192 R(alue.)-.25 E F1(length)5.846 E F0(and)3.346 E F1 -(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F .846 -(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .846(ARITHMETIC EV)3.346 F -(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 204 Q(w\).)-.25 E -(If)144 228 Q F1(of)3.028 E(fset)-.18 E F0 -.25(eva)3.029 G .529 +5.077 -.65(w. I)-.25 H(f).65 E F1(length)3.777 E F0 1.278(is omitted, e) +3.778 F 1.278(xpands to the)-.15 F .043(substring of the v)144 564 R +.043(alue of)-.25 F F1(par)2.543 E(ameter)-.15 E F0 .042 +(starting at the character speci\214ed by)2.543 F F1(of)2.542 E(fset) +-.18 E F0 .042(and e)2.542 F .042(xtending to the)-.15 F .846 +(end of the v)144 576 R(alue.)-.25 E F1(length)5.846 E F0(and)3.346 E F1 +(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F .847 +(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .847(ARITHMETIC EV)3.347 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 588 Q(w\).)-.25 E +(If)144 612 Q F1(of)3.029 E(fset)-.18 E F0 -.25(eva)3.029 G .529 (luates to a number less than zero, the v).25 F .529 (alue is used as an of)-.25 F .529(fset in characters from the)-.25 F -.046(end of the v)144 240 R .046(alue of)-.25 F F1(par)2.546 E(ameter) +.045(end of the v)144 624 R .045(alue of)-.25 F F1(par)2.546 E(ameter) -.15 E F0 5.046(.I)C(f)-5.046 E F1(length)2.546 E F0 -.25(eva)2.546 G .046(luates to a number less than zero, it is interpreted as an).25 F -(of)144 252 Q .202(fset in characters from the end of the v)-.25 F .202 -(alue of)-.25 F F1(par)2.702 E(ameter)-.15 E F0 .203 -(rather than a number of characters, and)2.702 F .558(the e)144 264 R -.558(xpansion is the characters between)-.15 F F1(of)3.058 E(fset)-.18 E -F0 .558(and that result.)3.058 F .557(Note that a ne)5.557 F -.05(ga) --.15 G(ti).05 E .857 -.15(ve o)-.25 H -.25(ff).15 G .557(set must be).25 -F(separated from the colon by at least one space to a)144 276 Q -.2(vo) +(of)144 636 Q .203(fset in characters from the end of the v)-.25 F .202 +(alue of)-.25 F F1(par)2.702 E(ameter)-.15 E F0 .202 +(rather than a number of characters, and)2.702 F .557(the e)144 648 R +.557(xpansion is the characters between)-.15 F F1(of)3.057 E(fset)-.18 E +F0 .557(and that result.)3.057 F .558(Note that a ne)5.558 F -.05(ga) +-.15 G(ti).05 E .858 -.15(ve o)-.25 H -.25(ff).15 G .558(set must be).25 +F(separated from the colon by at least one space to a)144 660 Q -.2(vo) -.2 G(id being confused with the).2 E F2(:-)2.5 E F0 -.15(ex)2.5 G -(pansion.).15 E(If)144 300 Q F1(par)2.958 E(ameter)-.15 E F0(is)2.958 E -F2(@)2.958 E F0 2.958(,t)C .458(he result is)-2.958 F F1(length)2.959 E -F0 .459(positional parameters be)2.959 F .459(ginning at)-.15 F F1(of) -2.959 E(fset)-.18 E F0 5.459(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15 -(ve)-.25 G F1(of)3.109 E(fset)-.18 E F0 .6(is tak)144 312 R .6 +(pansion.).15 E(If)144 684 Q F1(par)2.959 E(ameter)-.15 E F0(is)2.959 E +F2(@)2.959 E F0 2.959(,t)C .459(he result is)-2.959 F F1(length)2.959 E +F0 .459(positional parameters be)2.959 F .458(ginning at)-.15 F F1(of) +2.958 E(fset)-.18 E F0 5.458(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15 +(ve)-.25 G F1(of)3.108 E(fset)-.18 E F0 .6(is tak)144 696 R .6 (en relati)-.1 F .9 -.15(ve t)-.25 H 3.1(oo).15 G .6 (ne greater than the greatest positional parameter)-3.1 F 3.1(,s)-.4 G 3.1(oa)-3.1 G 3.1(no)-3.1 G -.25(ff)-3.1 G .6(set of \2551 e).25 F -.25 -(va)-.25 G(luates).25 E .639(to the last positional parameter)144 324 R -5.639(.I)-.55 G 3.139(ti)-5.639 G 3.139(sa)-3.139 G 3.139(ne)-3.139 G -.639(xpansion error if)-3.289 F F1(length)3.14 E F0 -.25(eva)3.14 G .64 -(luates to a number less than).25 F(zero.)144 336 Q(If)144 360 Q F1(par) -3.014 E(ameter)-.15 E F0 .514(is an inde)3.014 F -.15(xe)-.15 G 3.014 -(da).15 G .514(rray name subscripted by @ or *, the result is the)-3.014 -F F1(length)3.014 E F0 .513(members of)3.013 F 1.081(the array be)144 -372 R 1.081(ginning with ${)-.15 F F1(par)A(ameter)-.15 E F0([)A F1(of)A -(fset)-.18 E F0 3.581(]}. A)B(ne)3.581 E -.05(ga)-.15 G(ti).05 E -.15 -(ve)-.25 G F1(of)3.732 E(fset)-.18 E F0 1.082(is tak)3.582 F 1.082 -(en relati)-.1 F 1.382 -.15(ve t)-.25 H 3.582(oo).15 G 1.082(ne greater) --3.582 F 1.08(than the maximum inde)144 384 R 3.58(xo)-.15 G 3.58(ft) --3.58 G 1.08(he speci\214ed array)-3.58 F 6.079(.I)-.65 G 3.579(ti) --6.079 G 3.579(sa)-3.579 G 3.579(ne)-3.579 G 1.079(xpansion error if) --3.729 F F1(length)3.579 E F0 -.25(eva)3.579 G 1.079(luates to a).25 F -(number less than zero.)144 396 Q(Substring e)144 420 Q -(xpansion applied to an associati)-.15 E .3 -.15(ve a)-.25 H -(rray produces unde\214ned results.).15 E .82(Substring inde)144 444 R -.821(xing is zero-based unless the positional parameters are used, in w\ -hich case the in-)-.15 F(de)144 456 Q .159(xing starts at 1 by def)-.15 -F 2.659(ault. If)-.1 F F1(of)2.659 E(fset)-.18 E F0 .159 -(is 0, and the positional parameters are used,)2.659 F F2($0)2.659 E F0 -.159(is pre\214x)2.659 F .158(ed to)-.15 F(the list.)144 468 Q(${)108 -484.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A F0(})A(${)108 496.8 Q F2(!)A -F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2 .084(Names matching pr)144 508.8 -R(e\214x)-.18 E F0 5.084(.E)C .084(xpands to the names of v)-5.084 F -.084(ariables whose names be)-.25 F .085(gin with)-.15 F F1(pr)2.585 E -(e\214x)-.37 E F0 2.585(,s)C(epa-)-2.585 E .258 -(rated by the \214rst character of the)144 520.8 R F3(IFS)2.758 E F0 -.257(special v)2.507 F 2.757(ariable. When)-.25 F F1(@)2.757 E F0 .257 -(is used and the e)2.757 F .257(xpansion appears)-.15 F -(within double quotes, each v)144 532.8 Q(ariable name e)-.25 E -(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 549.6 Q F2(!)A F1(name) -A F0([)A F1(@)A F0(]})A(${)108 561.6 Q F2(!)A F1(name)A F0([)A F1(*)A F0 -(]})A F2 1.136(List of array k)144 573.6 R(eys)-.1 E F0 6.136(.I)C(f) --6.136 E F1(name)3.636 E F0 1.136(is an array v)3.636 F 1.136 -(ariable, e)-.25 F 1.136(xpands to the list of array indices \(k)-.15 F --.15(ey)-.1 G 1.137(s\) as-).15 F .397(signed in)144 585.6 R F1(name) -2.897 E F0 5.397(.I)C(f)-5.397 E F1(name)2.897 E F0 .397 -(is not an array)2.897 F 2.897(,e)-.65 G .397(xpands to 0 if)-3.047 F F1 -(name)2.897 E F0 .397(is set and null otherwise.)2.897 F(When)5.397 E F1 -(@)2.897 E F0(is used and the e)144 597.6 Q -(xpansion appears within double quotes, each k)-.15 E .3 -.15(ey ex)-.1 -H(pands to a separate w).15 E(ord.)-.1 E(${)108 614.4 Q F2(#)A F1(par)A -(ameter)-.15 E F0(})A F2 -.1(Pa)144 626.4 S .47(rameter length).1 F F0 -5.47(.T)C .471(he length in characters of the v)-5.47 F .471(alue of) --.25 F F1(par)2.971 E(ameter)-.15 E F0 .471(is substituted.)2.971 F(If) -5.471 E F1(par)4.221 E(ame-)-.15 E(ter)144 638.4 Q F0(is)3.627 E F2(*) -2.897 E F0(or)2.897 E F2(@)2.897 E F0 2.897(,t)C .397(he v)-2.897 F .397 -(alue substituted is the number of positional parameters.)-.25 F(If) -5.396 E F1(par)4.146 E(ameter)-.15 E F0 .396(is an ar)3.626 F(-)-.2 E -.78(ray name subscripted by)144 650.4 R F2(*)3.28 E F0(or)3.28 E F2(@) -3.28 E F0 3.28(,t)C .78(he v)-3.28 F .781 -(alue substituted is the number of elements in the array)-.25 F 5.781 -(.I)-.65 G(f)-5.781 E F1(par)145.25 662.4 Q(ameter)-.15 E F0 .456 -(is an inde)3.686 F -.15(xe)-.15 G 2.956(da).15 G .456 -(rray name subscripted by a ne)-2.956 F -.05(ga)-.15 G(ti).05 E .756 --.15(ve n)-.25 H(umber).15 E 2.955(,t)-.4 G .455 -(hat number is interpreted)-2.955 F .972(as relati)144 674.4 R 1.272 --.15(ve t)-.25 H 3.472(oo).15 G .973(ne greater than the maximum inde) --3.472 F 3.473(xo)-.15 G(f)-3.473 E F1(par)3.473 E(ameter)-.15 E F0 -3.473(,s)C 3.473(on)-3.473 G -2.25 -.15(eg a)-3.473 H(ti).15 E 1.273 --.15(ve i)-.25 H .973(ndices count back).15 F(from the end of the array) -144 686.4 Q 2.5(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 -G 2.5(1r)-2.5 G(eferences the last element.)-2.5 E(${)108 703.2 Q F1 -(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(GNU Bash 5.1)72 768 -Q(2020 October 29)141.235 E(23)190.395 E 0 Cg EP +(va)-.25 G(luates).25 E .64(to the last positional parameter)144 708 R +5.64(.I)-.55 G 3.14(ti)-5.64 G 3.14(sa)-3.14 G 3.139(ne)-3.14 G .639 +(xpansion error if)-3.289 F F1(length)3.139 E F0 -.25(eva)3.139 G .639 +(luates to a number less than).25 F(zero.)144 720 Q(GNU Bash 5.2)72 768 +Q(2021 December 26)136.795 E(23)185.955 E 0 Cg EP %%Page: 24 24 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(${)108 84 Q/F1 10 -/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(##)A F1 -(wor)A(d)-.37 E F0(})A F2(Remo)144 96 Q 1.396 -.1(ve m)-.1 H 1.196 -(atching pr).1 F 1.196(e\214x patter)-.18 F(n)-.15 E F0 6.196(.T)C(he) --6.196 E F1(wor)4.036 E(d)-.37 E F0 1.196(is e)4.466 F 1.196 -(xpanded to produce a pattern just as in path-)-.15 F .543(name e)144 -108 R .544(xpansion, and matched ag)-.15 F .544(ainst the e)-.05 F .544 -(xpanded v)-.15 F .544(alue of)-.25 F F1(par)4.294 E(ameter)-.15 E F0 -.544(using the rules described)3.774 F(under)144 120 Q F2 -.1(Pa)3.133 G -(tter).1 E 3.133(nM)-.15 G(atching)-3.133 E F0(belo)3.132 E 4.432 -.65 -(w. I)-.25 H 3.132(ft).65 G .632(he pattern matches the be)-3.132 F .632 -(ginning of the v)-.15 F .632(alue of)-.25 F F1(par)4.382 E(ameter)-.15 -E F0(,).73 E 1.151(then the result of the e)144 132 R 1.151 -(xpansion is the e)-.15 F 1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F1 -(par)4.902 E(ameter)-.15 E F0 1.152(with the shortest matching)4.382 F -.184(pattern \(the `)144 144 R(`)-.74 E F2(#)A F0 1.664 -.74('' c)D .184 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(If)144 84 Q/F1 10 +/Times-Italic@0 SF(par)3.013 E(ameter)-.15 E F0 .514(is an inde)3.013 F +-.15(xe)-.15 G 3.014(da).15 G .514 +(rray name subscripted by @ or *, the result is the)-3.014 F F1(length) +3.014 E F0 .514(members of)3.014 F 1.082(the array be)144 96 R 1.082 +(ginning with ${)-.15 F F1(par)A(ameter)-.15 E F0([)A F1(of)A(fset)-.18 +E F0 3.582(]}. A)B(ne)3.582 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G F1 +(of)3.732 E(fset)-.18 E F0 1.081(is tak)3.581 F 1.081(en relati)-.1 F +1.381 -.15(ve t)-.25 H 3.581(oo).15 G 1.081(ne greater)-3.581 F 1.079 +(than the maximum inde)144 108 R 3.579(xo)-.15 G 3.579(ft)-3.579 G 1.079 +(he speci\214ed array)-3.579 F 6.079(.I)-.65 G 3.579(ti)-6.079 G 3.579 +(sa)-3.579 G 3.58(ne)-3.579 G 1.08(xpansion error if)-3.73 F F1(length) +3.58 E F0 -.25(eva)3.58 G 1.08(luates to a).25 F(number less than zero.) +144 120 Q(Substring e)144 144 Q(xpansion applied to an associati)-.15 E +.3 -.15(ve a)-.25 H(rray produces unde\214ned results.).15 E .821 +(Substring inde)144 168 R .821(xing is zero-based unless the positional\ + parameters are used, in which case the in-)-.15 F(de)144 180 Q .159 +(xing starts at 1 by def)-.15 F 2.659(ault. If)-.1 F F1(of)2.659 E(fset) +-.18 E F0 .159(is 0, and the positional parameters are used,)2.659 F/F2 +10/Times-Bold@0 SF($0)2.659 E F0 .159(is pre\214x)2.659 F .159(ed to) +-.15 F(the list.)144 192 Q(${)108 208.8 Q F2(!)A F1(pr)A(e\214x)-.37 E +F2(*)A F0(})A(${)108 220.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A +F2 .085(Names matching pr)144 232.8 R(e\214x)-.18 E F0 5.085(.E)C .084 +(xpands to the names of v)-5.085 F .084(ariables whose names be)-.25 F +.084(gin with)-.15 F F1(pr)2.584 E(e\214x)-.37 E F0 2.584(,s)C(epa-) +-2.584 E .257(rated by the \214rst character of the)144 244.8 R/F3 9 +/Times-Bold@0 SF(IFS)2.757 E F0 .257(special v)2.507 F 2.757 +(ariable. When)-.25 F F1(@)2.758 E F0 .258(is used and the e)2.758 F +.258(xpansion appears)-.15 F(within double quotes, each v)144 256.8 Q +(ariable name e)-.25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 +273.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 285.6 Q F2(!)A F1 +(name)A F0([)A F1(*)A F0(]})A F2 1.137(List of array k)144 297.6 R(eys) +-.1 E F0 6.136(.I)C(f)-6.136 E F1(name)3.636 E F0 1.136(is an array v) +3.636 F 1.136(ariable, e)-.25 F 1.136 +(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G 1.136 +(s\) as-).15 F .397(signed in)144 309.6 R F1(name)2.897 E F0 5.397(.I)C +(f)-5.397 E F1(name)2.897 E F0 .397(is not an array)2.897 F 2.897(,e) +-.65 G .397(xpands to 0 if)-3.047 F F1(name)2.897 E F0 .397 +(is set and null otherwise.)2.897 F(When)5.397 E F1(@)2.897 E F0 +(is used and the e)144 321.6 Q +(xpansion appears within double quotes, each k)-.15 E .3 -.15(ey ex)-.1 +H(pands to a separate w).15 E(ord.)-.1 E(${)108 338.4 Q F2(#)A F1(par)A +(ameter)-.15 E F0(})A F2 -.1(Pa)144 350.4 S .471(rameter length).1 F F0 +5.471(.T)C .471(he length in characters of the v)-5.471 F .471(alue of) +-.25 F F1(par)2.971 E(ameter)-.15 E F0 .47(is substituted.)2.97 F(If) +5.47 E F1(par)4.22 E(ame-)-.15 E(ter)144 362.4 Q F0(is)3.626 E F2(*) +2.896 E F0(or)2.896 E F2(@)2.896 E F0 2.896(,t)C .396(he v)-2.896 F .397 +(alue substituted is the number of positional parameters.)-.25 F(If) +5.397 E F1(par)4.147 E(ameter)-.15 E F0 .397(is an ar)3.627 F(-)-.2 E +.781(ray name subscripted by)144 374.4 R F2(*)3.281 E F0(or)3.281 E F2 +(@)3.281 E F0 3.281(,t)C .781(he v)-3.281 F .78 +(alue substituted is the number of elements in the array)-.25 F 5.78(.I) +-.65 G(f)-5.78 E F1(par)145.25 386.4 Q(ameter)-.15 E F0 .455(is an inde) +3.685 F -.15(xe)-.15 G 2.955(da).15 G .456 +(rray name subscripted by a ne)-2.955 F -.05(ga)-.15 G(ti).05 E .756 +-.15(ve n)-.25 H(umber).15 E 2.956(,t)-.4 G .456 +(hat number is interpreted)-2.956 F .973(as relati)144 398.4 R 1.273 +-.15(ve t)-.25 H 3.473(oo).15 G .973(ne greater than the maximum inde) +-3.473 F 3.473(xo)-.15 G(f)-3.473 E F1(par)3.473 E(ameter)-.15 E F0 +3.472(,s)C 3.472(on)-3.472 G -2.25 -.15(eg a)-3.472 H(ti).15 E 1.272 +-.15(ve i)-.25 H .972(ndices count back).15 F(from the end of the array) +144 410.4 Q 2.5(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 +G 2.5(1r)-2.5 G(eferences the last element.)-2.5 E(${)108 427.2 Q F1 +(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(${)108 439.2 Q F1 +(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 451.2 +Q 1.396 -.1(ve m)-.1 H 1.196(atching pr).1 F 1.196(e\214x patter)-.18 F +(n)-.15 E F0 6.196(.T)C(he)-6.196 E F1(wor)4.036 E(d)-.37 E F0 1.196 +(is e)4.466 F 1.196(xpanded to produce a pattern just as in path-)-.15 F +.544(name e)144 463.2 R .544(xpansion, and matched ag)-.15 F .544 +(ainst the e)-.05 F .544(xpanded v)-.15 F .544(alue of)-.25 F F1(par) +4.294 E(ameter)-.15 E F0 .543(using the rules described)3.774 F(under) +144 475.2 Q F2 -.1(Pa)3.132 G(tter).1 E 3.132(nM)-.15 G(atching)-3.132 E +F0(belo)3.132 E 4.432 -.65(w. I)-.25 H 3.132(ft).65 G .632 +(he pattern matches the be)-3.132 F .632(ginning of the v)-.15 F .633 +(alue of)-.25 F F1(par)4.383 E(ameter)-.15 E F0(,).73 E 1.152 +(then the result of the e)144 487.2 R 1.151(xpansion is the e)-.15 F +1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F1(par)4.901 E(ameter)-.15 E +F0 1.151(with the shortest matching)4.381 F .183(pattern \(the `)144 +499.2 R(`)-.74 E F2(#)A F0 1.663 -.74('' c)D .184 (ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(##)A F0 -1.664 -.74('' c)D .184(ase\) deleted.).74 F(If)5.183 E F1(par)3.933 E -(ameter)-.15 E F0(is)3.413 E F2(@)2.683 E F0(or)144 156 Q F2(*)3.018 E -F0 3.018(,t)C .518(he pattern remo)-3.018 F -.25(va)-.15 G 3.018(lo).25 +1.664 -.74('' c)D .184(ase\) deleted.).74 F(If)5.184 E F1(par)3.934 E +(ameter)-.15 E F0(is)3.414 E F2(@)2.684 E F0(or)144 511.2 Q F2(*)3.019 E +F0 3.019(,t)C .518(he pattern remo)-3.019 F -.25(va)-.15 G 3.018(lo).25 G .518 (peration is applied to each positional parameter in turn, and the e) --3.018 F(xpan-)-.15 E .304(sion is the resultant list.)144 168 R(If) -5.304 E F1(par)4.054 E(ameter)-.15 E F0 .303(is an array v)3.533 F .303 -(ariable subscripted with)-.25 F F2(@)2.803 E F0(or)2.803 E F2(*)2.803 E -F0 2.803(,t)C .303(he pattern re-)-2.803 F(mo)144 180 Q -.25(va)-.15 G -2.987(lo).25 G .487 +-3.018 F(xpan-)-.15 E .303(sion is the resultant list.)144 523.2 R(If) +5.303 E F1(par)4.053 E(ameter)-.15 E F0 .303(is an array v)3.533 F .303 +(ariable subscripted with)-.25 F F2(@)2.804 E F0(or)2.804 E F2(*)2.804 E +F0 2.804(,t)C .304(he pattern re-)-2.804 F(mo)144 535.2 Q -.25(va)-.15 G +2.988(lo).25 G .487 (peration is applied to each member of the array in turn, and the e) --2.987 F .487(xpansion is the resultant)-.15 F(list.)144 192 Q(${)108 -208.8 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 -220.8 Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo) -144 232.8 Q .347 -.1(ve m)-.1 H .147(atching suf\214x patter).1 F(n)-.15 -E F0 5.147(.T)C(he)-5.147 E F1(wor)2.647 E(d)-.37 E F0 .147(is e)2.647 F -.146(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 -244.8 S .458(pansion, and matched ag).15 F .458(ainst the e)-.05 F .458 -(xpanded v)-.15 F .458(alue of)-.25 F F1(par)4.209 E(ameter)-.15 E F0 -.459(using the rules described under)3.689 F F2 -.1(Pa)144 256.8 S(tter) -.1 E 3.314(nM)-.15 G(atching)-3.314 E F0(belo)3.314 E 4.614 -.65(w. I) --.25 H 3.314(ft).65 G .814 -(he pattern matches a trailing portion of the e)-3.314 F .814(xpanded v) --.15 F .814(alue of)-.25 F F1(pa-)4.564 E -.15(ra)144 268.8 S(meter).15 -E F0 3.816(,t).73 G 1.316(hen the result of the e)-3.816 F 1.317 -(xpansion is the e)-.15 F 1.317(xpanded v)-.15 F 1.317(alue of)-.25 F F1 -(par)5.067 E(ameter)-.15 E F0 1.317(with the shortest)4.547 F 1.085 -(matching pattern \(the `)144 280.8 R(`)-.74 E F2(%)A F0 2.565 -.74 -('' c)D 1.084(ase\) or the longest matching pattern \(the `).74 F(`)-.74 -E F2(%%)A F0 2.564 -.74('' c)D 1.084(ase\) deleted.).74 F(If)6.084 E F1 -(par)145.25 292.8 Q(ameter)-.15 E F0(is)3.389 E F2(@)2.659 E F0(or)2.659 -E F2(*)2.659 E F0 2.659(,t)C .159(he pattern remo)-2.659 F -.25(va)-.15 -G 2.659(lo).25 G .16 -(peration is applied to each positional parameter in turn,)-2.659 F .51 -(and the e)144 304.8 R .51(xpansion is the resultant list.)-.15 F(If) -5.51 E F1(par)4.259 E(ameter)-.15 E F0 .509(is an array v)3.739 F .509 -(ariable subscripted with)-.25 F F2(@)3.009 E F0(or)3.009 E F2(*)3.009 E -F0(,)A .422(the pattern remo)144 316.8 R -.25(va)-.15 G 2.922(lo).25 G -.422(peration is applied to each member of the array in turn, and the e) --2.922 F .423(xpansion is)-.15 F(the resultant list.)144 328.8 Q(${)108 -345.6 Q F1(par)A(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0 -(})A F2 -.1(Pa)144 357.6 S(tter).1 E 3.607(ns)-.15 G(ubstitution)-3.607 -E F0 6.107(.T)C(he)-6.107 E F1(pattern)3.607 E F0 1.107(is e)3.607 F -1.106(xpanded to produce a pattern just as in pathname e)-.15 F(xpan-) --.15 E(sion,)144 369.6 Q F1 -.8(Pa)3.7 G -.15(ra).8 G(meter).15 E F0 1.2 -(is e)3.7 F 1.2(xpanded and the longest match of)-.15 F F1(pattern)3.7 E -F0(ag)3.7 E 1.2(ainst its v)-.05 F 1.2(alue is replaced with)-.25 F F1 -(string)144 381.6 Q F0 5.397(.T)C .397 -(he match is performed using the rules described under)-5.397 F F2 -.1 -(Pa)2.896 G(tter).1 E 2.896(nM)-.15 G(atching)-2.896 E F0(belo)2.896 E -4.196 -.65(w. I)-.25 H(f).65 E F1(pat-)2.896 E(tern)144 393.6 Q F0(be) -2.569 E .069(gins with)-.15 F F2(/)2.569 E F0 2.569(,a)C .069 -(ll matches of)-2.569 F F1(pattern)2.569 E F0 .069(are replaced with) -2.569 F F1(string)2.57 E F0 5.07(.N)C .07 -(ormally only the \214rst match is)-5.07 F 2.58(replaced. If)144 405.6 R -F1(pattern)2.58 E F0(be)2.58 E .08(gins with)-.15 F F2(#)2.58 E F0 2.58 -(,i)C 2.58(tm)-2.58 G .079(ust match at the be)-2.58 F .079 -(ginning of the e)-.15 F .079(xpanded v)-.15 F .079(alue of)-.25 F F1 -(par)2.579 E(am-)-.15 E(eter)144 417.6 Q F0 5.761(.I)C(f)-5.761 E F1 -(pattern)3.261 E F0(be)3.261 E .761(gins with)-.15 F F2(%)3.261 E F0 -3.261(,i)C 3.261(tm)-3.261 G .761(ust match at the end of the e)-3.261 F -.761(xpanded v)-.15 F .761(alue of)-.25 F F1(par)3.262 E(ameter)-.15 E -F0 5.762(.I)C(f)-5.762 E F1(string)144 429.6 Q F0 .958 -(is null, matches of)3.458 F F1(pattern)3.458 E F0 .958 -(are deleted and the)3.458 F F2(/)3.458 E F0(follo)3.458 E(wing)-.25 E -F1(pattern)3.457 E F0 .957(may be omitted.)3.457 F .957(If the)5.957 F -F2(nocasematch)144 441.6 Q F0 .492 -(shell option is enabled, the match is performed without re)2.992 F -.05 -(ga)-.15 G .492(rd to the case of alpha-).05 F .884(betic characters.) -144 453.6 R(If)5.884 E F1(par)4.634 E(ameter)-.15 E F0(is)4.114 E F2(@) -3.384 E F0(or)3.383 E F2(*)3.383 E F0 3.383(,t)C .883 -(he substitution operation is applied to each positional)-3.383 F 1.002 -(parameter in turn, and the e)144 465.6 R 1.002 -(xpansion is the resultant list.)-.15 F(If)6.002 E F1(par)4.752 E -(ameter)-.15 E F0 1.002(is an array v)4.232 F 1.002(ariable sub-)-.25 F -.159(scripted with)144 477.6 R F2(@)2.659 E F0(or)2.659 E F2(*)2.659 E -F0 2.659(,t)C .159(he substitution operation is applied to each member \ -of the array in turn, and)-2.659 F(the e)144 489.6 Q -(xpansion is the resultant list.)-.15 E(${)108 506.4 Q F1(par)A(ameter) --.15 E F2(^)A F1(pattern)A F0(})A(${)108 518.4 Q F1(par)A(ameter)-.15 E -F2(^^)A F1(pattern)A F0(})A(${)108 530.4 Q F1(par)A(ameter)-.15 E F2(,)A -F1(pattern)A F0(})A(${)108 542.4 Q F1(par)A(ameter)-.15 E F2(,,)A F1 -(pattern)A F0(})A F2 .437(Case modi\214cation)144 554.4 R F0 5.437(.T)C -.437(his e)-5.437 F .438 -(xpansion modi\214es the case of alphabetic characters in)-.15 F F1(par) -2.938 E(ameter)-.15 E F0 5.438(.T)C(he)-5.438 E F1(pattern)144 566.4 Q -F0 .374(is e)2.874 F .374 -(xpanded to produce a pattern just as in pathname e)-.15 F 2.874 -(xpansion. Each)-.15 F .373(character in the e)2.873 F(x-)-.15 E .513 -(panded v)144 578.4 R .513(alue of)-.25 F F1(par)3.013 E(ameter)-.15 E -F0 .513(is tested ag)3.013 F(ainst)-.05 E F1(pattern)3.013 E F0 3.013 -(,a)C .514(nd, if it matches the pattern, its case is con-)-3.013 F -.15 -(ve)144 590.4 S 2.823(rted. The).15 F .323 -(pattern should not attempt to match more than one character)2.823 F -5.322(.T)-.55 G(he)-5.322 E F2(^)2.822 E F0 .322(operator con)2.822 F --.15(ve)-.4 G(rts).15 E(lo)144 602.4 Q .18(wercase letters matching)-.25 -F F1(pattern)2.681 E F0 .181(to uppercase; the)2.681 F F2(,)2.681 E F0 -.181(operator con)2.681 F -.15(ve)-.4 G .181 -(rts matching uppercase letters).15 F .085(to lo)144 614.4 R 2.585 -(wercase. The)-.25 F F2(^^)2.585 E F0(and)2.585 E F2(,,)2.585 E F0 -.15 -(ex)2.585 G .085(pansions con).15 F -.15(ve)-.4 G .085 -(rt each matched character in the e).15 F .085(xpanded v)-.15 F .085 -(alue; the)-.25 F F2(^)2.585 E F0(and)144 626.4 Q F2(,)3.59 E F0 -.15 -(ex)3.59 G 1.09(pansions match and con).15 F -.15(ve)-.4 G 1.091 -(rt only the \214rst character in the e).15 F 1.091(xpanded v)-.15 F -3.591(alue. If)-.25 F F1(pattern)3.591 E F0(is)3.591 E 1.121 -(omitted, it is treated lik)144 638.4 R 3.621(ea)-.1 G F2(?)A F0 3.621 -(,w)C 1.121(hich matches e)-3.621 F -.15(ve)-.25 G 1.121(ry character) -.15 F 6.12(.I)-.55 G(f)-6.12 E F1(par)4.87 E(ameter)-.15 E F0(is)4.35 E -F2(@)3.62 E F0(or)3.62 E F2(*)3.62 E F0 3.62(,t)C 1.12(he case)-3.62 F -.339(modi\214cation operation is applied to each positional parameter i\ -n turn, and the e)144 650.4 R .34(xpansion is the re-)-.15 F .25 -(sultant list.)144 662.4 R(If)5.25 E F1(par)4 E(ameter)-.15 E F0 .25 -(is an array v)3.48 F .249(ariable subscripted with)-.25 F F2(@)2.749 E -F0(or)2.749 E F2(*)2.749 E F0 2.749(,t)C .249 -(he case modi\214cation oper)-2.749 F(-)-.2 E -(ation is applied to each member of the array in turn, and the e)144 -674.4 Q(xpansion is the resultant list.)-.15 E(${)108 691.2 Q F1(par)A -(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 703.2 S -.86(rameter transf).1 F(ormation)-.25 E F0 5.86(.T)C .86(he e)-5.86 F -.86(xpansion is either a transformation of the v)-.15 F .86(alue of)-.25 -F F1(par)3.36 E(ameter)-.15 E F0 .154(or information about)144 715.2 R -F1(par)2.654 E(ameter)-.15 E F0 .153(itself, depending on the v)2.654 F -.153(alue of)-.25 F F1(oper)2.653 E(ator)-.15 E F0 5.153(.E)C(ach)-5.153 -E F1(oper)2.653 E(ator)-.15 E F0 .153(is a sin-)2.653 F(gle letter:)144 -727.2 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(24)190.395 E 0 -Cg EP +-2.988 F .487(xpansion is the resultant)-.15 F(list.)144 547.2 Q(${)108 +564 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 576 +Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 +588 Q .346 -.1(ve m)-.1 H .146(atching suf\214x patter).1 F(n)-.15 E F0 +5.146(.T)C(he)-5.146 E F1(wor)2.646 E(d)-.37 E F0 .147(is e)2.647 F .147 +(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 600 +S .459(pansion, and matched ag).15 F .459(ainst the e)-.05 F .459 +(xpanded v)-.15 F .458(alue of)-.25 F F1(par)4.208 E(ameter)-.15 E F0 +.458(using the rules described under)3.688 F F2 -.1(Pa)144 612 S(tter).1 +E 3.314(nM)-.15 G(atching)-3.314 E F0(belo)3.314 E 4.614 -.65(w. I)-.25 +H 3.314(ft).65 G .814(he pattern matches a trailing portion of the e) +-3.314 F .814(xpanded v)-.15 F .814(alue of)-.25 F F1(pa-)4.564 E -.15 +(ra)144 624 S(meter).15 E F0 3.817(,t).73 G 1.317 +(hen the result of the e)-3.817 F 1.317(xpansion is the e)-.15 F 1.317 +(xpanded v)-.15 F 1.316(alue of)-.25 F F1(par)5.066 E(ameter)-.15 E F0 +1.316(with the shortest)4.546 F 1.084(matching pattern \(the `)144 636 R +(`)-.74 E F2(%)A F0 2.564 -.74('' c)D 1.084 +(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(%%)A F0 +2.565 -.74('' c)D 1.085(ase\) deleted.).74 F(If)6.085 E F1(par)145.25 +648 Q(ameter)-.15 E F0(is)3.39 E F2(@)2.66 E F0(or)2.66 E F2(*)2.66 E F0 +2.66(,t)C .16(he pattern remo)-2.66 F -.25(va)-.15 G 2.659(lo).25 G .159 +(peration is applied to each positional parameter in turn,)-2.659 F .509 +(and the e)144 660 R .509(xpansion is the resultant list.)-.15 F(If) +5.509 E F1(par)4.259 E(ameter)-.15 E F0 .51(is an array v)3.739 F .51 +(ariable subscripted with)-.25 F F2(@)3.01 E F0(or)3.01 E F2(*)3.01 E F0 +(,)A .423(the pattern remo)144 672 R -.25(va)-.15 G 2.923(lo).25 G .422 +(peration is applied to each member of the array in turn, and the e) +-2.923 F .422(xpansion is)-.15 F(the resultant list.)144 684 Q(${)108 +700.8 Q F1(par)A(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0 +(})A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(24)185.955 E 0 Cg +EP %%Page: 25 25 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(U)144 84 Q F0 .142(The e)180 84 R .142 -(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F/F2 10 -/Times-Italic@0 SF(par)2.642 E(ameter)-.15 E F0 .142(with lo)2.642 F -.143(wercase alphabetic charac-)-.25 F(ters con)180 96 Q -.15(ve)-.4 G -(rted to uppercase.).15 E F1(u)144 108 Q F0 .43(The e)180 108 R .43 -(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F2(par) -2.929 E(ameter)-.15 E F0 .429(with the \214rst character con)2.929 F --.15(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 120 Q F1 -(L)144 132 Q F0 .124(The e)180 132 R .124 -(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F2(par) -2.624 E(ameter)-.15 E F0 .125(with uppercase alphabetic charac-)2.625 F -(ters con)180 144 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F1(Q) -144 156 Q F0 1.065(The e)180 156 R 1.065 -(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F2(par) -3.565 E(ameter)-.15 E F0 1.064(quoted in a format that can be)3.565 F -(reused as input.)180 168 Q F1(E)144 180 Q F0 .44(The e)180 180 R .441 -(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F F2(par) -2.941 E(ameter)-.15 E F0 .441(with backslash escape sequences)2.941 F --.15(ex)180 192 S(panded as with the).15 E F1($'...)2.5 E(')-.55 E F0 -(quoting mechanism.)2.5 E F1(P)144 204 Q F0 1.073(The e)180 204 R 1.073 -(xpansion is a string that is the result of e)-.15 F 1.073 -(xpanding the v)-.15 F 1.073(alue of)-.25 F F2(par)3.573 E(ameter)-.15 E -F0 1.073(as if it)3.573 F(were a prompt string \(see)180 216 Q F1(PR)2.5 -E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F1(A)144 228 Q F0 1.137(The e) -180 228 R 1.138 -(xpansion is a string in the form of an assignment statement or)-.15 F -F1(declar)3.638 E(e)-.18 E F0(command)3.638 E(that, if e)180 240 Q -.25 -(va)-.25 G(luated, will recreate).25 E F2(par)2.5 E(ameter)-.15 E F0 -(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F1(K)144 252 Q F0 -1.34(Produces a possibly-quoted v)180 252 R 1.339(ersion of the v)-.15 F -1.339(alue of)-.25 F F2(par)3.839 E(ameter)-.15 E F0 3.839(,e)C 1.339 -(xcept that it prints the)-3.989 F -.25(va)180 264 S .257(lues of inde) -.25 F -.15(xe)-.15 G 2.757(da).15 G .257(nd associati)-2.757 F .557 -.15 -(ve a)-.25 H .257(rrays as a sequence of quoted k).15 F -.15(ey)-.1 G -(-v).15 E .257(alue pairs \(see)-.25 F F1(Ar)2.758 E(-)-.37 E(rays)180 -276 Q F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(a)144 288 Q F0(The e)180 -288 Q(xpansion is a string consisting of \215ag v)-.15 E -(alues representing)-.25 E F2(par)2.5 E(ameter)-.15 E F0 1.1 -.55('s a)D -(ttrib).55 E(utes.)-.2 E(If)144 304.8 Q F2(par)4.403 E(ameter)-.15 E F0 -(is)3.883 E F1(@)3.153 E F0(or)3.153 E F1(*)3.153 E F0 3.153(,t)C .653(\ -he operation is applied to each positional parameter in turn, and the e) --3.153 F(x-)-.15 E .403(pansion is the resultant list.)144 316.8 R(If) -5.403 E F2(par)4.153 E(ameter)-.15 E F0 .403(is an array v)3.633 F .403 -(ariable subscripted with)-.25 F F1(@)2.903 E F0(or)2.903 E F1(*)2.903 E -F0 2.903(,t)C .403(he opera-)-2.903 F -(tion is applied to each member of the array in turn, and the e)144 -328.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e) -144 352.8 R .708(xpansion is subject to w)-.15 F .708 -(ord splitting and pathname e)-.1 F .708(xpansion as described be-)-.15 -F(lo)144 364.8 Q -.65(w.)-.25 G F1(Command Substitution)87 381.6 Q F2 -1.697(Command substitution)108 393.6 R F0(allo)4.197 E 1.697 -(ws the output of a command to replace the command name.)-.25 F 1.698 -(There are tw)6.698 F(o)-.1 E(forms:)108 405.6 Q F1($\()144 422.4 Q F2 -(command)A F1(\))1.666 E F0(or)108 434.4 Q F1<92>144 446.4 Q F2(command) -A F1<92>A(Bash)108 463.2 Q F0 .089(performs the e)2.589 F .089 -(xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F2(command)2.589 E F0 -.088(in a subshell en)2.589 F .088(vironment and replacing the command) --.4 F .41(substitution with the standard output of the command, with an) -108 475.2 R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.) --.25 F .41(Embedded ne)5.41 F(w-)-.25 E .192(lines are not deleted, b) -108 487.2 R .192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F --.15(ve)-.15 G 2.692(dd).15 G .192(uring w)-2.692 F .192(ord splitting.) --.1 F .192(The command substitution)5.192 F F1($\(cat)2.691 E F2(\214le) -2.691 E F1(\))A F0(can be replaced by the equi)108 499.2 Q -.25(va)-.25 -G(lent b).25 E(ut f)-.2 E(aster)-.1 E F1($\(<)2.5 E F2(\214le)2.5 E F1 -(\))A F0(.)A 1.724(When the old-style backquote form of substitution is\ - used, backslash retains its literal meaning e)108 516 R(xcept)-.15 E -.315(when follo)108 528 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1<92> -2.815 E F0 2.815(,o)C(r)-2.815 E F1(\\)2.815 E F0 5.315(.T)C .314(he \ -\214rst backquote not preceded by a backslash terminates the command su\ -b-)-5.315 F 3.886(stitution. When)108 540 R 1.386(using the $\()3.886 F -F2(command).833 E F0 3.886(\)f)1.666 G 1.387 -(orm, all characters between the parentheses mak)-3.886 F 3.887(eu)-.1 G -3.887(pt)-3.887 G 1.387(he com-)-3.887 F -(mand; none are treated specially)108 552 Q(.)-.65 E .894 -(Command substitutions may be nested.)108 568.8 R 2.494 -.8(To n)5.894 H -.894(est when using the backquoted form, escape the inner back-).8 F -(quotes with backslashes.)108 580.8 Q .422 -(If the substitution appears within double quotes, w)108 597.6 R .422 -(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15 -F(on the results.)108 609.6 Q F1(Arithmetic Expansion)87 626.4 Q F0 -1.035(Arithmetic e)108 638.4 R 1.035(xpansion allo)-.15 F 1.035 -(ws the e)-.25 F -.25(va)-.25 G 1.034(luation of an arithmetic e).25 F -1.034(xpression and the substitution of the result.)-.15 F -(The format for arithmetic e)108 650.4 Q(xpansion is:)-.15 E F1($\(\() -144 667.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 684 Q -F2 -.2(ex)2.665 G(pr).2 E(ession)-.37 E F0 .165 -(is treated as if it were within double quotes, b)2.905 F .166 -(ut a double quote inside the parentheses is not)-.2 F .231 -(treated specially)108 696 R 5.231(.A)-.65 G .231(ll tok)-5.231 F .231 -(ens in the e)-.1 F .231(xpression under)-.15 F .231(go parameter and v) --.18 F .23(ariable e)-.25 F .23(xpansion, command substi-)-.15 F .048 -(tution, and quote remo)108 708 R -.25(va)-.15 G 2.548(l. The).25 F .048 -(result is treated as the arithmetic e)2.548 F .048(xpression to be e) --.15 F -.25(va)-.25 G 2.549(luated. Arithmetic).25 F -.15(ex)2.549 G(-) -.15 E(pansions may be nested.)108 720 Q(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(25)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(${)108 84 Q/F1 10 +/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(//)A F1 +(pattern)A F2(/)A F1(string)A F0(})A(${)108 96 Q F1(par)A(ameter)-.15 E +F2(/#)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 108 Q F1(par)A +(ameter)-.15 E F2(/%)A F1(pattern)A F2(/)A F1(string)A F0(})A F2 -.1(Pa) +144 120 S(tter).1 E 3.606(ns)-.15 G(ubstitution)-3.606 E F0 6.106(.T)C +(he)-6.106 E F1(pattern)3.606 E F0 1.106(is e)3.606 F 1.107 +(xpanded to produce a pattern just as in pathname e)-.15 F(xpan-)-.15 E +(sion.)144 132 Q F1 -.8(Pa)6.034 G -.15(ra).8 G(meter).15 E F0 1.034 +(is e)3.534 F 1.033(xpanded and the longest match of)-.15 F F1(pattern) +3.533 E F0(ag)3.533 E 1.033(ainst its v)-.05 F 1.033 +(alue is replaced with)-.25 F F1(string)144 144 Q F0(.)A F1(string)5.499 +E F0(under)2.999 E .499(goes tilde e)-.18 F .499 +(xpansion, parameter and v)-.15 F .499(ariable e)-.25 F .499 +(xpansion, arithmetic e)-.15 F(xpansion,)-.15 E 1.137 +(command and process substitution, and quote remo)144 156 R -.25(va)-.15 +G 3.637(l. The).25 F 1.137(match is performed using the rules)3.637 F +.075(described under)144 168 R F2 -.1(Pa)2.575 G(tter).1 E 2.575(nM)-.15 +G(atching)-2.575 E F0(belo)2.575 E 3.875 -.65(w. I)-.25 H 2.575(nt).65 G +.075(he \214rst form abo)-2.575 F -.15(ve)-.15 G 2.575(,o).15 G .076 +(nly the \214rst match is replaced.)-2.575 F .48(If there are tw)144 180 +R 2.98(os)-.1 G .48(lashes separating)-2.98 F F1(par)2.98 E(ameter)-.15 +E F0(and)2.98 E F1(pattern)2.98 E F0 .48(\(the second form abo)2.98 F +-.15(ve)-.15 G .48(\), all matches of).15 F F1(pattern)144 192 Q F0 .374 +(are replaced with)2.874 F F1(string)2.874 E F0 5.374(.I)C(f)-5.374 E F1 +(pattern)2.874 E F0 .374(is preceded by)2.874 F F2(#)2.874 E F0 .374 +(\(the third form abo)2.874 F -.15(ve)-.15 G .375(\), it must match).15 +F .089(at the be)144 204 R .089(ginning of the e)-.15 F .088(xpanded v) +-.15 F .088(alue of)-.25 F F1(par)2.588 E(ameter)-.15 E F0 5.088(.I)C(f) +-5.088 E F1(pattern)2.588 E F0 .088(is preceded by)2.588 F F2(%)2.588 E +F0 .088(\(the fourth form)2.588 F(abo)144 216 Q -.15(ve)-.15 G .315 +(\), it must match at the end of the e).15 F .315(xpanded v)-.15 F .315 +(alue of)-.25 F F1(par)2.815 E(ameter)-.15 E F0 5.315(.I)C 2.815(ft) +-5.315 G .315(he e)-2.815 F .315(xpansion of)-.15 F F1(string)2.815 E F0 +(is)2.815 E .399(null, matches of)144 228 R F1(pattern)2.899 E F0 .399 +(are deleted.)2.899 F(If)5.399 E F1(string)2.898 E F0 .398 +(is null, matches of)2.898 F F1(pattern)2.898 E F0 .398 +(are deleted and the)2.898 F F2(/)2.898 E F0(fol-)2.898 E(lo)144 240 Q +(wing)-.25 E F1(pattern)3.251 E F0 .751(may be omitted.)3.251 F .751 +(If the)5.751 F F2(patsub_r)3.252 E(eplacement)-.18 E F0 .752 +(shell option is enabled using)3.252 F F2(shopt)3.252 E F0(,)A(an)144 +252 Q 3.451(yu)-.15 G .951(nquoted instances of)-3.451 F F2(&)3.451 E F0 +(in)3.451 E F1(string)3.451 E F0 .951 +(are replaced with the matching portion of)3.451 F F1(pattern)3.45 E F0 +5.95(.B)C(ack-)-5.95 E .182(slash is used to quote)144 264 R F2(&)2.683 +E F0(in)2.683 E F1(string)2.683 E F0 2.683(;t)C .183 +(he backslash is remo)-2.683 F -.15(ve)-.15 G 2.683(di).15 G 2.683(no) +-2.683 G .183(rder to permit a literal)-2.683 F F2(&)2.683 E F0 .183 +(in the re-)2.683 F .234(placement string.)144 276 R .234 +(Users should tak)5.234 F 2.734(ec)-.1 G .234(are if)-2.734 F F1(string) +2.734 E F0 .234(is double-quoted to a)2.734 F -.2(vo)-.2 G .233(id unw) +.2 F .233(anted interactions)-.1 F .084 +(between the backslash and double-quoting.)144 288 R -.15(Pa)5.084 G +.085(ttern substitution performs the check for).15 F F2(&)2.585 E F0 +.085(after e)2.585 F(x-)-.15 E(panding)144 300 Q F1(string)3.029 E F0 +3.029(;s)C .529 +(hell programmers should quote backslashes intended to escape the)-3.029 +F F2(&)3.028 E F0 .528(and inhibit)3.028 F .802(replacement so the)144 +312 R 3.302(ys)-.15 G(urvi)-3.302 E 1.102 -.15(ve a)-.25 H 1.102 -.15 +(ny q).15 H .803(uote remo).15 F -.25(va)-.15 G 3.303(lp).25 G .803 +(erformed by the e)-3.303 F .803(xpansion of)-.15 F F1(string)3.303 E F0 +5.803(.I)C 3.303(ft)-5.803 G(he)-3.303 E F2(no-)3.303 E(casematch)144 +324 Q F0 .122 +(shell option is enabled, the match is performed without re)2.622 F -.05 +(ga)-.15 G .122(rd to the case of alphabetic).05 F 2.791(characters. If) +144 336 R F1(par)4.041 E(ameter)-.15 E F0(is)3.521 E F2(@)2.791 E F0(or) +2.791 E F2(*)2.791 E F0 2.791(,t)C .292 +(he substitution operation is applied to each positional param-)-2.791 F +.793(eter in turn, and the e)144 348 R .793 +(xpansion is the resultant list.)-.15 F(If)5.793 E F1(par)4.543 E +(ameter)-.15 E F0 .793(is an array v)4.023 F .793(ariable subscripted) +-.25 F(with)144 360 Q F2(@)2.877 E F0(or)2.877 E F2(*)2.878 E F0 2.878 +(,t)C .378(he substitution operation is applied to each member of the a\ +rray in turn, and the e)-2.878 F(x-)-.15 E +(pansion is the resultant list.)144 372 Q(${)108 388.8 Q F1(par)A +(ameter)-.15 E F2(^)A F1(pattern)A F0(})A(${)108 400.8 Q F1(par)A +(ameter)-.15 E F2(^^)A F1(pattern)A F0(})A(${)108 412.8 Q F1(par)A +(ameter)-.15 E F2(,)A F1(pattern)A F0(})A(${)108 424.8 Q F1(par)A +(ameter)-.15 E F2(,,)A F1(pattern)A F0(})A F2 .438(Case modi\214cation) +144 436.8 R F0 5.438(.T)C .438(his e)-5.438 F .437 +(xpansion modi\214es the case of alphabetic characters in)-.15 F F1(par) +2.937 E(ameter)-.15 E F0 5.437(.T)C(he)-5.437 E F1(pattern)144 448.8 Q +F0 .373(is e)2.873 F .374 +(xpanded to produce a pattern just as in pathname e)-.15 F 2.874 +(xpansion. Each)-.15 F .374(character in the e)2.874 F(x-)-.15 E .514 +(panded v)144 460.8 R .514(alue of)-.25 F F1(par)3.014 E(ameter)-.15 E +F0 .514(is tested ag)3.014 F(ainst)-.05 E F1(pattern)3.014 E F0 3.014 +(,a)C .513(nd, if it matches the pattern, its case is con-)-3.014 F -.15 +(ve)144 472.8 S 2.822(rted. The).15 F .323 +(pattern should not attempt to match more than one character)2.822 F +5.323(.T)-.55 G(he)-5.323 E F2(^)2.823 E F0 .323(operator con)2.823 F +-.15(ve)-.4 G(rts).15 E(lo)144 484.8 Q .181(wercase letters matching) +-.25 F F1(pattern)2.681 E F0 .181(to uppercase; the)2.681 F F2(,)2.681 E +F0 .181(operator con)2.681 F -.15(ve)-.4 G .18 +(rts matching uppercase letters).15 F .085(to lo)144 496.8 R 2.585 +(wercase. The)-.25 F F2(^^)2.585 E F0(and)2.585 E F2(,,)2.585 E F0 -.15 +(ex)2.585 G .085(pansions con).15 F -.15(ve)-.4 G .085 +(rt each matched character in the e).15 F .085(xpanded v)-.15 F .085 +(alue; the)-.25 F F2(^)2.585 E F0(and)144 508.8 Q F2(,)3.591 E F0 -.15 +(ex)3.591 G 1.091(pansions match and con).15 F -.15(ve)-.4 G 1.091 +(rt only the \214rst character in the e).15 F 1.09(xpanded v)-.15 F 3.59 +(alue. If)-.25 F F1(pattern)3.59 E F0(is)3.59 E 1.12 +(omitted, it is treated lik)144 520.8 R 3.62(ea)-.1 G F2(?)A F0 3.62(,w) +C 1.12(hich matches e)-3.62 F -.15(ve)-.25 G 1.121(ry character).15 F +6.121(.I)-.55 G(f)-6.121 E F1(par)4.871 E(ameter)-.15 E F0(is)4.351 E F2 +(@)3.621 E F0(or)3.621 E F2(*)3.621 E F0 3.621(,t)C 1.121(he case)-3.621 +F .339(modi\214cation operation is applied to each positional parameter\ + in turn, and the e)144 532.8 R .339(xpansion is the re-)-.15 F .249 +(sultant list.)144 544.8 R(If)5.249 E F1(par)3.999 E(ameter)-.15 E F0 +.249(is an array v)3.479 F .249(ariable subscripted with)-.25 F F2(@) +2.749 E F0(or)2.75 E F2(*)2.75 E F0 2.75(,t)C .25 +(he case modi\214cation oper)-2.75 F(-)-.2 E +(ation is applied to each member of the array in turn, and the e)144 +556.8 Q(xpansion is the resultant list.)-.15 E(${)108 573.6 Q F1(par)A +(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 585.6 S +.86(rameter transf).1 F(ormation)-.25 E F0 5.86(.T)C .86(he e)-5.86 F +.86(xpansion is either a transformation of the v)-.15 F .86(alue of)-.25 +F F1(par)3.36 E(ameter)-.15 E F0 .153(or information about)144 597.6 R +F1(par)2.653 E(ameter)-.15 E F0 .153(itself, depending on the v)2.653 F +.153(alue of)-.25 F F1(oper)2.653 E(ator)-.15 E F0 5.154(.E)C(ach)-5.154 +E F1(oper)2.654 E(ator)-.15 E F0 .154(is a sin-)2.654 F(gle letter:)144 +609.6 Q F2(U)144 633.6 Q F0 .143(The e)180 633.6 R .142 +(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F F1(par) +2.642 E(ameter)-.15 E F0 .142(with lo)2.642 F .142 +(wercase alphabetic charac-)-.25 F(ters con)180 645.6 Q -.15(ve)-.4 G +(rted to uppercase.).15 E F2(u)144 657.6 Q F0 .429(The e)180 657.6 R +.429(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F1 +(par)2.929 E(ameter)-.15 E F0 .43(with the \214rst character con)2.93 F +-.15(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 669.6 Q +F2(L)144 681.6 Q F0 .125(The e)180 681.6 R .124 +(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F1(par) +2.624 E(ameter)-.15 E F0 .124(with uppercase alphabetic charac-)2.624 F +(ters con)180 693.6 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F2 +(Q)144 705.6 Q F0 1.064(The e)180 705.6 R 1.064 +(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F1(par) +3.565 E(ameter)-.15 E F0 1.065(quoted in a format that can be)3.565 F +(reused as input.)180 717.6 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(25)185.955 E 0 Cg EP %%Page: 26 26 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.379(The e)108 84 -R -.25(va)-.25 G 1.378 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(E)144 84 Q F0 .441(The e)180 84 R .441 +(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F/F2 10 +/Times-Italic@0 SF(par)2.941 E(ameter)-.15 E F0 .44 +(with backslash escape sequences)2.94 F -.15(ex)180 96 S +(panded as with the).15 E F1($'...)2.5 E(')-.55 E F0(quoting mechanism.) +2.5 E F1(P)144 108 Q F0 1.072(The e)180 108 R 1.073 +(xpansion is a string that is the result of e)-.15 F 1.073 +(xpanding the v)-.15 F 1.073(alue of)-.25 F F2(par)3.573 E(ameter)-.15 E +F0 1.073(as if it)3.573 F(were a prompt string \(see)180 120 Q F1(PR)2.5 +E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F1(A)144 132 Q F0 1.138(The e) +180 132 R 1.138 +(xpansion is a string in the form of an assignment statement or)-.15 F +F1(declar)3.637 E(e)-.18 E F0(command)3.637 E(that, if e)180 144 Q -.25 +(va)-.25 G(luated, will recreate).25 E F2(par)2.5 E(ameter)-.15 E F0 +(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F1(K)144 156 Q F0 +1.339(Produces a possibly-quoted v)180 156 R 1.339(ersion of the v)-.15 +F 1.339(alue of)-.25 F F2(par)3.839 E(ameter)-.15 E F0 3.839(,e)C 1.34 +(xcept that it prints the)-3.989 F -.25(va)180 168 S .258(lues of inde) +.25 F -.15(xe)-.15 G 2.757(da).15 G .257(nd associati)-2.757 F .557 -.15 +(ve a)-.25 H .257(rrays as a sequence of quoted k).15 F -.15(ey)-.1 G +(-v).15 E .257(alue pairs \(see)-.25 F F1(Ar)2.757 E(-)-.37 E(rays)180 +180 Q F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(a)144 192 Q F0(The e)180 +192 Q(xpansion is a string consisting of \215ag v)-.15 E +(alues representing)-.25 E F2(par)2.5 E(ameter)-.15 E F0 1.1 -.55('s a)D +(ttrib).55 E(utes.)-.2 E F1(k)144 204 Q F0(Lik)180 204 Q 2.657(et)-.1 G +.157(he K transformation, b)-2.657 F .157(ut e)-.2 F .157(xpands the k) +-.15 F -.15(ey)-.1 G 2.657(sa).15 G .157(nd v)-2.657 F .157 +(alues of inde)-.25 F -.15(xe)-.15 G 2.657(da).15 G .158(nd associati) +-2.657 F .458 -.15(ve a)-.25 H -.2(r-).15 G(rays to separate w)180 216 Q +(ords after w)-.1 E(ord splitting.)-.1 E(If)144 232.8 Q F2(par)4.403 E +(ameter)-.15 E F0(is)3.883 E F1(@)3.153 E F0(or)3.153 E F1(*)3.153 E F0 +3.153(,t)C .653(he operation is applied to each positional parameter in\ + turn, and the e)-3.153 F(x-)-.15 E .403(pansion is the resultant list.) +144 244.8 R(If)5.403 E F2(par)4.153 E(ameter)-.15 E F0 .403 +(is an array v)3.633 F .403(ariable subscripted with)-.25 F F1(@)2.903 E +F0(or)2.903 E F1(*)2.903 E F0 2.903(,t)C .403(he opera-)-2.903 F +(tion is applied to each member of the array in turn, and the e)144 +256.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e) +144 280.8 R .708(xpansion is subject to w)-.15 F .708 +(ord splitting and pathname e)-.1 F .708(xpansion as described be-)-.15 +F(lo)144 292.8 Q -.65(w.)-.25 G F1(Command Substitution)87 309.6 Q F2 +1.697(Command substitution)108 321.6 R F0(allo)4.197 E 1.697 +(ws the output of a command to replace the command name.)-.25 F 1.698 +(There are tw)6.698 F(o)-.1 E(forms:)108 333.6 Q F1($\()144 350.4 Q F2 +(command)A F1(\))1.666 E F0(or)108 362.4 Q F1<92>144 374.4 Q F2(command) +A F1<92>A(Bash)108 391.2 Q F0 .089(performs the e)2.589 F .089 +(xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F2(command)2.589 E F0 +.088(in a subshell en)2.589 F .088(vironment and replacing the command) +-.4 F .41(substitution with the standard output of the command, with an) +108 403.2 R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.) +-.25 F .41(Embedded ne)5.41 F(w-)-.25 E .192(lines are not deleted, b) +108 415.2 R .192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F +-.15(ve)-.15 G 2.692(dd).15 G .192(uring w)-2.692 F .192(ord splitting.) +-.1 F .192(The command substitution)5.192 F F1($\(cat)2.691 E F2(\214le) +2.691 E F1(\))A F0(can be replaced by the equi)108 427.2 Q -.25(va)-.25 +G(lent b).25 E(ut f)-.2 E(aster)-.1 E F1($\(<)2.5 E F2(\214le)2.5 E F1 +(\))A F0(.)A 1.724(When the old-style backquote form of substitution is\ + used, backslash retains its literal meaning e)108 444 R(xcept)-.15 E +.315(when follo)108 456 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1<92> +2.815 E F0 2.815(,o)C(r)-2.815 E F1(\\)2.815 E F0 5.315(.T)C .314(he \ +\214rst backquote not preceded by a backslash terminates the command su\ +b-)-5.315 F 3.886(stitution. When)108 468 R 1.386(using the $\()3.886 F +F2(command).833 E F0 3.886(\)f)1.666 G 1.387 +(orm, all characters between the parentheses mak)-3.886 F 3.887(eu)-.1 G +3.887(pt)-3.887 G 1.387(he com-)-3.887 F +(mand; none are treated specially)108 480 Q(.)-.65 E .894 +(Command substitutions may be nested.)108 496.8 R 2.494 -.8(To n)5.894 H +.894(est when using the backquoted form, escape the inner back-).8 F +(quotes with backslashes.)108 508.8 Q .422 +(If the substitution appears within double quotes, w)108 525.6 R .422 +(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15 +F(on the results.)108 537.6 Q F1(Arithmetic Expansion)87 554.4 Q F0 +1.035(Arithmetic e)108 566.4 R 1.035(xpansion allo)-.15 F 1.035 +(ws the e)-.25 F -.25(va)-.25 G 1.034(luation of an arithmetic e).25 F +1.034(xpression and the substitution of the result.)-.15 F +(The format for arithmetic e)108 578.4 Q(xpansion is:)-.15 E F1($\(\() +144 595.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 612 Q +F2 -.2(ex)2.735 G(pr).2 E(ession)-.37 E F0(under)2.975 E .235 +(goes the same e)-.18 F .236 +(xpansions as if it were within double quotes, b)-.15 F .236 +(ut double quote charac-)-.2 F .421(ters in)108 624 R F2 -.2(ex)2.921 G +(pr).2 E(ession)-.37 E F0 .421(are not treated specially and are remo) +2.921 F -.15(ve)-.15 G 2.921(d. All).15 F(tok)2.92 E .42(ens in the e) +-.1 F .42(xpression under)-.15 F .42(go parame-)-.18 F 1.209(ter and v) +108 636 R 1.209(ariable e)-.25 F 1.209 +(xpansion, command substitution, and quote remo)-.15 F -.25(va)-.15 G +3.709(l. The).25 F 1.21(result is treated as the arith-)3.709 F(metic e) +108 648 Q(xpression to be e)-.15 E -.25(va)-.25 G 2.5 +(luated. Arithmetic).25 F -.15(ex)2.5 G(pansions may be nested.).15 E +1.379(The e)108 664.8 R -.25(va)-.25 G 1.378 (luation is performed according to the rules listed belo).25 F 3.878(wu) --.25 G(nder)-3.878 E/F1 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F -(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F2 9/Times-Roman@0 SF(.)A F0 -(If)5.878 E/F3 10/Times-Italic@0 SF -.2(ex)108 96 S(pr).2 E(ession)-.37 -E F0(is in)2.74 E -.25(va)-.4 G(lid,).25 E/F4 10/Times-Bold@0 SF(bash) -2.5 E F0(prints a message indicating f)2.5 E -(ailure and no substitution occurs.)-.1 E F4(Pr)87 112.8 Q -(ocess Substitution)-.18 E F3(Pr)108 124.8 Q .405(ocess substitution) +-.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 +(If)5.878 E F2 -.2(ex)108 676.8 S(pr).2 E(ession)-.37 E F0(is in)2.74 E +-.25(va)-.4 G(lid,).25 E F1(bash)2.5 E F0(prints a message indicating f) +2.5 E(ailure and no substitution occurs.)-.1 E F1(Pr)87 693.6 Q +(ocess Substitution)-.18 E F2(Pr)108 705.6 Q .405(ocess substitution) -.45 F F0(allo)2.905 E .405(ws a process')-.25 F 2.905(si)-.55 G .405 (nput or output to be referred to using a \214lename.)-2.905 F .405 -(It tak)5.405 F .405(es the form)-.1 F(of)108 136.8 Q F4(<\()3.251 E F3 -(list)A F4(\)).833 E F0(or)3.251 E F4(>\()3.251 E F3(list)A F4(\)).833 E -F0 5.751(.T)C .751(he process)-5.751 F F3(list)3.251 E F0 .751 +(It tak)5.405 F .405(es the form)-.1 F(of)108 717.6 Q F1(<\()3.251 E F2 +(list)A F1(\)).833 E F0(or)3.251 E F1(>\()3.251 E F2(list)A F1(\)).833 E +F0 5.751(.T)C .751(he process)-5.751 F F2(list)3.251 E F0 .751 (is run asynchronously)3.251 F 3.251(,a)-.65 G .751 (nd its input or output appears as a \214lename.)-3.251 F .147 -(This \214lename is passed as an ar)108 148.8 R .148 +(This \214lename is passed as an ar)108 729.6 R .148 (gument to the current command as the result of the e)-.18 F 2.648 -(xpansion. If)-.15 F(the)2.648 E F4(>\()2.648 E F3(list)A F4(\)).833 E -F0 .56(form is used, writing to the \214le will pro)108 160.8 R .56 -(vide input for)-.15 F F3(list)3.059 E F0 5.559(.I)C 3.059(ft)-5.559 G -(he)-3.059 E F4(<\()3.059 E F3(list)A F4(\)).833 E F0 .559 -(form is used, the \214le passed as an)3.059 F(ar)108 172.8 Q .308 -(gument should be read to obtain the output of)-.18 F F3(list)2.808 E F0 -5.308(.P)C .309(rocess substitution is supported on systems that sup-) --5.308 F(port named pipes \()108 184.8 Q F3(FIFOs)A F0 2.5(\)o)C 2.5(rt) --2.5 G(he)-2.5 E F4(/de)2.5 E(v/fd)-.15 E F0 -(method of naming open \214les.)2.5 E .897(When a)108 201.6 R -.25(va) --.2 G .896(ilable, process substitution is performed simultaneously wit\ -h parameter and v).25 F .896(ariable e)-.25 F(xpansion,)-.15 E -(command substitution, and arithmetic e)108 213.6 Q(xpansion.)-.15 E F4 --.75(Wo)87 230.4 S(rd Splitting).75 E F0 1.142 -(The shell scans the results of parameter e)108 242.4 R 1.143 -(xpansion, command substitution, and arithmetic e)-.15 F 1.143 -(xpansion that)-.15 F(did not occur within double quotes for)108 254.4 Q -F3(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063 -(The shell treats each character of)108 271.2 R F1(IFS)2.563 E F0 .063 -(as a delimiter)2.313 F 2.563(,a)-.4 G .063 -(nd splits the results of the other e)-2.563 F .063(xpansions into w) --.15 F(ords)-.1 E .207(using these characters as \214eld terminators.) -108 283.2 R(If)5.207 E F1(IFS)2.707 E F0 .207(is unset, or its v)2.457 F -.207(alue is e)-.25 F(xactly)-.15 E F4()2.708 E F0 -(,)A .837(the def)108 295.2 R .837(ault, then sequences of)-.1 F F4 -()3.337 E F0(,)A F4()3.337 E F0 3.337(,a)C(nd)-3.337 E F4 -()3.337 E F0 .836(at the be)3.336 F .836 -(ginning and end of the results of)-.15 F .345(the pre)108 307.2 R .345 -(vious e)-.25 F .345(xpansions are ignored, and an)-.15 F 2.845(ys)-.15 -G .345(equence of)-2.845 F F1(IFS)2.845 E F0 .345 -(characters not at the be)2.595 F .345(ginning or end serv)-.15 F(es) --.15 E 1.237(to delimit w)108 319.2 R 3.737(ords. If)-.1 F F1(IFS)3.737 -E F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236 -(ault, then sequences of the whitespace characters)-.1 F F4(space)108 -331.2 Q F0(,)A F4(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F4(newline)2.506 -E F0 .006(are ignored at the be)2.506 F .006(ginning and end of the w) --.15 F .007(ord, as long as the whitespace charac-)-.1 F .921 -(ter is in the v)108 343.2 R .92(alue of)-.25 F F1(IFS)3.42 E F0(\(an) -3.17 E F1(IFS)3.42 E F0 .92(whitespace character\).)3.17 F(An)5.92 E -3.42(yc)-.15 G .92(haracter in)-3.42 F F1(IFS)3.42 E F0 .92(that is not) -3.17 F F1(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 355.2 -R 2.928(ya)-.15 G(djacent)-2.928 E F1(IFS)2.928 E F0 .428 -(whitespace characters, delimits a \214eld.)2.678 F 2.928(As)5.428 G -.428(equence of)-2.928 F F1(IFS)2.928 E F0 .429(whitespace charac-)2.679 -F(ters is also treated as a delimiter)108 367.2 Q 5(.I)-.55 G 2.5(ft)-5 -G(he v)-2.5 E(alue of)-.25 E F1(IFS)2.5 E F0(is null, no w)2.25 E -(ord splitting occurs.)-.1 E .783(Explicit null ar)108 384 R .783 -(guments \()-.18 F F4 .833("").833 G F0(or)2.449 E F4 .833<0808>4.115 G -F0 3.282(\)a)C .782 -(re retained and passed to commands as empty strings.)-3.282 F .782 -(Unquoted im-)5.782 F .178(plicit null ar)108 396 R .179 -(guments, resulting from the e)-.18 F .179 -(xpansion of parameters that ha)-.15 F .479 -.15(ve n)-.2 H 2.679(ov).15 -G .179(alues, are remo)-2.929 F -.15(ve)-.15 G 2.679(d. If).15 F 2.679 -(ap)2.679 G(a-)-2.679 E .319(rameter with no v)108 408 R .319(alue is e) --.25 F .319(xpanded within double quotes, a null ar)-.15 F .319 -(gument results and is retained and passed)-.18 F -(to a command as an empty string.)108 420 Q(When a quoted null ar)5 E -.001(gument appears as part of a w)-.18 F .001(ord whose e)-.1 F -(xpansion)-.15 E .984(is non-null, the null ar)108 432 R .984 -(gument is remo)-.18 F -.15(ve)-.15 G 3.483(d. That).15 F .983 -(is, the w)3.483 F(ord)-.1 E/F5 10/Courier@0 SF -5.1673.483 -F F0(becomes)3.483 E F53.483 E F0 .983(after w)3.483 F .983 -(ord splitting and)-.1 F(null ar)108 444 Q(gument remo)-.18 E -.25(va) --.15 G(l.).25 E(Note that if no e)108 460.8 Q -(xpansion occurs, no splitting is performed.)-.15 E F4 -.1(Pa)87 477.6 S -(thname Expansion).1 E F0 .37(After w)108 489.6 R .37 -(ord splitting, unless the)-.1 F F42.87 E F0 .37 -(option has been set,)2.87 F F4(bash)2.87 E F0 .371(scans each w)2.871 F -.371(ord for the characters)-.1 F F4(*)2.871 E F0(,)A F4(?)2.871 E F0 -2.871(,a)C(nd)-2.871 E F4([)2.871 E F0(.)A .634 -(If one of these characters appears, and is not quoted, then the w)108 -501.6 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F3 -(pattern)4.383 E F0 3.133(,a).24 G .633(nd replaced)-3.133 F 1.34(with \ -an alphabetically sorted list of \214lenames matching the pattern \(see) -108 513.6 R F1 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E -F0(belo)3.59 E 3.84(w\). If)-.25 F(no)3.84 E .534 -(matching \214lenames are found, and the shell option)108 525.6 R F4 -(nullglob)3.034 E F0 .534(is not enabled, the w)3.034 F .534 -(ord is left unchanged.)-.1 F(If)5.534 E(the)108 537.6 Q F4(nullglob) -3.284 E F0 .785(option is set, and no matches are found, the w)3.284 F -.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.285 E F4 -(failglob)3.285 E F0 .785(shell option is)3.285 F .754(set, and no matc\ -hes are found, an error message is printed and the command is not e)108 -549.6 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F -(option)108 561.6 Q F4(nocaseglob)3.263 E F0 .763 -(is enabled, the match is performed without re)3.263 F -.05(ga)-.15 G -.764(rd to the case of alphabetic characters.).05 F .039 -(When a pattern is used for pathname e)108 573.6 R .039 -(xpansion, the character)-.15 F F4 -.63(``)2.539 G -.55(.').63 G(')-.08 -E F0 .039(at the start of a name or immediately fol-)5.039 F(lo)108 -585.6 Q .81(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 3.31 -(,u)-.65 G .81(nless the shell option)-3.31 F F4(dotglob)3.31 E F0 .81 -(is set.)3.31 F .81(The \214lenames)5.81 F F4 -.63(``)3.31 G -.55(.').63 -G(')-.08 E F0(and)5.81 E F4 -.63(``)108 597.6 S(..).63 E -.63('')-.55 G -F0 1.182(must al)6.812 F -.1(wa)-.1 G 1.182(ys be matched e).1 F -(xplicitly)-.15 E 3.682(,e)-.65 G -.15(ve)-3.932 G 3.682(ni).15 G(f) --3.682 E F4(dotglob)3.682 E F0 1.182(is set.)3.682 F 1.181 -(In other cases, the)6.182 F F4 -.63(``)3.681 G -.55(.').63 G(')-.08 E -F0 1.181(character is not)6.181 F .613(treated specially)108 609.6 R -5.613(.W)-.65 G .613 -(hen matching a pathname, the slash character must al)-5.613 F -.1(wa) --.1 G .614(ys be matched e).1 F .614(xplicitly by a)-.15 F .655 -(slash in the pattern, b)108 621.6 R .655(ut in other matching conte)-.2 -F .655(xts it can be matched by a special pattern character as de-)-.15 -F .719(scribed belo)108 633.6 R 3.219(wu)-.25 G(nder)-3.219 E F1 -.09 -(Pa)3.219 G(tter).09 E 2.969(nM)-.135 G(atching)-2.969 E F2(.)A F0 .719 -(See the description of)5.219 F F4(shopt)3.219 E F0(belo)3.219 E 3.22 -(wu)-.25 G(nder)-3.22 E F1 .72(SHELL B)3.22 F(UIL)-.09 E .72(TIN COM-) --.828 F(MANDS)108 645.6 Q F0(for a description of the)2.25 E F4 -(nocaseglob)2.5 E F0(,)A F4(nullglob)2.5 E F0(,)A F4(failglob)2.5 E F0 -2.5(,a)C(nd)-2.5 E F4(dotglob)2.5 E F0(shell options.)2.5 E(The)108 -662.4 Q F1(GLOBIGNORE)2.562 E F0 .062(shell v)2.312 F .061 -(ariable may be used to restrict the set of \214le names matching a)-.25 -F F3(pattern)3.811 E F0 5.061(.I).24 G(f)-5.061 E F1(GLO-)2.561 E -(BIGNORE)108 674.4 Q F0 1.096(is set, each matching \214le name that al\ -so matches one of the patterns in)3.346 F F1(GLOBIGNORE)3.597 E F0 1.097 -(is re-)3.347 F(mo)108 686.4 Q -.15(ve)-.15 G 2.851(df).15 G .351 -(rom the list of matches.)-2.851 F .351(If the)5.351 F F4(nocaseglob) -2.851 E F0 .351(option is set, the matching ag)2.851 F .351 -(ainst the patterns in)-.05 F F1(GLO-)2.85 E(BIGNORE)108 698.4 Q F0 1.48 -(is performed without re)3.73 F -.05(ga)-.15 G 1.48(rd to case.).05 F -1.48(The \214lenames)6.48 F F4 -.63(``)3.98 G -.55(.').63 G(')-.08 E F0 -(and)6.48 E F4 -.63(``)3.98 G(..).63 E -.63('')-.55 G F0 1.481(are al) -7.11 F -.1(wa)-.1 G 1.481(ys ignored when).1 F F1(GLOBIGNORE)108 710.4 Q -F0 .827(is set and not null.)3.077 F(Ho)5.827 E(we)-.25 E -.15(ve)-.25 G -1.627 -.4(r, s).15 H(etting).4 E F1(GLOBIGNORE)3.327 E F0 .827 -(to a non-null v)3.077 F .827(alue has the ef)-.25 F .827(fect of)-.25 F -.682(enabling the)108 722.4 R F4(dotglob)3.182 E F0 .682 -(shell option, so all other \214lenames be)3.182 F .682(ginning with a) --.15 F F4 -.63(``)3.182 G -.55(.').63 G(')-.08 E F0 .682(will match.) -5.682 F 2.283 -.8(To g)5.683 H .683(et the old).8 F(GNU Bash 5.1)72 768 -Q(2020 October 29)141.235 E(26)190.395 E 0 Cg EP +(xpansion. If)-.15 F(the)2.648 E F1(>\()2.648 E F2(list)A F1(\)).833 E +F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(26)185.955 E 0 Cg EP %%Page: 27 27 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(beha)108 84 Q +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .56 +(form is used, writing to the \214le will pro)108 84 R .56 +(vide input for)-.15 F/F1 10/Times-Italic@0 SF(list)3.059 E F0 5.559(.I) +C 3.059(ft)-5.559 G(he)-3.059 E/F2 10/Times-Bold@0 SF(<\()3.059 E F1 +(list)A F2(\)).833 E F0 .559(form is used, the \214le passed as an)3.059 +F(ar)108 96 Q .308(gument should be read to obtain the output of)-.18 F +F1(list)2.808 E F0 5.308(.P)C .309 +(rocess substitution is supported on systems that sup-)-5.308 F +(port named pipes \()108 108 Q F1(FIFOs)A F0 2.5(\)o)C 2.5(rt)-2.5 G(he) +-2.5 E F2(/de)2.5 E(v/fd)-.15 E F0(method of naming open \214les.)2.5 E +.897(When a)108 124.8 R -.25(va)-.2 G .896(ilable, process substitution\ + is performed simultaneously with parameter and v).25 F .896(ariable e) +-.25 F(xpansion,)-.15 E(command substitution, and arithmetic e)108 136.8 +Q(xpansion.)-.15 E F2 -.75(Wo)87 153.6 S(rd Splitting).75 E F0 1.142 +(The shell scans the results of parameter e)108 165.6 R 1.143 +(xpansion, command substitution, and arithmetic e)-.15 F 1.143 +(xpansion that)-.15 F(did not occur within double quotes for)108 177.6 Q +F1(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063 +(The shell treats each character of)108 194.4 R/F3 9/Times-Bold@0 SF +(IFS)2.563 E F0 .063(as a delimiter)2.313 F 2.563(,a)-.4 G .063 +(nd splits the results of the other e)-2.563 F .063(xpansions into w) +-.15 F(ords)-.1 E .207(using these characters as \214eld terminators.) +108 206.4 R(If)5.207 E F3(IFS)2.707 E F0 .207(is unset, or its v)2.457 F +.207(alue is e)-.25 F(xactly)-.15 E F2()2.708 E F0 +(,)A .837(the def)108 218.4 R .837(ault, then sequences of)-.1 F F2 +()3.337 E F0(,)A F2()3.337 E F0 3.337(,a)C(nd)-3.337 E F2 +()3.337 E F0 .836(at the be)3.336 F .836 +(ginning and end of the results of)-.15 F .345(the pre)108 230.4 R .345 +(vious e)-.25 F .345(xpansions are ignored, and an)-.15 F 2.845(ys)-.15 +G .345(equence of)-2.845 F F3(IFS)2.845 E F0 .345 +(characters not at the be)2.595 F .345(ginning or end serv)-.15 F(es) +-.15 E 1.237(to delimit w)108 242.4 R 3.737(ords. If)-.1 F F3(IFS)3.737 +E F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236 +(ault, then sequences of the whitespace characters)-.1 F F2(space)108 +254.4 Q F0(,)A F2(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F2(newline)2.506 +E F0 .006(are ignored at the be)2.506 F .006(ginning and end of the w) +-.15 F .007(ord, as long as the whitespace charac-)-.1 F .921 +(ter is in the v)108 266.4 R .92(alue of)-.25 F F3(IFS)3.42 E F0(\(an) +3.17 E F3(IFS)3.42 E F0 .92(whitespace character\).)3.17 F(An)5.92 E +3.42(yc)-.15 G .92(haracter in)-3.42 F F3(IFS)3.42 E F0 .92(that is not) +3.17 F F3(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 278.4 +R 2.928(ya)-.15 G(djacent)-2.928 E F3(IFS)2.928 E F0 .428 +(whitespace characters, delimits a \214eld.)2.678 F 2.928(As)5.428 G +.428(equence of)-2.928 F F3(IFS)2.928 E F0 .429(whitespace charac-)2.679 +F(ters is also treated as a delimiter)108 290.4 Q 5(.I)-.55 G 2.5(ft)-5 +G(he v)-2.5 E(alue of)-.25 E F3(IFS)2.5 E F0(is null, no w)2.25 E +(ord splitting occurs.)-.1 E .783(Explicit null ar)108 307.2 R .783 +(guments \()-.18 F F2 .833("").833 G F0(or)2.449 E F2 .833<0808>4.115 G +F0 3.282(\)a)C .782 +(re retained and passed to commands as empty strings.)-3.282 F .782 +(Unquoted im-)5.782 F .178(plicit null ar)108 319.2 R .179 +(guments, resulting from the e)-.18 F .179 +(xpansion of parameters that ha)-.15 F .479 -.15(ve n)-.2 H 2.679(ov).15 +G .179(alues, are remo)-2.929 F -.15(ve)-.15 G 2.679(d. If).15 F 2.679 +(ap)2.679 G(a-)-2.679 E .319(rameter with no v)108 331.2 R .319 +(alue is e)-.25 F .319(xpanded within double quotes, a null ar)-.15 F +.319(gument results and is retained and passed)-.18 F +(to a command as an empty string.)108 343.2 Q(When a quoted null ar)5 E +.001(gument appears as part of a w)-.18 F .001(ord whose e)-.1 F +(xpansion)-.15 E .984(is non-null, the null ar)108 355.2 R .984 +(gument is remo)-.18 F -.15(ve)-.15 G 3.483(d. That).15 F .983 +(is, the w)3.483 F(ord)-.1 E/F4 10/Courier@0 SF -5.1673.483 +F F0(becomes)3.483 E F43.483 E F0 .983(after w)3.483 F .983 +(ord splitting and)-.1 F(null ar)108 367.2 Q(gument remo)-.18 E -.25(va) +-.15 G(l.).25 E(Note that if no e)108 384 Q +(xpansion occurs, no splitting is performed.)-.15 E F2 -.1(Pa)87 400.8 S +(thname Expansion).1 E F0 .37(After w)108 412.8 R .37 +(ord splitting, unless the)-.1 F F22.87 E F0 .37 +(option has been set,)2.87 F F2(bash)2.87 E F0 .371(scans each w)2.871 F +.371(ord for the characters)-.1 F F2(*)2.871 E F0(,)A F2(?)2.871 E F0 +2.871(,a)C(nd)-2.871 E F2([)2.871 E F0(.)A .634 +(If one of these characters appears, and is not quoted, then the w)108 +424.8 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F1 +(pattern)4.383 E F0 3.133(,a).24 G .633(nd replaced)-3.133 F 1.34(with \ +an alphabetically sorted list of \214lenames matching the pattern \(see) +108 436.8 R F3 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E +F0(belo)3.59 E 3.84(w\). If)-.25 F(no)3.84 E .534 +(matching \214lenames are found, and the shell option)108 448.8 R F2 +(nullglob)3.034 E F0 .534(is not enabled, the w)3.034 F .534 +(ord is left unchanged.)-.1 F(If)5.534 E(the)108 460.8 Q F2(nullglob) +3.284 E F0 .785(option is set, and no matches are found, the w)3.284 F +.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.285 E F2 +(failglob)3.285 E F0 .785(shell option is)3.285 F .754(set, and no matc\ +hes are found, an error message is printed and the command is not e)108 +472.8 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F +(option)108 484.8 Q F2(nocaseglob)3.263 E F0 .763 +(is enabled, the match is performed without re)3.263 F -.05(ga)-.15 G +.764(rd to the case of alphabetic characters.).05 F .039 +(When a pattern is used for pathname e)108 496.8 R .039 +(xpansion, the character)-.15 F F2 -.63(``)2.539 G -.55(.').63 G(')-.08 +E F0 .039(at the start of a name or immediately fol-)5.039 F(lo)108 +508.8 Q .19(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 2.69 +(,u)-.65 G .19(nless the shell option)-2.69 F F2(dotglob)2.691 E F0 .191 +(is set.)2.691 F .191(In order to match the \214le-)5.191 F(names)108 +520.8 Q F2 -.63(``)3.645 G -.55(.').63 G(')-.08 E F0(and)6.145 E F2 -.63 +(``)3.645 G(..).63 E -.63('')-.55 G F0 3.645(,t).63 G 1.145 +(he pattern must be)-3.645 F 1.145(gin with `)-.15 F(`.)-.74 E 2.625 +-.74('' \()-.7 H 1.145(for e).74 F 1.145(xample, `)-.15 F(`.?')-.74 E +1.145('\), e)-.74 F -.15(ve)-.25 G 3.645(ni).15 G(f)-3.645 E F2(dotglob) +3.644 E F0 1.144(is set.)3.644 F 1.144(If the)6.144 F F2(globskipdots) +108 532.8 Q F0 .153(shell option is enabled, the \214lenames)2.653 F F2 +-.63(``)2.653 G -.55(.').63 G(')-.08 E F0(and)5.153 E F2 -.63(``)2.654 G +(..).63 E -.63('')-.55 G F0 .154(are ne)5.784 F -.15(ve)-.25 G 2.654(rm) +.15 G .154(atched, e)-2.654 F -.15(ve)-.25 G 2.654(ni).15 G 2.654(ft) +-2.654 G .154(he pattern be-)-2.654 F .12(gins with a)108 544.8 R F2 +-.63(``)2.62 G -.55(.').63 G(')-.08 E F0 5.12(.W)C .12 +(hen not matching pathnames, the)-5.12 F F2 -.63(``)2.62 G -.55(.').63 G +(')-.08 E F0 .12(character is not treated specially)5.12 F 5.12(.W)-.65 +G .12(hen matching)-5.12 F 3.54(ap)108 556.8 S 1.04 +(athname, the slash character must al)-3.54 F -.1(wa)-.1 G 1.04 +(ys be matched e).1 F 1.041(xplicitly by a slash in the pattern, b)-.15 +F 1.041(ut in other)-.2 F .132(matching conte)108 568.8 R .132 +(xts it can be matched by a special pattern character as described belo) +-.15 F 2.631(wu)-.25 G(nder)-2.631 E F3 -.09(Pa)2.631 G(tter).09 E 2.381 +(nM)-.135 G(atch-)-2.381 E(ing)108 580.8 Q/F5 9/Times-Roman@0 SF(.)A F0 +.605(See the description of)5.105 F F2(shopt)3.105 E F0(belo)3.105 E +3.106(wu)-.25 G(nder)-3.106 E F3 .606(SHELL B)3.106 F(UIL)-.09 E .606 +(TIN COMMANDS)-.828 F F0 .606(for a description of the)2.856 F F2(no-) +3.106 E(caseglob)108 592.8 Q F0(,)A F2(nullglob)2.5 E F0(,)A F2 +(globskipdots)2.5 E F0(,)A F2(failglob)2.5 E F0 2.5(,a)C(nd)-2.5 E F2 +(dotglob)2.5 E F0(shell options.)2.5 E(The)108 609.6 Q F3(GLOBIGNORE) +2.562 E F0 .062(shell v)2.312 F .061 +(ariable may be used to restrict the set of \214le names matching a)-.25 +F F1(pattern)3.811 E F0 5.061(.I).24 G(f)-5.061 E F3(GLO-)2.561 E +(BIGNORE)108 621.6 Q F0 1.096(is set, each matching \214le name that al\ +so matches one of the patterns in)3.346 F F3(GLOBIGNORE)3.597 E F0 1.097 +(is re-)3.347 F(mo)108 633.6 Q -.15(ve)-.15 G 2.851(df).15 G .351 +(rom the list of matches.)-2.851 F .351(If the)5.351 F F2(nocaseglob) +2.851 E F0 .351(option is set, the matching ag)2.851 F .351 +(ainst the patterns in)-.05 F F3(GLO-)2.85 E(BIGNORE)108 645.6 Q F0 1.48 +(is performed without re)3.73 F -.05(ga)-.15 G 1.48(rd to case.).05 F +1.48(The \214lenames)6.48 F F2 -.63(``)3.98 G -.55(.').63 G(')-.08 E F0 +(and)6.48 E F2 -.63(``)3.98 G(..).63 E -.63('')-.55 G F0 1.481(are al) +7.11 F -.1(wa)-.1 G 1.481(ys ignored when).1 F F3(GLOBIGNORE)108 657.6 Q +F0 .827(is set and not null.)3.077 F(Ho)5.827 E(we)-.25 E -.15(ve)-.25 G +1.627 -.4(r, s).15 H(etting).4 E F3(GLOBIGNORE)3.327 E F0 .827 +(to a non-null v)3.077 F .827(alue has the ef)-.25 F .827(fect of)-.25 F +.682(enabling the)108 669.6 R F2(dotglob)3.182 E F0 .682 +(shell option, so all other \214lenames be)3.182 F .682(ginning with a) +-.15 F F2 -.63(``)3.182 G -.55(.').63 G(')-.08 E F0 .682(will match.) +5.682 F 2.283 -.8(To g)5.683 H .683(et the old).8 F(beha)108 681.6 Q 1.185(vior of ignoring \214lenames be)-.2 F 1.185(ginning with a)-.15 F -/F1 10/Times-Bold@0 SF -.63(``)3.684 G -.55(.').63 G(')-.08 E F0 3.684 -(,m)C(ak)-3.684 E(e)-.1 E F1 -.63(``)3.684 G(.*').63 E(')-.63 E F0 1.184 -(one of the patterns in)6.184 F/F2 9/Times-Bold@0 SF(GLOBIGNORE)3.684 E -/F3 9/Times-Roman@0 SF(.)A F0(The)108 96 Q F1(dotglob)3.131 E F0 .631 -(option is disabled when)3.131 F F2(GLOBIGNORE)3.132 E F0 .632 -(is unset.)2.882 F .632(The pattern matching honors the setting of)5.632 -F(the)108 108 Q F1(extglob)2.5 E F0(shell option.)2.5 E F1 -.1(Pa)108 -124.8 S(tter).1 E 2.5(nM)-.15 G(atching)-2.5 E F0(An)108 141.6 Q 3.138 -(yc)-.15 G .638(haracter that appears in a pattern, other than the spec\ -ial pattern characters described belo)-3.138 F 1.938 -.65(w, m)-.25 H -(atches).65 E 2.721(itself. The)108 153.6 R .221 -(NUL character may not occur in a pattern.)2.721 F 2.721(Ab)5.221 G .221 -(ackslash escapes the follo)-2.721 F .222(wing character; the es-)-.25 F -.418(caping backslash is discarded when matching.)108 165.6 R .418 -(The special pattern characters must be quoted if the)5.418 F 2.918(ya) --.15 G .418(re to)-2.918 F(be matched literally)108 177.6 Q(.)-.65 E -(The special pattern characters ha)108 194.4 Q .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1(*)144 211.2 Q F0 .376 -(Matches an)180 211.2 R 2.876(ys)-.15 G .376 -(tring, including the null string.)-2.876 F .376(When the)5.376 F F1 -(globstar)2.876 E F0 .377(shell option is enabled,)2.876 F(and)180 223.2 -Q F1(*)3.275 E F0 .775(is used in a pathname e)3.275 F .775 -(xpansion conte)-.15 F .775(xt, tw)-.15 F 3.275(oa)-.1 G(djacent)-3.275 -E F1(*)3.275 E F0 3.275(su)C .775(sed as a single pattern)-3.275 F 1.058 -(will match all \214les and zero or more directories and subdirectories\ -.)180 235.2 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E -F0(,)A(tw)180 247.2 Q 2.5(oa)-.1 G(djacent)-2.5 E F1(*)2.5 E F0 2.5(sw)C -(ill match only directories and subdirectories.)-2.5 E F1(?)144 259.2 Q -F0(Matches an)180 259.2 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E -F1([...])144 271.2 Q F0 .579(Matches an)180 271.2 R 3.079(yo)-.15 G .579 -(ne of the enclosed characters.)-3.079 F 3.079(Ap)5.579 G .578 -(air of characters separated by a h)-3.079 F(yphen)-.05 E .684 -(denotes a)180 283.2 R/F4 10/Times-Italic@0 SF -.15(ra)3.184 G(ng).15 E -3.184(ee)-.1 G(xpr)-3.384 E(ession)-.37 E F0 3.184(;a)C .984 -.15(ny c) --3.184 H .684(haracter that f).15 F .684(alls between those tw)-.1 F -3.185(oc)-.1 G .685(haracters, inclu-)-3.185 F(si)180 295.2 Q -.15(ve) --.25 G 3.713(,u).15 G 1.213(sing the current locale')-3.713 F 3.712(sc) --.55 G 1.212(ollating sequence and character set, is matched.)-3.712 F -1.212(If the)6.212 F 1.123(\214rst character follo)180 307.2 R 1.123 -(wing the)-.25 F F1([)3.623 E F0 1.123(is a)3.623 F F1(!)3.623 E F0 -1.124(or a)6.123 F F1(^)3.624 E F0 1.124(then an)3.624 F 3.624(yc)-.15 G -1.124(haracter not enclosed is matched.)-3.624 F .895 -(The sorting order of characters in range e)180 319.2 R .894 -(xpressions is determined by the current locale)-.15 F .375(and the v) -180 331.2 R .375(alues of the)-.25 F F2(LC_COLLA)2.875 E(TE)-.855 E F0 -(or)2.625 E F2(LC_ALL)2.875 E F0 .375(shell v)2.625 F .375 -(ariables, if set.)-.25 F 1.976 -.8(To o)5.376 H .376(btain the tra-).8 -F .068(ditional interpretation of range e)180 343.2 R .068 -(xpressions, where)-.15 F F1([a\255d])2.568 E F0 .067(is equi)2.567 F --.25(va)-.25 G .067(lent to).25 F F1([abcd])2.567 E F0 2.567(,s)C .067 -(et v)-2.567 F(alue)-.25 E .156(of the)180 355.2 R F1(LC_ALL)2.656 E F0 -.156(shell v)2.656 F .156(ariable to)-.25 F F1(C)2.657 E F0 2.657(,o)C -2.657(re)-2.657 G .157(nable the)-2.657 F F1(globasciiranges)2.657 E F0 -.157(shell option.)2.657 F(A)5.157 E F12.657 E F0(may)2.657 E .193(\ -be matched by including it as the \214rst or last character in the set.) -180 367.2 R(A)5.193 E F1(])2.693 E F0 .193(may be matched by)2.693 F -(including it as the \214rst character in the set.)180 379.2 Q -.4(Wi) -180 397.2 S(thin).4 E F1([)3.07 E F0(and)3.07 E F1(])3.07 E F0(,)A F4 --.15(ch)3.07 G(ar).15 E .571(acter classes)-.15 F F0 .571 -(can be speci\214ed using the syntax)3.071 F F1([:)3.071 E F4(class)A F1 -(:])A F0 3.071(,w)C(here)-3.071 E F4(class)3.071 E F0 -(is one of the follo)180 409.2 Q -(wing classes de\214ned in the POSIX standard:)-.25 E F1 5.889 -(alnum alpha ascii blank cntrl digit graph lo)180 421.2 R 5.889 -(wer print punct space up-)-.1 F 5(per w)180 433.2 R 5(ord xdigit)-.1 F -F0 4.289(Ac)180 445.2 S 1.789(haracter class matches an)-4.289 F 4.289 -(yc)-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E -F1 -.1(wo)4.29 G(rd).1 E F0(character)4.29 E -(class matches letters, digits, and the character _.)180 457.2 Q -.4(Wi) -180 475.2 S(thin).4 E F1([)4.537 E F0(and)4.537 E F1(])4.537 E F0 4.537 -(,a)C(n)-4.537 E F4 2.037(equivalence class)4.537 F F0 2.036 -(can be speci\214ed using the syntax)4.536 F F1([=)4.536 E F4(c)A F1(=]) -A F0 4.536(,w)C(hich)-4.536 E .125(matches all characters with the same\ - collation weight \(as de\214ned by the current locale\) as)180 487.2 R -(the character)180 499.2 Q F4(c)2.5 E F0(.)A -.4(Wi)180 517.2 S(thin).4 -E F1([)2.5 E F0(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.) -2.5 E F4(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F4 -(symbol)2.5 E F0(.)A .705(If the)108 534 R F1(extglob)3.205 E F0 .705 -(shell option is enabled using the)3.205 F F1(shopt)3.205 E F0 -.2(bu) -3.205 G .704(iltin, se).2 F -.15(ve)-.25 G .704(ral e).15 F .704 -(xtended pattern matching operators)-.15 F .255(are recognized.)108 546 -R .255(In the follo)5.255 F .255(wing description, a)-.25 F F4 -(pattern-list)2.755 E F0 .255 -(is a list of one or more patterns separated by a)2.755 F F1(|)2.756 E -F0(.)A(Composite patterns may be formed using one or more of the follo) -108 558 Q(wing sub-patterns:)-.25 E F1(?\()144 582 Q F4(pattern-list) -.833 E F1(\)).833 E F0(Matches zero or one occurrence of the gi)180 594 -Q -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 606 Q F4 -(pattern-list).833 E F1(\)).833 E F0 -(Matches zero or more occurrences of the gi)180 618 Q -.15(ve)-.25 G 2.5 -(np).15 G(atterns)-2.5 E F1(+\()144 630 Q F4(pattern-list).833 E F1(\)) -.833 E F0(Matches one or more occurrences of the gi)180 642 Q -.15(ve) --.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 654 Q F4(pattern-list).833 -E F1(\)).833 E F0(Matches one of the gi)180 666 Q -.15(ve)-.25 G 2.5(np) -.15 G(atterns)-2.5 E F1(!\()144 678 Q F4(pattern-list).833 E F1(\)).833 -E F0(Matches an)180 690 Q(ything e)-.15 E(xcept one of the gi)-.15 E --.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E .969(Complicated e)108 706.8 -R .969(xtended pattern matching ag)-.15 F .969 -(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968 -(specially when the patterns contain).65 F .09 -(alternations and the strings contain multiple matches.)108 718.8 R .091 -(Using separate matches ag)5.091 F .091(ainst shorter strings, or us-) --.05 F(ing arrays of strings instead of a single long string, may be f) -108 730.8 Q(aster)-.1 E(.)-.55 E(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(27)190.395 E 0 Cg EP +F2 -.63(``)3.684 G -.55(.').63 G(')-.08 E F0 3.684(,m)C(ak)-3.684 E(e) +-.1 E F2 -.63(``)3.684 G(.*').63 E(')-.63 E F0 1.184 +(one of the patterns in)6.184 F F3(GLOBIGNORE)3.684 E F5(.)A F0(The)108 +693.6 Q F2(dotglob)3.131 E F0 .631(option is disabled when)3.131 F F3 +(GLOBIGNORE)3.132 E F0 .632(is unset.)2.882 F .632 +(The pattern matching honors the setting of)5.632 F(the)108 705.6 Q F2 +(extglob)2.5 E F0(shell option.)2.5 E F2 -.1(Pa)108 722.4 S(tter).1 E +2.5(nM)-.15 G(atching)-2.5 E F0(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(27)185.955 E 0 Cg EP %%Page: 28 28 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Quote Remo)87 84 Q -.1(va)-.1 G(l).1 E F0 1.113 -(After the preceding e)108 96 R 1.113 -(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\) -3.613 E F0(,)A F1<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F1(")4.445 E F0 -1.112(that did not result)4.445 F(from one of the abo)108 108 Q .3 -.15 -(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F2 10.95 -/Times-Bold@0 SF(REDIRECTION)72 124.8 Q F0 .545(Before a command is e) -108 136.8 R -.15(xe)-.15 G .545(cuted, its input and output may be).15 F -/F3 10/Times-Italic@0 SF -.37(re)3.045 G(dir).37 E(ected)-.37 E F0 .545 -(using a special notation interpreted)3.815 F .405(by the shell.)108 -148.8 R .405(Redirection allo)5.405 F .405(ws commands' \214le handles \ -to be duplicated, opened, closed, made to refer to)-.25 F(dif)108 160.8 -Q 1.019(ferent \214les, and can change the \214les the command reads fr\ -om and writes to.)-.25 F 1.02(Redirection may also be)6.02 F .215 -(used to modify \214le handles in the current shell e)108 172.8 R -.15 -(xe)-.15 G .215(cution en).15 F 2.715(vironment. The)-.4 F(follo)2.715 E -.215(wing redirection operators)-.25 F .862(may precede or appear an)108 -184.8 R .862(ywhere within a)-.15 F F3 .862(simple command)3.702 F F0 -.862(or may follo)4.132 F 3.362(wa)-.25 G F3(command).2 E F0 5.862(.R) -.77 G .862(edirections are)-5.862 F(processed in the order the)108 196.8 -Q 2.5(ya)-.15 G(ppear)-2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .771 -(Each redirection that may be preceded by a \214le descriptor number ma\ -y instead be preceded by a w)108 213.6 R .771(ord of)-.1 F .292 -(the form {)108 225.6 R F3(varname)A F0 2.793(}. In)B .293 -(this case, for each redirection operator e)2.793 F .293 -(xcept >&- and <&-, the shell will allocate)-.15 F 3.18<618c>108 237.6 S -.679(le descriptor greater than or equal to 10 and assign it to)-3.18 F -F3(varname)3.179 E F0 5.679(.I)C 3.179(f>)-5.679 G .679 -(&- or <&- is preceded by {)-3.179 F F3(var)A(-)-.2 E(name)108 249.6 Q -F0 .599(}, the v)B .599(alue of)-.25 F F3(varname)3.099 E F0 .599 -(de\214nes the \214le descriptor to close.)3.099 F .6(If {)5.6 F F3 -(varname)A F0 3.1(}i)C 3.1(ss)-3.1 G .6(upplied, the redirection)-3.1 F -1.238(persists be)108 261.6 R 1.238(yond the scope of the command, allo) --.15 F 1.238(wing the shell programmer to manage the \214le descriptor) --.25 F(himself.)108 273.6 Q .283(In the follo)108 290.4 R .284(wing des\ -criptions, if the \214le descriptor number is omitted, and the \214rst \ -character of the redirect-)-.25 F .513(ion operator is)108 302.4 R F1(<) -3.012 E F0 3.012(,t)C .512 -(he redirection refers to the standard input \(\214le descriptor 0\).) --3.012 F .512(If the \214rst character of the)5.512 F -(redirection operator is)108 314.4 Q F1(>)2.5 E F0 2.5(,t)C -(he redirection refers to the standard output \(\214le descriptor 1\).) --2.5 E .824(The w)108 331.2 R .824(ord follo)-.1 F .824 -(wing the redirection operator in the follo)-.25 F .825 -(wing descriptions, unless otherwise noted, is sub-)-.25 F .463 -(jected to brace e)108 343.2 R .463(xpansion, tilde e)-.15 F .462 -(xpansion, parameter and v)-.15 F .462(ariable e)-.25 F .462 -(xpansion, command substitution, arith-)-.15 F .866(metic e)108 355.2 R -.866(xpansion, quote remo)-.15 F -.25(va)-.15 G .866(l, pathname e).25 F -.867(xpansion, and w)-.15 F .867(ord splitting.)-.1 F .867(If it e)5.867 -F .867(xpands to more than one)-.15 F -.1(wo)108 367.2 S(rd,).1 E F1 -(bash)2.5 E F0(reports an error)2.5 E(.)-.55 E -(Note that the order of redirections is signi\214cant.)108 384 Q -.15 -(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 400.8 Q F1(>)2.5 -E F0(dirlist 2)2.5 E F1(>&)A F0(1)A -(directs both standard output and standard error to the \214le)108 417.6 -Q F3(dirlist)2.85 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 -434.4 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505 -(directs only the standard output to \214le)108 451.2 R F3(dirlist)3.355 -E F0 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505 -(as duplicated from the standard)-.1 F -(output before the standard output w)108 463.2 Q(as redirected to)-.1 E -F3(dirlist)2.85 E F0(.).68 E F1(Bash)108 480 Q F0 .598(handles se)3.098 -F -.15(ve)-.25 G .598(ral \214lenames specially when the).15 F 3.099(ya) --.15 G .599(re used in redirections, as described in the follo)-3.099 F -(wing)-.25 E 3.478(table. If)108 492 R .978 -(the operating system on which)3.478 F F1(bash)3.478 E F0 .978 -(is running pro)3.478 F .977 -(vides these special \214les, bash will use them;)-.15 F -(otherwise it will emulate them internally with the beha)108 504 Q -(vior described belo)-.2 E -.65(w.)-.25 G F1(/de)144 520.8 Q(v/fd/)-.15 -E F3(fd)A F0(If)180 532.8 Q F3(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E -(ger)-.15 E 2.5<2c8c>-.4 G(le descriptor)-2.5 E F3(fd)2.5 E F0 -(is duplicated.)2.5 E F1(/de)144 544.8 Q(v/stdin)-.15 E F0 -(File descriptor 0 is duplicated.)180 556.8 Q F1(/de)144 568.8 Q -(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 580.8 Q F1(/de) -144 592.8 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 -604.8 Q F1(/de)144 616.8 Q(v/tcp/)-.15 E F3(host)A F1(/)A F3(port)A F0 -(If)180 628.8 Q F3(host)2.996 E F0 .496(is a v)2.996 F .496 -(alid hostname or Internet address, and)-.25 F F3(port)2.997 E F0 .497 -(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E -(vice name,)180 640.8 Q F1(bash)2.5 E F0 -(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F1(/de)144 -652.8 Q(v/udp/)-.15 E F3(host)A F1(/)A F3(port)A F0(If)180 664.8 Q F3 -(host)2.997 E F0 .497(is a v)2.997 F .497 -(alid hostname or Internet address, and)-.25 F F3(port)2.996 E F0 .496 -(is an inte)2.996 F .496(ger port number or ser)-.15 F(-)-.2 E -(vice name,)180 676.8 Q F1(bash)2.5 E F0 -(attempts to open the corresponding UDP sock)2.5 E(et.)-.1 E 2.5(Af)108 -693.6 S(ailure to open or create a \214le causes the redirection to f) --2.6 E(ail.)-.1 E .045(Redirections using \214le descriptors greater th\ -an 9 should be used with care, as the)108 710.4 R 2.546(ym)-.15 G .046 -(ay con\215ict with \214le de-)-2.546 F -(scriptors the shell uses internally)108 722.4 Q(.)-.65 E(GNU Bash 5.1) -72 768 Q(2020 October 29)141.235 E(28)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(An)108 84 Q 3.138 +(yc)-.15 G .638(haracter that appears in a pattern, other than the spec\ +ial pattern characters described belo)-3.138 F 1.938 -.65(w, m)-.25 H +(atches).65 E 2.721(itself. The)108 96 R .221 +(NUL character may not occur in a pattern.)2.721 F 2.721(Ab)5.221 G .221 +(ackslash escapes the follo)-2.721 F .222(wing character; the es-)-.25 F +.418(caping backslash is discarded when matching.)108 108 R .418 +(The special pattern characters must be quoted if the)5.418 F 2.918(ya) +-.15 G .418(re to)-2.918 F(be matched literally)108 120 Q(.)-.65 E +(The special pattern characters ha)108 136.8 Q .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E/F1 10/Times-Bold@0 SF(*)144 153.6 +Q F0 .376(Matches an)180 153.6 R 2.876(ys)-.15 G .376 +(tring, including the null string.)-2.876 F .376(When the)5.376 F F1 +(globstar)2.876 E F0 .377(shell option is enabled,)2.876 F(and)180 165.6 +Q F1(*)3.275 E F0 .775(is used in a pathname e)3.275 F .775 +(xpansion conte)-.15 F .775(xt, tw)-.15 F 3.275(oa)-.1 G(djacent)-3.275 +E F1(*)3.275 E F0 3.275(su)C .775(sed as a single pattern)-3.275 F 1.058 +(will match all \214les and zero or more directories and subdirectories\ +.)180 177.6 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E +F0(,)A(tw)180 189.6 Q 2.5(oa)-.1 G(djacent)-2.5 E F1(*)2.5 E F0 2.5(sw)C +(ill match only directories and subdirectories.)-2.5 E F1(?)144 201.6 Q +F0(Matches an)180 201.6 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E +F1([...])144 213.6 Q F0 .579(Matches an)180 213.6 R 3.079(yo)-.15 G .579 +(ne of the enclosed characters.)-3.079 F 3.079(Ap)5.579 G .578 +(air of characters separated by a h)-3.079 F(yphen)-.05 E .684 +(denotes a)180 225.6 R/F2 10/Times-Italic@0 SF -.15(ra)3.184 G(ng).15 E +3.184(ee)-.1 G(xpr)-3.384 E(ession)-.37 E F0 3.184(;a)C .984 -.15(ny c) +-3.184 H .684(haracter that f).15 F .684(alls between those tw)-.1 F +3.185(oc)-.1 G .685(haracters, inclu-)-3.185 F(si)180 237.6 Q -.15(ve) +-.25 G 3.713(,u).15 G 1.213(sing the current locale')-3.713 F 3.712(sc) +-.55 G 1.212(ollating sequence and character set, is matched.)-3.712 F +1.212(If the)6.212 F 1.123(\214rst character follo)180 249.6 R 1.123 +(wing the)-.25 F F1([)3.623 E F0 1.123(is a)3.623 F F1(!)3.623 E F0 +1.124(or a)6.123 F F1(^)3.624 E F0 1.124(then an)3.624 F 3.624(yc)-.15 G +1.124(haracter not enclosed is matched.)-3.624 F .895 +(The sorting order of characters in range e)180 261.6 R .894 +(xpressions is determined by the current locale)-.15 F .375(and the v) +180 273.6 R .375(alues of the)-.25 F/F3 9/Times-Bold@0 SF(LC_COLLA)2.875 +E(TE)-.855 E F0(or)2.625 E F3(LC_ALL)2.875 E F0 .375(shell v)2.625 F +.375(ariables, if set.)-.25 F 1.976 -.8(To o)5.376 H .376 +(btain the tra-).8 F .068(ditional interpretation of range e)180 285.6 R +.068(xpressions, where)-.15 F F1([a\255d])2.568 E F0 .067(is equi)2.567 +F -.25(va)-.25 G .067(lent to).25 F F1([abcd])2.567 E F0 2.567(,s)C .067 +(et v)-2.567 F(alue)-.25 E .156(of the)180 297.6 R F1(LC_ALL)2.656 E F0 +.156(shell v)2.656 F .156(ariable to)-.25 F F1(C)2.657 E F0 2.657(,o)C +2.657(re)-2.657 G .157(nable the)-2.657 F F1(globasciiranges)2.657 E F0 +.157(shell option.)2.657 F(A)5.157 E F12.657 E F0(may)2.657 E .193(\ +be matched by including it as the \214rst or last character in the set.) +180 309.6 R(A)5.193 E F1(])2.693 E F0 .193(may be matched by)2.693 F +(including it as the \214rst character in the set.)180 321.6 Q -.4(Wi) +180 339.6 S(thin).4 E F1([)3.07 E F0(and)3.07 E F1(])3.07 E F0(,)A F2 +-.15(ch)3.07 G(ar).15 E .571(acter classes)-.15 F F0 .571 +(can be speci\214ed using the syntax)3.071 F F1([:)3.071 E F2(class)A F1 +(:])A F0 3.071(,w)C(here)-3.071 E F2(class)3.071 E F0 +(is one of the follo)180 351.6 Q +(wing classes de\214ned in the POSIX standard:)-.25 E F1 5.889 +(alnum alpha ascii blank cntrl digit graph lo)180 363.6 R 5.889 +(wer print punct space up-)-.1 F 5(per w)180 375.6 R 5(ord xdigit)-.1 F +F0 4.289(Ac)180 387.6 S 1.789(haracter class matches an)-4.289 F 4.289 +(yc)-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E +F1 -.1(wo)4.29 G(rd).1 E F0(character)4.29 E +(class matches letters, digits, and the character _.)180 399.6 Q -.4(Wi) +180 417.6 S(thin).4 E F1([)4.537 E F0(and)4.537 E F1(])4.537 E F0 4.537 +(,a)C(n)-4.537 E F2 2.037(equivalence class)4.537 F F0 2.036 +(can be speci\214ed using the syntax)4.536 F F1([=)4.536 E F2(c)A F1(=]) +A F0 4.536(,w)C(hich)-4.536 E .125(matches all characters with the same\ + collation weight \(as de\214ned by the current locale\) as)180 429.6 R +(the character)180 441.6 Q F2(c)2.5 E F0(.)A -.4(Wi)180 459.6 S(thin).4 +E F1([)2.5 E F0(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.) +2.5 E F2(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F2 +(symbol)2.5 E F0(.)A .54(If the)108 476.4 R F1(extglob)3.04 E F0 .54 +(shell option is enabled using the)3.04 F F1(shopt)3.039 E F0 -.2(bu) +3.039 G .539(iltin, the shell recognizes se).2 F -.15(ve)-.25 G .539 +(ral e).15 F .539(xtended pattern)-.15 F .037(matching operators.)108 +488.4 R .037(In the follo)5.037 F .037(wing description, a)-.25 F F2 +(pattern-list)2.538 E F0 .038 +(is a list of one or more patterns separated by)2.538 F(a)108 500.4 Q F1 +(|)2.5 E F0 5(.C)C +(omposite patterns may be formed using one or more of the follo)-5 E +(wing sub-patterns:)-.25 E F1(?\()144 524.4 Q F2(pattern-list).833 E F1 +(\)).833 E F0(Matches zero or one occurrence of the gi)180 536.4 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 548.4 Q F2 +(pattern-list).833 E F1(\)).833 E F0 +(Matches zero or more occurrences of the gi)180 560.4 Q -.15(ve)-.25 G +2.5(np).15 G(atterns)-2.5 E F1(+\()144 572.4 Q F2(pattern-list).833 E F1 +(\)).833 E F0(Matches one or more occurrences of the gi)180 584.4 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 596.4 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches one of the gi)180 608.4 Q +-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(!\()144 620.4 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches an)180 632.4 Q(ything e) +-.15 E(xcept one of the gi)-.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns) +-2.5 E .988(When matching \214lenames, the)108 649.2 R F1(dotglob)3.488 +E F0 .988 +(shell option determines the set of \214lenames that are tested: when) +3.488 F F1(dotglob)108 661.2 Q F0 1.391 +(is enabled, the set of \214lenames includes all \214les be)3.891 F +1.392(ginning with `)-.15 F(`.)-.74 E -.74('')-.7 G 3.892(,b).74 G 1.392 +(ut `)-4.092 F(`.)-.74 E 2.872 -.74('' a)-.7 H 1.392(nd `).74 F(`..)-.74 +E 2.872 -.74('' m)-.7 H 1.392(ust be).74 F .298 +(matched by a pattern or sub-pattern that be)108 673.2 R .298 +(gins with a dot; when it is disabled, the set does not include an)-.15 +F(y)-.15 E .327(\214lenames be)108 685.2 R .327(ginning with `)-.15 F +(`.)-.74 E 1.807 -.74('' u)-.7 H .327 +(nless the pattern or sub-pattern be).74 F .327(gins with a `)-.15 F(`.) +-.74 E -.74('')-.7 G 5.327(.A).74 G 2.827(sa)-5.327 G(bo)-2.827 E -.15 +(ve)-.15 G 2.828(,`).15 G(`.)-3.568 E 1.808 -.74('' o)-.7 H .328 +(nly has a).74 F(special meaning when matching \214lenames.)108 697.2 Q +.969(Complicated e)108 714 R .969(xtended pattern matching ag)-.15 F +.969(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968 +(specially when the patterns contain).65 F 1.23 +(alternations and the strings contain multiple matches.)108 726 R 1.23 +(Using separate matches ag)6.23 F 1.23(ainst shorter strings, or)-.05 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(28)185.955 E 0 Cg EP %%Page: 29 29 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(Redir)87 84 Q(ecting Input)-.18 E F0 .391 -(Redirection of input causes the \214le whose name results from the e) -108 96 R .391(xpansion of)-.15 F/F2 10/Times-Italic@0 SF(wor)3.231 E(d) --.37 E F0 .391(to be opened for read-)3.661 F(ing on \214le descriptor) -108 108 Q F2(n)2.86 E F0 2.5(,o).24 G 2.5(rt)-2.5 G -(he standard input \(\214le descriptor 0\) if)-2.5 E F2(n)2.86 E F0 -(is not speci\214ed.)2.74 E -(The general format for redirecting input is:)108 124.8 Q([)144 141.6 Q -F2(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 158.4 Q -(ecting Output)-.18 E F0 .174 -(Redirection of output causes the \214le whose name results from the e) -108 170.4 R .175(xpansion of)-.15 F F2(wor)3.015 E(d)-.37 E F0 .175 -(to be opened for writ-)3.445 F .084(ing on \214le descriptor)108 182.4 -R F2(n)2.944 E F0 2.583(,o).24 G 2.583(rt)-2.583 G .083 -(he standard output \(\214le descriptor 1\) if)-2.583 F F2(n)2.943 E F0 -.083(is not speci\214ed.)2.823 F .083(If the \214le does not e)5.083 F -(x-)-.15 E(ist it is created; if it does e)108 194.4 Q -(xist it is truncated to zero size.)-.15 E -(The general format for redirecting output is:)108 211.2 Q([)144 228 Q -F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154 -(If the redirection operator is)108 244.8 R F1(>)2.654 E F0 2.654(,a)C -.154(nd the)-2.654 F F1(noclob)2.654 E(ber)-.1 E F0 .154(option to the) -2.654 F F1(set)2.655 E F0 -.2(bu)2.655 G .155 -(iltin has been enabled, the redirection).2 F .658(will f)108 256.8 R -.658(ail if the \214le whose name results from the e)-.1 F .658 -(xpansion of)-.15 F F2(wor)3.158 E(d)-.37 E F0 -.15(ex)3.158 G .657 -(ists and is a re).15 F .657(gular \214le.)-.15 F .657(If the redi-) -5.657 F .408(rection operator is)108 268.8 R F1(>|)2.909 E F0 2.909(,o)C -2.909(rt)-2.909 G .409(he redirection operator is)-2.909 F F1(>)2.909 E -F0 .409(and the)2.909 F F1(noclob)2.909 E(ber)-.1 E F0 .409 -(option to the)2.909 F F1(set)2.909 E F0 -.2(bu)2.909 G .409 -(iltin command).2 F(is not enabled, the redirection is attempted e)108 -280.8 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by) --2.5 E F2(wor)2.5 E(d)-.37 E F0 -.15(ex)2.5 G(ists.).15 E F1 -.25(Ap)87 -297.6 S(pending Redir).25 E(ected Output)-.18 E F0 .642 -(Redirection of output in this f)108 309.6 R .642 -(ashion causes the \214le whose name results from the e)-.1 F .641 -(xpansion of)-.15 F F2(wor)3.481 E(d)-.37 E F0 .641(to be)3.911 F .454 -(opened for appending on \214le descriptor)108 321.6 R F2(n)3.315 E F0 -2.955(,o).24 G 2.955(rt)-2.955 G .455 -(he standard output \(\214le descriptor 1\) if)-2.955 F F2(n)3.315 E F0 -.455(is not speci\214ed.)3.195 F(If)5.455 E(the \214le does not e)108 -333.6 Q(xist it is created.)-.15 E -(The general format for appending output is:)108 350.4 Q([)144 367.2 Q -F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 384 Q -(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249 -(This construct allo)108 396 R .249(ws both the standard output \(\214l\ -e descriptor 1\) and the standard error output \(\214le descrip-)-.25 F -(tor 2\) to be redirected to the \214le whose name is the e)108 408 Q -(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E(There are tw)108 -424.8 Q 2.5(of)-.1 G -(ormats for redirecting standard output and standard error:)-2.5 E F1 -(&>)144 441.6 Q F2(wor)A(d)-.37 E F0(and)108 453.6 Q F1(>&)144 465.6 Q -F2(wor)A(d)-.37 E F0(Of the tw)108 482.4 Q 2.5(of)-.1 G -(orms, the \214rst is preferred.)-2.5 E(This is semantically equi)5 E --.25(va)-.25 G(lent to).25 E F1(>)144 499.2 Q F2(wor)A(d)-.37 E F0(2)2.5 -E F1(>&)A F0(1)A .114(When using the second form,)108 516 R F2(wor)2.614 -E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)-.15 F F1 -2.614 E F0 5.114(.I)C 2.614(fi)-5.114 G 2.615(td)-2.614 G .115 -(oes, other redirection operators)-2.615 F(apply \(see)108 528 Q F1 -(Duplicating File Descriptors)2.5 E F0(belo)2.5 E -(w\) for compatibility reasons.)-.25 E F1 -.25(Ap)87 544.8 S -(pending Standard Output and Standard Err).25 E(or)-.18 E F0 .249 -(This construct allo)108 556.8 R .249(ws both the standard output \(\ -\214le descriptor 1\) and the standard error output \(\214le descrip-) --.25 F(tor 2\) to be appended to the \214le whose name is the e)108 -568.8 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E -(The format for appending standard output and standard error is:)108 -585.6 Q F1(&>>)144 602.4 Q F2(wor)A(d)-.37 E F0 -(This is semantically equi)108 619.2 Q -.25(va)-.25 G(lent to).25 E F1 -(>>)144 636 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A(\(see)108 -652.8 Q F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E -F1(Her)87 669.6 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of red\ -irection instructs the shell to read input from the current source unti\ -l a line containing only)108 681.6 R F2(delimiter)108.35 693.6 Q F0 .615 -(\(with no trailing blanks\) is seen.)3.845 F .615 -(All of the lines read up to that point are then used as the stan-)5.615 -F(dard input \(or \214le descriptor)108 705.6 Q F2(n)2.5 E F0(if)2.5 E -F2(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E -(The format of here-documents is:)108 722.4 Q(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(29)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(using arrays of strings instead of a single long string, may be f)108 +84 Q(aster)-.1 E(.)-.55 E/F1 10/Times-Bold@0 SF(Quote Remo)87 100.8 Q +-.1(va)-.1 G(l).1 E F0 1.113(After the preceding e)108 112.8 R 1.113 +(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\) +3.613 E F0(,)A F1<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F1(")4.445 E F0 +1.112(that did not result)4.445 F(from one of the abo)108 124.8 Q .3 +-.15(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F2 +10.95/Times-Bold@0 SF(REDIRECTION)72 141.6 Q F0 .545 +(Before a command is e)108 153.6 R -.15(xe)-.15 G .545 +(cuted, its input and output may be).15 F/F3 10/Times-Italic@0 SF -.37 +(re)3.045 G(dir).37 E(ected)-.37 E F0 .545 +(using a special notation interpreted)3.815 F .429(by the shell.)108 +165.6 R F3(Redir)5.428 E(ection)-.37 E F0(allo)2.928 E .428(ws commands\ +' \214le handles to be duplicated, opened, closed, made to refer to)-.25 +F(dif)108 177.6 Q 1.019(ferent \214les, and can change the \214les the \ +command reads from and writes to.)-.25 F 1.02(Redirection may also be) +6.02 F .215(used to modify \214le handles in the current shell e)108 +189.6 R -.15(xe)-.15 G .215(cution en).15 F 2.715(vironment. The)-.4 F +(follo)2.715 E .215(wing redirection operators)-.25 F .862 +(may precede or appear an)108 201.6 R .862(ywhere within a)-.15 F F3 +.862(simple command)3.702 F F0 .862(or may follo)4.132 F 3.362(wa)-.25 G +F3(command).2 E F0 5.862(.R).77 G .862(edirections are)-5.862 F +(processed in the order the)108 213.6 Q 2.5(ya)-.15 G(ppear)-2.5 E 2.5 +(,f)-.4 G(rom left to right.)-2.5 E .771(Each redirection that may be p\ +receded by a \214le descriptor number may instead be preceded by a w)108 +230.4 R .771(ord of)-.1 F .292(the form {)108 242.4 R F3(varname)A F0 +2.793(}. In)B .293(this case, for each redirection operator e)2.793 F +.293(xcept >&- and <&-, the shell will allocate)-.15 F 3.18<618c>108 +254.4 S .679(le descriptor greater than or equal to 10 and assign it to) +-3.18 F F3(varname)3.179 E F0 5.679(.I)C 3.179(f>)-5.679 G .679 +(&- or <&- is preceded by {)-3.179 F F3(var)A(-)-.2 E(name)108 266.4 Q +F0 .599(}, the v)B .599(alue of)-.25 F F3(varname)3.099 E F0 .599 +(de\214nes the \214le descriptor to close.)3.099 F .6(If {)5.6 F F3 +(varname)A F0 3.1(}i)C 3.1(ss)-3.1 G .6(upplied, the redirection)-3.1 F +.794(persists be)108 278.4 R .794(yond the scope of the command, allo) +-.15 F .793(wing the shell programmer to manage the \214le descriptor') +-.25 F(s)-.55 E(lifetime manually)108 290.4 Q 5(.T)-.65 G(he)-5 E F1 -.1 +(va)2.5 G(rr).1 E(edir_close)-.18 E F0(shell option manages this beha) +2.5 E(vior)-.2 E(.)-.55 E .283(In the follo)108 307.2 R .284(wing descr\ +iptions, if the \214le descriptor number is omitted, and the \214rst ch\ +aracter of the redirect-)-.25 F .513(ion operator is)108 319.2 R F1(<) +3.012 E F0 3.012(,t)C .512 +(he redirection refers to the standard input \(\214le descriptor 0\).) +-3.012 F .512(If the \214rst character of the)5.512 F +(redirection operator is)108 331.2 Q F1(>)2.5 E F0 2.5(,t)C +(he redirection refers to the standard output \(\214le descriptor 1\).) +-2.5 E .824(The w)108 348 R .824(ord follo)-.1 F .824 +(wing the redirection operator in the follo)-.25 F .825 +(wing descriptions, unless otherwise noted, is sub-)-.25 F .463 +(jected to brace e)108 360 R .463(xpansion, tilde e)-.15 F .462 +(xpansion, parameter and v)-.15 F .462(ariable e)-.25 F .462 +(xpansion, command substitution, arith-)-.15 F .866(metic e)108 372 R +.866(xpansion, quote remo)-.15 F -.25(va)-.15 G .866(l, pathname e).25 F +.867(xpansion, and w)-.15 F .867(ord splitting.)-.1 F .867(If it e)5.867 +F .867(xpands to more than one)-.15 F -.1(wo)108 384 S(rd,).1 E F1(bash) +2.5 E F0(reports an error)2.5 E(.)-.55 E +(Note that the order of redirections is signi\214cant.)108 400.8 Q -.15 +(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 417.6 Q F1(>)2.5 +E F0(dirlist 2)2.5 E F1(>&)A F0(1)A +(directs both standard output and standard error to the \214le)108 434.4 +Q F3(dirlist)2.85 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 +451.2 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505 +(directs only the standard output to \214le)108 468 R F3(dirlist)3.355 E +F0 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505 +(as duplicated from the standard)-.1 F +(output before the standard output w)108 480 Q(as redirected to)-.1 E F3 +(dirlist)2.85 E F0(.).68 E F1(Bash)108 496.8 Q F0 .598(handles se)3.098 +F -.15(ve)-.25 G .598(ral \214lenames specially when the).15 F 3.099(ya) +-.15 G .599(re used in redirections, as described in the follo)-3.099 F +(wing)-.25 E 3.478(table. If)108 508.8 R .978 +(the operating system on which)3.478 F F1(bash)3.478 E F0 .978 +(is running pro)3.478 F .977 +(vides these special \214les, bash will use them;)-.15 F +(otherwise it will emulate them internally with the beha)108 520.8 Q +(vior described belo)-.2 E -.65(w.)-.25 G F1(/de)144 537.6 Q(v/fd/)-.15 +E F3(fd)A F0(If)180 549.6 Q F3(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E +(ger)-.15 E 2.5<2c8c>-.4 G(le descriptor)-2.5 E F3(fd)2.5 E F0 +(is duplicated.)2.5 E F1(/de)144 561.6 Q(v/stdin)-.15 E F0 +(File descriptor 0 is duplicated.)180 573.6 Q F1(/de)144 585.6 Q +(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 597.6 Q F1(/de) +144 609.6 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 +621.6 Q F1(/de)144 633.6 Q(v/tcp/)-.15 E F3(host)A F1(/)A F3(port)A F0 +(If)180 645.6 Q F3(host)2.996 E F0 .496(is a v)2.996 F .496 +(alid hostname or Internet address, and)-.25 F F3(port)2.997 E F0 .497 +(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E +(vice name,)180 657.6 Q F1(bash)2.5 E F0 +(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F1(/de)144 +669.6 Q(v/udp/)-.15 E F3(host)A F1(/)A F3(port)A F0(If)180 681.6 Q F3 +(host)2.997 E F0 .497(is a v)2.997 F .497 +(alid hostname or Internet address, and)-.25 F F3(port)2.996 E F0 .496 +(is an inte)2.996 F .496(ger port number or ser)-.15 F(-)-.2 E +(vice name,)180 693.6 Q F1(bash)2.5 E F0 +(attempts to open the corresponding UDP sock)2.5 E(et.)-.1 E 2.5(Af)108 +710.4 S(ailure to open or create a \214le causes the redirection to f) +-2.6 E(ail.)-.1 E .946(Redirections using \214le descriptors greater th\ +an 9 should be used with care, as the)108 727.2 R 3.447(ym)-.15 G .947 +(ay con\215ict with \214le)-3.447 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(29)185.955 E 0 Cg EP %%Page: 30 30 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E([)144 84 Q/F1 10 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(descriptors the shell uses internally)108 84 Q(.)-.65 E/F1 10 +/Times-Bold@0 SF(Redir)87 100.8 Q(ecting Input)-.18 E F0 .391 +(Redirection of input causes the \214le whose name results from the e) +108 112.8 R .391(xpansion of)-.15 F/F2 10/Times-Italic@0 SF(wor)3.231 E +(d)-.37 E F0 .391(to be opened for read-)3.661 F +(ing on \214le descriptor)108 124.8 Q F2(n)2.86 E F0 2.5(,o).24 G 2.5 +(rt)-2.5 G(he standard input \(\214le descriptor 0\) if)-2.5 E F2(n)2.86 +E F0(is not speci\214ed.)2.74 E +(The general format for redirecting input is:)108 141.6 Q([)144 158.4 Q +F2(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 175.2 Q +(ecting Output)-.18 E F0 .174 +(Redirection of output causes the \214le whose name results from the e) +108 187.2 R .175(xpansion of)-.15 F F2(wor)3.015 E(d)-.37 E F0 .175 +(to be opened for writ-)3.445 F .084(ing on \214le descriptor)108 199.2 +R F2(n)2.944 E F0 2.583(,o).24 G 2.583(rt)-2.583 G .083 +(he standard output \(\214le descriptor 1\) if)-2.583 F F2(n)2.943 E F0 +.083(is not speci\214ed.)2.823 F .083(If the \214le does not e)5.083 F +(x-)-.15 E(ist it is created; if it does e)108 211.2 Q +(xist it is truncated to zero size.)-.15 E +(The general format for redirecting output is:)108 228 Q([)144 244.8 Q +F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154 +(If the redirection operator is)108 261.6 R F1(>)2.654 E F0 2.654(,a)C +.154(nd the)-2.654 F F1(noclob)2.654 E(ber)-.1 E F0 .154(option to the) +2.654 F F1(set)2.655 E F0 -.2(bu)2.655 G .155 +(iltin has been enabled, the redirection).2 F .658(will f)108 273.6 R +.658(ail if the \214le whose name results from the e)-.1 F .658 +(xpansion of)-.15 F F2(wor)3.158 E(d)-.37 E F0 -.15(ex)3.158 G .657 +(ists and is a re).15 F .657(gular \214le.)-.15 F .657(If the redi-) +5.657 F .408(rection operator is)108 285.6 R F1(>|)2.909 E F0 2.909(,o)C +2.909(rt)-2.909 G .409(he redirection operator is)-2.909 F F1(>)2.909 E +F0 .409(and the)2.909 F F1(noclob)2.909 E(ber)-.1 E F0 .409 +(option to the)2.909 F F1(set)2.909 E F0 -.2(bu)2.909 G .409 +(iltin command).2 F(is not enabled, the redirection is attempted e)108 +297.6 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by) +-2.5 E F2(wor)2.5 E(d)-.37 E F0 -.15(ex)2.5 G(ists.).15 E F1 -.25(Ap)87 +314.4 S(pending Redir).25 E(ected Output)-.18 E F0 .642 +(Redirection of output in this f)108 326.4 R .642 +(ashion causes the \214le whose name results from the e)-.1 F .641 +(xpansion of)-.15 F F2(wor)3.481 E(d)-.37 E F0 .641(to be)3.911 F .454 +(opened for appending on \214le descriptor)108 338.4 R F2(n)3.315 E F0 +2.955(,o).24 G 2.955(rt)-2.955 G .455 +(he standard output \(\214le descriptor 1\) if)-2.955 F F2(n)3.315 E F0 +.455(is not speci\214ed.)3.195 F(If)5.455 E(the \214le does not e)108 +350.4 Q(xist it is created.)-.15 E +(The general format for appending output is:)108 367.2 Q([)144 384 Q F2 +(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 400.8 Q +(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249 +(This construct allo)108 412.8 R .249(ws both the standard output \(\ +\214le descriptor 1\) and the standard error output \(\214le descrip-) +-.25 F(tor 2\) to be redirected to the \214le whose name is the e)108 +424.8 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E +(There are tw)108 441.6 Q 2.5(of)-.1 G +(ormats for redirecting standard output and standard error:)-2.5 E F1 +(&>)144 458.4 Q F2(wor)A(d)-.37 E F0(and)108 470.4 Q F1(>&)144 482.4 Q +F2(wor)A(d)-.37 E F0(Of the tw)108 499.2 Q 2.5(of)-.1 G +(orms, the \214rst is preferred.)-2.5 E(This is semantically equi)5 E +-.25(va)-.25 G(lent to).25 E F1(>)144 516 Q F2(wor)A(d)-.37 E F0(2)2.5 E +F1(>&)A F0(1)A .114(When using the second form,)108 532.8 R F2(wor)2.614 +E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)-.15 F F1 +2.614 E F0 5.114(.I)C 2.614(fi)-5.114 G 2.615(td)-2.614 G .115 +(oes, other redirection operators)-2.615 F(apply \(see)108 544.8 Q F1 +(Duplicating File Descriptors)2.5 E F0(belo)2.5 E +(w\) for compatibility reasons.)-.25 E F1 -.25(Ap)87 561.6 S +(pending Standard Output and Standard Err).25 E(or)-.18 E F0 .249 +(This construct allo)108 573.6 R .249(ws both the standard output \(\ +\214le descriptor 1\) and the standard error output \(\214le descrip-) +-.25 F(tor 2\) to be appended to the \214le whose name is the e)108 +585.6 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E +(The format for appending standard output and standard error is:)108 +602.4 Q F1(&>>)144 619.2 Q F2(wor)A(d)-.37 E F0 +(This is semantically equi)108 636 Q -.25(va)-.25 G(lent to).25 E F1(>>) +144 652.8 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A(\(see)108 669.6 +Q F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E F1 +(Her)87 686.4 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of redir\ +ection instructs the shell to read input from the current source until \ +a line containing only)108 698.4 R F2(delimiter)108.35 710.4 Q F0 .615 +(\(with no trailing blanks\) is seen.)3.845 F .615 +(All of the lines read up to that point are then used as the stan-)5.615 +F(dard input \(or \214le descriptor)108 722.4 Q F2(n)2.5 E F0(if)2.5 E +F2(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E(GNU Bash 5.2)72 768 +Q(2021 December 26)136.795 E(30)185.955 E 0 Cg EP +%%Page: 31 31 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(The format of here-documents is:)108 84 Q([)144 100.8 Q/F1 10 /Times-Italic@0 SF(n)A F0(])A/F2 10/Times-Bold@0 SF(<<)A F0([)A F2A -F0(])A F1(wor)A(d)-.37 E(her)164 96 Q(e-document)-.37 E(delimiter)144 -108 Q F0 .301(No parameter and v)108 124.8 R .302(ariable e)-.25 F .302 -(xpansion, command substitution, arithmetic e)-.15 F .302 +F0(])A F1(wor)A(d)-.37 E(her)164 112.8 Q(e-document)-.37 E(delimiter)144 +124.8 Q F0 .301(No parameter and v)108 141.6 R .302(ariable e)-.25 F +.302(xpansion, command substitution, arithmetic e)-.15 F .302 (xpansion, or pathname e)-.15 F(xpansion)-.15 E .381(is performed on)108 -136.8 R F1(wor)3.221 E(d)-.37 E F0 5.381(.I).77 G 2.881(fa)-5.381 G .681 +153.6 R F1(wor)3.221 E(d)-.37 E F0 5.381(.I).77 G 2.881(fa)-5.381 G .681 -.15(ny p)-2.881 H .381(art of).15 F F1(wor)3.221 E(d)-.37 E F0 .381 (is quoted, the)3.651 F F1(delimiter)3.231 E F0 .381 (is the result of quote remo)3.611 F -.25(va)-.15 G 2.881(lo).25 G(n) -2.881 E F1(wor)3.221 E(d)-.37 E F0(,).77 E .773 -(and the lines in the here-document are not e)108 148.8 R 3.274 +(and the lines in the here-document are not e)108 165.6 R 3.274 (xpanded. If)-.15 F F1(wor)3.274 E(d)-.37 E F0 .774 (is unquoted, all lines of the here-document)3.274 F 1.195 -(are subjected to parameter e)108 160.8 R 1.194 +(are subjected to parameter e)108 177.6 R 1.194 (xpansion, command substitution, and arithmetic e)-.15 F 1.194 -(xpansion, the character se-)-.15 F(quence)108 172.8 Q F2(\\) +(xpansion, the character se-)-.15 F(quence)108 189.6 Q F2(\\) 2.5 E F0(is ignored, and)2.5 E F2(\\)2.5 E F0 (must be used to quote the characters)2.5 E F2(\\)2.5 E F0(,)A F2($)2.5 E F0 2.5(,a)C(nd)-2.5 E F2<92>2.5 E F0(.)A .601 -(If the redirection operator is)108 189.6 R F2(<<\255)3.101 E F0 3.101 +(If the redirection operator is)108 206.4 R F2(<<\255)3.101 E F0 3.101 (,t)C .601(hen all leading tab characters are stripped from input lines\ - and the line)-3.101 F(containing)108 201.6 Q F1(delimiter)2.85 E F0 5 + and the line)-3.101 F(containing)108 218.4 Q F1(delimiter)2.85 E F0 5 (.T).73 G(his allo)-5 E (ws here-documents within shell scripts to be indented in a natural f) --.25 E(ashion.)-.1 E F2(Her)87 218.4 Q 2.5(eS)-.18 G(trings)-2.5 E F0 -2.5(Av)108 230.4 S(ariant of here documents, the format is:)-2.75 E([) -144 247.2 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 264 Q F1 +-.25 E(ashion.)-.1 E F2(Her)87 235.2 Q 2.5(eS)-.18 G(trings)-2.5 E F0 +2.5(Av)108 247.2 S(ariant of here documents, the format is:)-2.75 E([) +144 264 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 280.8 Q F1 (wor)3.292 E(d)-.37 E F0(under)3.292 E .792(goes tilde e)-.18 F .792 (xpansion, parameter and v)-.15 F .792(ariable e)-.25 F .791 -(xpansion, command substitution, arithmetic)-.15 F -.15(ex)108 276 S +(xpansion, command substitution, arithmetic)-.15 F -.15(ex)108 292.8 S 1.187(pansion, and quote remo).15 F -.25(va)-.15 G 3.687(l. P).25 F 1.187(athname e)-.15 F 1.187(xpansion and w)-.15 F 1.187 (ord splitting are not performed.)-.1 F 1.188(The result is)6.187 F .375 -(supplied as a single string, with a ne)108 288 R .374(wline appended, \ -to the command on its standard input \(or \214le descrip-)-.25 F(tor)108 -300 Q F1(n)2.5 E F0(if)2.5 E F1(n)2.5 E F0(is speci\214ed\).)2.5 E F2 -(Duplicating File Descriptors)87 316.8 Q F0(The redirection operator)108 -328.8 Q([)144 345.6 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 .126 -(is used to duplicate input \214le descriptors.)108 362.4 R(If)5.127 E -F1(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127 +(supplied as a single string, with a ne)108 304.8 R .374(wline appended\ +, to the command on its standard input \(or \214le descrip-)-.25 F(tor) +108 316.8 Q F1(n)2.5 E F0(if)2.5 E F1(n)2.5 E F0(is speci\214ed\).)2.5 E +F2(Duplicating File Descriptors)87 333.6 Q F0(The redirection operator) +108 345.6 Q([)144 362.4 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 +.126(is used to duplicate input \214le descriptors.)108 379.2 R(If)5.127 +E F1(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127 (pands to one or more digits, the \214le descriptor denoted).15 F(by)108 -374.4 Q F1(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G +391.2 Q F1(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G 2.958(ft)-2.958 G .457(hat \214le descriptor)-2.958 F 5.457(.I)-.55 G 2.957(ft)-5.457 G .457(he digits in)-2.957 F F1(wor)3.297 E(d)-.37 E F0 .457(do not specify a \214le descriptor open)3.727 F .149 -(for input, a redirection error occurs.)108 386.4 R(If)5.149 E F1(wor) +(for input, a redirection error occurs.)108 403.2 R(If)5.149 E F1(wor) 2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F22.649 E F0 2.65<2c8c>C .15(le descriptor)-2.65 F F1(n)3.01 E F0 .15(is closed.) 2.89 F(If)5.15 E F1(n)3.01 E F0 .15(is not speci\214ed,)2.89 F -(the standard input \(\214le descriptor 0\) is used.)108 398.4 Q -(The operator)108 415.2 Q([)144 432 Q F1(n)A F0(])A F2(>&)A F1(wor)A(d) +(the standard input \(\214le descriptor 0\) is used.)108 415.2 Q +(The operator)108 432 Q([)144 448.8 Q F1(n)A F0(])A F2(>&)A F1(wor)A(d) -.37 E F0 .444 -(is used similarly to duplicate output \214le descriptors.)108 448.8 R +(is used similarly to duplicate output \214le descriptors.)108 465.6 R (If)5.444 E F1(n)3.304 E F0 .443 (is not speci\214ed, the standard output \(\214le descrip-)3.183 F .565 -(tor 1\) is used.)108 460.8 R .565(If the digits in)5.565 F F1(wor)3.406 +(tor 1\) is used.)108 477.6 R .565(If the digits in)5.565 F F1(wor)3.406 E(d)-.37 E F0 .566(do not specify a \214le descriptor open for output, \ -a redirection error oc-)3.836 F 3.204(curs. If)108 472.8 R F1(wor)3.544 +a redirection error oc-)3.836 F 3.204(curs. If)108 489.6 R F1(wor)3.544 E(d)-.37 E F0 -.25(eva)3.974 G .704(luates to).25 F F23.204 E F0 3.204<2c8c>C .704(le descriptor)-3.204 F F1(n)3.563 E F0 .703 (is closed.)3.443 F .703(As a special case, if)5.703 F F1(n)3.203 E F0 .703(is omitted, and)3.203 F F1(wor)3.203 E(d)-.37 E F0(does)3.203 E -.965(not e)108 484.8 R .965(xpand to one or more digits or)-.15 F F2 +.965(not e)108 501.6 R .965(xpand to one or more digits or)-.15 F F2 3.465 E F0 3.466(,t)C .966 (he standard output and standard error are redirected as described) --3.466 F(pre)108 496.8 Q(viously)-.25 E(.)-.65 E F2(Mo)87 513.6 Q -(ving File Descriptors)-.1 E F0(The redirection operator)108 525.6 Q([) -144 542.4 Q F1(n)A F0(])A F2(<&)A F1(digit)A F2A F0(mo)108 559.2 Q +-3.466 F(pre)108 513.6 Q(viously)-.25 E(.)-.65 E F2(Mo)87 530.4 Q +(ving File Descriptors)-.1 E F0(The redirection operator)108 542.4 Q([) +144 559.2 Q F1(n)A F0(])A F2(<&)A F1(digit)A F2A F0(mo)108 576 Q -.15(ve)-.15 G 3.018(st).15 G .518(he \214le descriptor)-3.018 F F1 (digit)3.018 E F0 .518(to \214le descriptor)3.018 F F1(n)3.378 E F0 3.018(,o).24 G 3.018(rt)-3.018 G .517 (he standard input \(\214le descriptor 0\) if)-3.018 F F1(n)3.017 E F0 -.517(is not speci-)3.017 F(\214ed.)108 571.2 Q F1(digit)5 E F0 +.517(is not speci-)3.017 F(\214ed.)108 588 Q F1(digit)5 E F0 (is closed after being duplicated to)2.5 E F1(n)2.5 E F0(.)A(Similarly) -108 588 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([)144 604.8 Q F1 -(n)A F0(])A F2(>&)A F1(digit)A F2A F0(mo)108 621.6 Q -.15(ve)-.15 G -2.767(st).15 G .267(he \214le descriptor)-2.767 F F1(digit)2.767 E F0 +108 604.8 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([)144 621.6 Q +F1(n)A F0(])A F2(>&)A F1(digit)A F2A F0(mo)108 638.4 Q -.15(ve)-.15 +G 2.767(st).15 G .267(he \214le descriptor)-2.767 F F1(digit)2.767 E F0 .267(to \214le descriptor)2.767 F F1(n)3.127 E F0 2.767(,o).24 G 2.767 (rt)-2.767 G .268(he standard output \(\214le descriptor 1\) if)-2.767 F -F1(n)2.768 E F0 .268(is not speci-)2.768 F(\214ed.)108 633.6 Q F2 -(Opening File Descriptors f)87 650.4 Q(or Reading and Writing)-.25 E F0 -(The redirection operator)108 662.4 Q([)144 679.2 Q F1(n)A F0(])A F2(<>) -A F1(wor)A(d)-.37 E F0 .518(causes the \214le whose name is the e)108 -696 R .518(xpansion of)-.15 F F1(wor)3.358 E(d)-.37 E F0 .518 +F1(n)2.768 E F0 .268(is not speci-)2.768 F(\214ed.)108 650.4 Q F2 +(Opening File Descriptors f)87 667.2 Q(or Reading and Writing)-.25 E F0 +(The redirection operator)108 679.2 Q([)144 696 Q F1(n)A F0(])A F2(<>)A +F1(wor)A(d)-.37 E F0 .518(causes the \214le whose name is the e)108 +712.8 R .518(xpansion of)-.15 F F1(wor)3.358 E(d)-.37 E F0 .518 (to be opened for both reading and writing on \214le de-)3.788 F -(scriptor)108 708 Q F1(n)2.86 E F0 2.5(,o).24 G 2.5(ro)-2.5 G 2.5<6e8c> --2.5 G(le descriptor 0 if)-2.5 E F1(n)2.86 E F0(is not speci\214ed.)2.74 -E(If the \214le does not e)5 E(xist, it is created.)-.15 E(GNU Bash 5.1) -72 768 Q(2020 October 29)141.235 E(30)190.395 E 0 Cg EP -%%Page: 31 31 +(scriptor)108 724.8 Q F1(n)2.86 E F0 2.5(,o).24 G 2.5(ro)-2.5 G 2.5 +<6e8c>-2.5 G(le descriptor 0 if)-2.5 E F1(n)2.86 E F0 +(is not speci\214ed.)2.74 E(If the \214le does not e)5 E +(xist, it is created.)-.15 E(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(31)185.955 E 0 Cg EP +%%Page: 32 32 %%BeginPageSetup BP %%EndPageSetup @@ -3983,15 +4110,14 @@ ses that may be set and unset with the)108 108 R/F3 10/Times-Bold@0 SF (wing the alias is also check)-.25 E(ed for alias e)-.1 E(xpansion.)-.15 E(Aliases are created and listed with the)108 220.8 Q F3(alias)2.5 E F0 (command, and remo)2.5 E -.15(ve)-.15 G 2.5(dw).15 G(ith the)-2.5 E F3 -(unalias)2.5 E F0(command.)2.5 E .284 -(There is no mechanism for using ar)108 237.6 R .284 -(guments in the replacement te)-.18 F 2.784(xt. If)-.15 F(ar)2.784 E -.284(guments are needed, a shell func-)-.18 F(tion should be used \(see) -108 249.6 Q F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E .282 -(Aliases are not e)108 266.4 R .282 -(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 G 2.782(,u) -.15 G .282(nless the)-2.782 F F3(expand_aliases)2.783 E F0 .283 -(shell option is set us-)2.783 F(ing)108 278.4 Q F3(shopt)2.5 E F0 +(unalias)2.5 E F0(command.)2.5 E .742 +(There is no mechanism for using ar)108 237.6 R .741 +(guments in the replacement te)-.18 F 3.241(xt. If)-.15 F(ar)3.241 E +.741(guments are needed, use a shell)-.18 F(function \(see)108 249.6 Q +F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E .282(Aliases are not e)108 +266.4 R .282(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 +G 2.782(,u).15 G .282(nless the)-2.782 F F3(expand_aliases)2.783 E F0 +.283(shell option is set us-)2.783 F(ing)108 278.4 Q F3(shopt)2.5 E F0 (\(see the description of)2.5 E F3(shopt)2.5 E F0(under)2.5 E F4 (SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .436 @@ -4090,9 +4216,9 @@ hildren \(including the functions it calls\).)108 638.4 R 1.185(Local v) F -.15(xe)-.15 G .008(cution to reach).15 F .814(the current function.) 108 727.2 R .813(The v)5.814 F .813(alue of a v)-.25 F .813 (ariable that a function sees depends on its v)-.25 F .813 -(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(GNU Bash 5.1)72 -768 Q(2020 October 29)141.235 E(31)190.395 E 0 Cg EP -%%Page: 32 32 +(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(32)185.955 E 0 Cg EP +%%Page: 33 33 %%BeginPageSetup BP %%EndPageSetup @@ -4151,4002 +4277,4117 @@ F0(or)3.859 E F2(typeset)3.859 E F0 -.2(bu)3.859 G 1.359(iltin com-).2 F 3.39(mands. The)108 324 R F23.39 E F0 .89(option to)3.39 F F2 (declar)3.39 E(e)-.18 E F0(or)3.39 E F2(typeset)3.39 E F0 .89 (will list the function names only \(and optionally the source)3.39 F -.326(\214le and line number)108 336 R 2.826(,i)-.4 G 2.826(ft)-2.826 G -(he)-2.826 E F2(extdeb)2.826 E(ug)-.2 E F0 .326 -(shell option is enabled\).)2.826 F .327(Functions may be e)5.327 F .327 -(xported so that subshells)-.15 F 1.298(automatically ha)108 348 R 1.598 --.15(ve t)-.2 H 1.298(hem de\214ned with the).15 F F23.798 E F0 -1.298(option to the)3.798 F F2(export)3.797 E F0 -.2(bu)3.797 G 3.797 -(iltin. A).2 F 1.297(function de\214nition may be)3.797 F -(deleted using the)108 360 Q F22.5 E F0(option to the)2.5 E F2 -(unset)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .371(Functions may be recursi) -108 376.8 R -.15(ve)-.25 G 5.371(.T).15 G(he)-5.371 E F2(FUNCNEST)2.871 -E F0 -.25(va)2.871 G .371 -(riable may be used to limit the depth of the function call).25 F .323 -(stack and restrict the number of function in)108 388.8 R -.2(vo)-.4 G +.046(\214le and line number)108 336 R 2.546(,i)-.4 G 2.546(ft)-2.546 G +(he)-2.546 E F2(extdeb)2.546 E(ug)-.2 E F0 .046 +(shell option is enabled\).)2.546 F .046(Functions may be e)5.046 F .046 +(xported so that child shell)-.15 F .493 +(processes \(those created when e)108 348 R -.15(xe)-.15 G .492 +(cuting a separate shell in).15 F -.2(vo)-.4 G .492 +(cation\) automatically ha).2 F .792 -.15(ve t)-.2 H .492 +(hem de\214ned with).15 F(the)108 360 Q F23.2 E F0 .7 +(option to the)3.2 F F2(export)3.2 E F0 -.2(bu)3.2 G 3.2(iltin. A).2 F +.701(function de\214nition may be deleted using the)3.2 F F23.201 +E F0 .701(option to the)3.201 F F2(unset)3.201 E F0 -.2(bu)108 372 S +(iltin.).2 E .372(Functions may be recursi)108 388.8 R -.15(ve)-.25 G +5.371(.T).15 G(he)-5.371 E F2(FUNCNEST)2.871 E F0 -.25(va)2.871 G .371 +(riable may be used to limit the depth of the function call).25 F .322 +(stack and restrict the number of function in)108 400.8 R -.2(vo)-.4 G 2.822(cations. By).2 F(def)2.822 E .322 -(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 400.8 Q +(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 412.8 Q .3 -.15(ve c)-.25 H(alls.).15 E/F3 10.95/Times-Bold@0 SF(ARITHMETIC EV) -72 417.6 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 1.088 -(The shell allo)108 429.6 R 1.088(ws arithmetic e)-.25 F 1.089 +72 429.6 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 1.089 +(The shell allo)108 441.6 R 1.089(ws arithmetic e)-.25 F 1.089 (xpressions to be e)-.15 F -.25(va)-.25 G 1.089 -(luated, under certain circumstances \(see the).25 F F2(let)3.589 E F0 -(and)3.589 E F2(de-)3.589 E(clar)108 441.6 Q(e)-.18 E F0 -.2(bu)3.453 G -.953(iltin commands, the).2 F F2(\(\()3.453 E F0 .952 +(luated, under certain circumstances \(see the).25 F F2(let)3.588 E F0 +(and)3.588 E F2(de-)3.588 E(clar)108 453.6 Q(e)-.18 E F0 -.2(bu)3.452 G +.952(iltin commands, the).2 F F2(\(\()3.452 E F0 .952 (compound command, and)3.452 F F2 .952(Arithmetic Expansion)3.452 F F0 -3.452(\). Ev)B .952(aluation is done in)-.25 F<8c78>108 453.6 Q 1.057 +3.453(\). Ev)B .953(aluation is done in)-.25 F<8c78>108 465.6 Q 1.058 (ed-width inte)-.15 F 1.057(gers with no check for o)-.15 F -.15(ve)-.15 G(r\215o).15 E 2.357 -.65(w, t)-.25 H 1.057(hough di).65 F 1.057 -(vision by 0 is trapped and \215agged as an error)-.25 F(.)-.55 E .829 -(The operators and their precedence, associati)108 465.6 R(vity)-.25 E +(vision by 0 is trapped and \215agged as an error)-.25 F(.)-.55 E .828 +(The operators and their precedence, associati)108 477.6 R(vity)-.25 E 3.329(,a)-.65 G .829(nd v)-3.329 F .829 -(alues are the same as in the C language.)-.25 F .828(The fol-)5.828 F -(lo)108 477.6 Q .439(wing list of operators is grouped into le)-.25 F --.15(ve)-.25 G .439(ls of equal-precedence operators.).15 F .44(The le) -5.44 F -.15(ve)-.25 G .44(ls are listed in order).15 F -(of decreasing precedence.)108 489.6 Q F1(id)108 506.4 Q F2(++)A F1(id) -2.5 E F2A F0 -.25(va)144 518.4 S -(riable post-increment and post-decrement).25 E F2 2.5108 530.4 S -F0(unary minus and plus)144 530.4 Q F2(++)108 542.4 Q F1(id)A F2 -2.5 E F1(id)A F0 -.25(va)144 554.4 S -(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 566.4 S F0 -(logical and bitwise ne)144 566.4 Q -.05(ga)-.15 G(tion).05 E F2(**)108 -578.4 Q F0 -.15(ex)144 578.4 S(ponentiation).15 E F2 2.5(*/%)108 590.4 S -F0(multiplication, di)144 590.4 Q(vision, remainder)-.25 E F2 2.5<2bad> -108 602.4 S F0(addition, subtraction)144 602.4 Q F2(<< >>)108 614.4 Q F0 -(left and right bitwise shifts)144 614.4 Q F2(<= >= < >)108 626.4 Q F0 -(comparison)144 638.4 Q F2(== !=)108 650.4 Q F0(equality and inequality) -144 650.4 Q F2(&)108 662.4 Q F0(bitwise AND)144 662.4 Q F2(^)108 674.4 Q -F0(bitwise e)144 674.4 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|) -108 686.4 Q F0(bitwise OR)144 686.4 Q F2(&&)108 698.4 Q F0(logical AND) -144 698.4 Q F2(||)108 710.4 Q F0(logical OR)144 710.4 Q(GNU Bash 5.1)72 -768 Q(2020 October 29)141.235 E(32)190.395 E 0 Cg EP -%%Page: 33 33 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF -.2(ex)108 84 S(pr).2 E/F2 10/Times-Bold@0 SF(?)A F1 --.2(ex)C(pr).2 E F2(:)A F1 -.2(ex)C(pr).2 E F0(conditional operator)144 -96 Q F2 2.5(=*)108 108 S 2.5(=/)-2.5 G 2.5(=%)-2.5 G 2.5(=+)-2.5 G 2.5 -<3dad>-2.5 G 2.5(=<)-2.5 G(<= >>= &= ^= |=)-2.5 E F0(assignment)144 120 -Q F1 -.2(ex)108 132 S(pr1).2 E F2(,)2.5 E F1 -.2(ex)2.5 G(pr2).2 E F0 -(comma)144 144 Q .68(Shell v)108 160.8 R .68(ariables are allo)-.25 F -.68(wed as operands; parameter e)-.25 F .68 -(xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F --.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 172.8 R 1.007(ithin an e)-.4 -F 1.007(xpression, shell v)-.15 F 1.007 -(ariables may also be referenced by name without using the parameter) --.25 F -.15(ex)108 184.8 S .165(pansion syntax.).15 F 2.665(As)5.165 G -.165(hell v)-2.665 F .165(ariable that is null or unset e)-.25 F -.25 -(va)-.25 G .165(luates to 0 when referenced by name without us-).25 F -.42(ing the parameter e)108 196.8 R .42(xpansion syntax.)-.15 F .42 -(The v)5.42 F .421(alue of a v)-.25 F .421(ariable is e)-.25 F -.25(va) --.25 G .421(luated as an arithmetic e).25 F .421(xpression when)-.15 F -.154(it is referenced, or when a v)108 208.8 R .154 -(ariable which has been gi)-.25 F -.15(ve)-.25 G 2.654(nt).15 G(he) --2.654 E F1(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .153 -(ute using)-.2 F F2(declar)2.653 E 2.653<65ad>-.18 G(i)-2.653 E F0 .153 -(is assigned a)2.653 F -.25(va)108 220.8 S 2.857(lue. A).25 F .357 -(null v)2.857 F .357(alue e)-.25 F -.25(va)-.25 G .357(luates to 0.).25 -F 2.857(As)5.357 G .357(hell v)-2.857 F .357(ariable need not ha)-.25 F -.657 -.15(ve i)-.2 H(ts).15 E F1(inte)2.857 E -.1(ge)-.4 G(r).1 E F0 -(attrib)2.857 E .357(ute turned on to be used)-.2 F(in an e)108 232.8 Q -(xpression.)-.15 E(Inte)108 249.6 Q .518(ger constants follo)-.15 F -3.018(wt)-.25 G .518(he C language de\214nition, without suf)-3.018 F -<8c78>-.25 E .517(es or character constants.)-.15 F .517(Constants with) -5.517 F 3.282(al)108 261.6 S .782 -(eading 0 are interpreted as octal numbers.)-3.282 F 3.283(Al)5.782 G -.783(eading 0x or 0X denotes he)-3.283 F 3.283(xadecimal. Otherwise,) --.15 F(num-)3.283 E .816(bers tak)108 273.6 R 3.316(et)-.1 G .816 -(he form [)-3.316 F F1(base#)A F0 .815(]n, where the optional)B F1(base) -3.315 E F0 .815(is a decimal number between 2 and 64 representing)3.315 -F .349(the arithmetic base, and)108 285.6 R F1(n)2.849 E F0 .349 -(is a number in that base.)2.849 F(If)5.35 E F1(base#)2.85 E F0 .35 -(is omitted, then base 10 is used.)2.85 F .35(When speci-)5.35 F(fying) -108 297.6 Q F1(n)2.975 E F0 2.975(,i)C 2.975(fan)-2.975 G .474(on-digit\ - is required, the digits greater than 9 are represented by the lo)-2.975 -F .474(wercase letters, the up-)-.25 F .518 -(percase letters, @, and _, in that order)108 309.6 R 5.518(.I)-.55 G(f) --5.518 E F1(base)3.018 E F0 .518(is less than or equal to 36, lo)3.018 F -.518(wercase and uppercase letters)-.25 F -(may be used interchangeably to represent numbers between 10 and 35.)108 -321.6 Q .235(Operators are e)108 338.4 R -.25(va)-.25 G .235 -(luated in order of precedence.).25 F(Sub-e)5.234 E .234 -(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .234 -(luated \214rst and may).25 F -.15(ove)108 350.4 S -(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E/F3 10.95 -/Times-Bold@0 SF(CONDITION)72 367.2 Q(AL EXPRESSIONS)-.219 E F0 .255 -(Conditional e)108 379.2 R .255(xpressions are used by the)-.15 F F2([[) -2.755 E F0 .255(compound command and the)2.755 F F2(test)2.755 E F0(and) -2.755 E F2([)2.756 E F0 -.2(bu)2.756 G .256(iltin commands to test).2 F -.134(\214le attrib)108 391.2 R .134 -(utes and perform string and arithmetic comparisons.)-.2 F(The)5.133 E -F2(test)2.633 E F0(and)2.633 E F2([)2.633 E F0 .133 -(commands determine their be-)2.633 F(ha)108 403.2 Q .197 -(vior based on the number of ar)-.2 F .198 -(guments; see the descriptions of those commands for an)-.18 F 2.698(yo) --.15 G .198(ther command-)-2.698 F(speci\214c actions.)108 415.2 Q .235 -(Expressions are formed from the follo)108 432 R .234 -(wing unary or binary primaries.)-.25 F F2(Bash)5.234 E F0 .234 -(handles se)2.734 F -.15(ve)-.25 G .234(ral \214lenames spe-).15 F .424 -(cially when the)108 444 R 2.924(ya)-.15 G .424(re used in e)-2.924 F -2.925(xpressions. If)-.15 F .425(the operating system on which)2.925 F -F2(bash)2.925 E F0 .425(is running pro)2.925 F .425(vides these)-.15 F -.345(special \214les, bash will use them; otherwise it will emulate the\ -m internally with this beha)108 456 R .344(vior: If an)-.2 F(y)-.15 E F1 -(\214le)2.844 E F0(ar)2.844 E(-)-.2 E .805 -(gument to one of the primaries is of the form)108 468 R F1(/de)3.305 E -(v/fd/n)-.15 E F0 3.306(,t)C .806(hen \214le descriptor)-3.306 F F1(n) -3.306 E F0 .806(is check)3.306 F 3.306(ed. If)-.1 F(the)3.306 E F1 -(\214le)3.306 E F0(ar)3.306 E(gu-)-.18 E .03 -(ment to one of the primaries is one of)108 480 R F1(/de)2.53 E(v/stdin) --.15 E F0(,)A F1(/de)2.529 E(v/stdout)-.15 E F0 2.529(,o)C(r)-2.529 E F1 -(/de)2.529 E(v/stderr)-.15 E F0 2.529<2c8c>C .029 -(le descriptor 0, 1, or 2, respec-)-2.529 F(ti)108 492 Q -.15(ve)-.25 G -(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .721 -(Unless otherwise speci\214ed, primaries that operate on \214les follo) -108 508.8 R 3.221(ws)-.25 G .722(ymbolic links and operate on the tar) --3.221 F(get)-.18 E(of the link, rather than the link itself.)108 520.8 -Q 1.096(When used with)108 538.8 R F2([[)3.596 E F0 3.596(,t)C(he)-3.596 -E F2(<)3.596 E F0(and)3.595 E F2(>)3.595 E F0 1.095(operators sort le) -3.595 F 1.095(xicographically using the current locale.)-.15 F(The)6.095 -E F2(test)3.595 E F0(com-)3.595 E(mand sorts using ASCII ordering.)108 -550.8 Q F2108 574.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 574.8 S -(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F2108 -586.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 586.8 S(ue if).35 E F1(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is a block special \214le.).15 E F2108 -598.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 598.8 S(ue if).35 E F1(\214le)2.5 -E F0 -.15(ex)2.5 G(ists and is a character special \214le.).15 E F2 -108 610.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 610.8 S(ue if).35 E F1 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F2 -108 622.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 622.8 S(ue if).35 E F1 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F2108 634.8 Q F1 -(\214le)2.5 E F0 -.35(Tr)144 634.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is a re).15 E(gular \214le.)-.15 E F2108 646.8 -Q F1(\214le)2.5 E F0 -.35(Tr)144 646.8 S(ue if).35 E F1(\214le)2.5 E F0 --.15(ex)2.5 G(ists and is set-group-id.).15 E F2108 658.8 Q F1 -(\214le)2.5 E F0 -.35(Tr)144 658.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and is a symbolic link.).15 E F2108 670.8 Q F1 -(\214le)2.5 E F0 -.35(Tr)144 670.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15 -(ex)2.5 G(ists and its `).15 E(`stick)-.74 E(y')-.15 E 2.5('b)-.74 G -(it is set.)-2.5 E F2108 682.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 -682.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and is a named pipe \(FIFO\).).15 E F2108 694.8 Q F1(\214le) -2.5 E F0 -.35(Tr)144 694.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 -G(ists and is readable.).15 E F2108 706.8 Q F1(\214le)2.5 E F0 --.35(Tr)144 706.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G -(ists and has a size greater than zero.).15 E F2108 718.8 Q F1(fd) -2.5 E F0 -.35(Tr)144 718.8 S(ue if \214le descriptor).35 E F1(fd)4.47 E -F0(is open and refers to a terminal.)3.27 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(33)190.395 E 0 Cg EP +(alues are the same as in the C language.)-.25 F .829(The fol-)5.829 F +(lo)108 489.6 Q .44(wing list of operators is grouped into le)-.25 F +-.15(ve)-.25 G .439(ls of equal-precedence operators.).15 F .439(The le) +5.439 F -.15(ve)-.25 G .439(ls are listed in order).15 F +(of decreasing precedence.)108 501.6 Q F1(id)108 518.4 Q F2(++)A F1(id) +2.5 E F2A F0 -.25(va)144 530.4 S +(riable post-increment and post-decrement).25 E F2 2.5108 542.4 S +F0(unary minus and plus)144 542.4 Q F2(++)108 554.4 Q F1(id)A F2 +2.5 E F1(id)A F0 -.25(va)144 566.4 S +(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 578.4 S F0 +(logical and bitwise ne)144 578.4 Q -.05(ga)-.15 G(tion).05 E F2(**)108 +590.4 Q F0 -.15(ex)144 590.4 S(ponentiation).15 E F2 2.5(*/%)108 602.4 S +F0(multiplication, di)144 602.4 Q(vision, remainder)-.25 E F2 2.5<2bad> +108 614.4 S F0(addition, subtraction)144 614.4 Q F2(<< >>)108 626.4 Q F0 +(left and right bitwise shifts)144 626.4 Q F2(<= >= < >)108 638.4 Q F0 +(comparison)144 650.4 Q F2(== !=)108 662.4 Q F0(equality and inequality) +144 662.4 Q F2(&)108 674.4 Q F0(bitwise AND)144 674.4 Q F2(^)108 686.4 Q +F0(bitwise e)144 686.4 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|) +108 698.4 Q F0(bitwise OR)144 698.4 Q F2(&&)108 710.4 Q F0(logical AND) +144 710.4 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(33)185.955 +E 0 Cg EP %%Page: 34 34 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF108 84 Q/F2 10/Times-Italic@0 SF(\214le)2.5 E F0 -.35(Tr)144 84 -S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and its set-user).15 -E(-id bit is set.)-.2 E F1108 96 Q F2(\214le)2.5 E F0 -.35(Tr)144 -96 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is writable.) -.15 E F1108 108 Q F2(\214le)2.5 E F0 -.35(Tr)144 108 S(ue if).35 E -F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is e).15 E -.15(xe)-.15 G -(cutable.).15 E F1108 120 Q F2(\214le)2.5 E F0 -.35(Tr)144 120 S -(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 E -(wned by the ef)-.25 E(fecti)-.25 E .3 -.15(ve g)-.25 H(roup id.).15 E -F1108 132 Q F2(\214le)2.5 E F0 -.35(Tr)144 132 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a symbolic link.).15 E F1 -108 144 Q F2(\214le)2.5 E F0 -.35(Tr)144 144 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and has been modi\214ed since it w) -.15 E(as last read.)-.1 E F1108 156 Q F2(\214le)2.5 E F0 -.35(Tr) -144 156 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 -E(wned by the ef)-.25 E(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E -F1108 168 Q F2(\214le)2.5 E F0 -.35(Tr)144 168 S(ue if).35 E F2 -(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2 -(\214le1)108 180 Q F1(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 192 S -(ue if).35 E F2(\214le1)2.5 E F0(and)2.5 E F2(\214le2)2.5 E F0 -(refer to the same de)2.5 E(vice and inode numbers.)-.25 E F2(\214le1) -108 204 Q F02.5 E F1(nt)A F2(\214le2)2.5 E F0 -.35(Tr)144 216 S -(ue if).35 E F2(\214le1)2.5 E F0(is ne)2.5 E -(wer \(according to modi\214cation date\) than)-.25 E F2(\214le2)2.5 E -F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le1)2.5 E F0 -.15(ex)2.5 G -(ists and).15 E F2(\214le2)2.5 E F0(does not.)2.5 E F2(\214le1)108 228 Q -F02.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144 240 S(ue if).35 E F2 -(\214le1)2.5 E F0(is older than)2.5 E F2(\214le2)2.5 E F0 2.5(,o)C 2.5 -(ri)-2.5 G(f)-2.5 E F2(\214le2)2.5 E F0 -.15(ex)2.5 G(ists and).15 E F2 -(\214le1)2.5 E F0(does not.)2.5 E F1108 252 Q F2(optname)2.5 E F0 --.35(Tr)144 264 S .262(ue if the shell option).35 F F2(optname)2.992 E -F0 .262(is enabled.)2.942 F .262 -(See the list of options under the description of the)5.262 F F1 -2.763 E F0(option to the)144 276 Q F1(set)2.5 E F0 -.2(bu)2.5 G -(iltin belo).2 E -.65(w.)-.25 G F1108 288 Q F2(varname)2.5 E F0 --.35(Tr)144 300 S(ue if the shell v).35 E(ariable)-.25 E F2(varname)2.79 -E F0(is set \(has been assigned a v)2.68 E(alue\).)-.25 E F1108 -312 Q F2(varname)2.5 E F0 -.35(Tr)144 324 S(ue if the shell v).35 E -(ariable)-.25 E F2(varname)2.79 E F0(is set and is a name reference.) -2.68 E F1108 336 Q F2(string)2.5 E F0 -.35(Tr)144 348 S -(ue if the length of).35 E F2(string)2.5 E F0(is zero.)2.5 E F2(string) -108 360 Q F1108 372 Q F2(string)2.5 E F0 -.35(Tr)144 384 S -(ue if the length of).35 E F2(string)2.84 E F0(is non-zero.)2.72 E F2 -(string1)108 400.8 Q F1(==)2.5 E F2(string2)2.5 E(string1)108 412.8 Q F1 -(=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 424.8 S .862 -(ue if the strings are equal.).35 F F1(=)5.861 E F0 .861 -(should be used with the)3.361 F F1(test)3.361 E F0 .861 -(command for POSIX conformance.)3.361 F .446(When used with the)144 -436.8 R F1([[)2.946 E F0 .446 -(command, this performs pattern matching as described abo)2.946 F .747 --.15(ve \()-.15 H F1(Compound).15 E(Commands)144 448.8 Q F0(\).)A F2 -(string1)108 465.6 Q F1(!=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 477.6 S -(ue if the strings are not equal.).35 E F2(string1)108 494.4 Q F1(<)2.5 -E F2(string2)2.5 E F0 -.35(Tr)144 506.4 S(ue if).35 E F2(string1)2.5 E -F0(sorts before)2.5 E F2(string2)2.5 E F0(le)2.5 E(xicographically)-.15 -E(.)-.65 E F2(string1)108 523.2 Q F1(>)2.5 E F2(string2)2.5 E F0 -.35 -(Tr)144 535.2 S(ue if).35 E F2(string1)2.5 E F0(sorts after)2.5 E F2 -(string2)2.5 E F0(le)2.5 E(xicographically)-.15 E(.)-.65 E F2(ar)108.33 -552 Q(g1)-.37 E F1(OP)2.5 E F2(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF -(OP)144 564 Q F0 .385(is one of)2.635 F F1(\255eq)2.885 E F0(,)A F1 -(\255ne)2.885 E F0(,)A F1(\255lt)2.885 E F0(,)A F1(\255le)2.885 E F0(,)A -F1(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F1(\255ge)2.885 E F0 5.385 -(.T)C .385(hese arithmetic binary operators return true if)-5.385 F F2 -(ar)2.884 E(g1)-.37 E F0 .845(is equal to, not equal to, less than, les\ -s than or equal to, greater than, or greater than or equal to)144 576 R -F2(ar)144 588 Q(g2)-.37 E F0 3.59(,r)C(especti)-3.59 E -.15(ve)-.25 G -(ly).15 E(.)-.65 E F2(Ar)7.1 E(g1)-.37 E F0(and)3.59 E F2(ar)3.92 E(g2) --.37 E F0 1.089(may be positi)3.61 F 1.389 -.15(ve o)-.25 H 3.589(rn).15 -G -2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte).15 E -3.589(gers. When)-.15 F 1.089(used with the)3.589 F F1([[)3.589 E F0 -(command,)144 600 Q F2(Ar)4.447 E(g1)-.37 E F0(and)3.437 E F2(Ar)4.447 E -(g2)-.37 E F0 .937(are e)3.457 F -.25(va)-.25 G .937 -(luated as arithmetic e).25 F .937(xpressions \(see)-.15 F F3 .937 -(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 612 Q F0(abo)2.25 -E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF(SIMPLE COMMAND EXP) -72 628.8 Q(ANSION)-.81 E F0 .614(When a simple command is e)108 640.8 R --.15(xe)-.15 G .614(cuted, the shell performs the follo).15 F .613 -(wing e)-.25 F .613(xpansions, assignments, and redi-)-.15 F -(rections, from left to right, in the follo)108 652.8 Q(wing order)-.25 -E(.)-.55 E(1.)108 669.6 Q 1.848(The w)144 669.6 R 1.848 -(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.849 -(ariable assignments \(those preceding the command)-.25 F -(name\) and redirections are sa)144 681.6 Q -.15(ve)-.2 G 2.5(df).15 G -(or later processing.)-2.5 E(2.)108 698.4 Q .18(The w)144 698.4 R .18 -(ords that are not v)-.1 F .179 -(ariable assignments or redirections are e)-.25 F 2.679(xpanded. If)-.15 -F(an)2.679 E 2.679(yw)-.15 G .179(ords remain af-)-2.779 F .346(ter e) -144 710.4 R .346(xpansion, the \214rst w)-.15 F .346(ord is tak)-.1 F -.347(en to be the name of the command and the remaining w)-.1 F .347 -(ords are)-.1 F(the ar)144 722.4 Q(guments.)-.18 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(34)190.395 E 0 Cg EP +SF(||)108 84 Q F0(logical OR)144 84 Q/F2 10/Times-Italic@0 SF -.2(ex)108 +96 S(pr).2 E F1(?)A F2 -.2(ex)C(pr).2 E F1(:)A F2 -.2(ex)C(pr).2 E F0 +(conditional operator)144 108 Q F1 2.5(=*)108 120 S 2.5(=/)-2.5 G 2.5 +(=%)-2.5 G 2.5(=+)-2.5 G 2.5<3dad>-2.5 G 2.5(=<)-2.5 G(<= >>= &= ^= |=) +-2.5 E F0(assignment)144 132 Q F2 -.2(ex)108 144 S(pr1).2 E F1(,)2.5 E +F2 -.2(ex)2.5 G(pr2).2 E F0(comma)144 156 Q .68(Shell v)108 172.8 R .68 +(ariables are allo)-.25 F .68(wed as operands; parameter e)-.25 F .68 +(xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F +-.25(va)-.25 G(lu-).25 E 3.508(ated. W)108 184.8 R 1.008(ithin an e)-.4 +F 1.008(xpression, shell v)-.15 F 1.007 +(ariables may also be referenced by name without using the parameter) +-.25 F -.15(ex)108 196.8 S .165(pansion syntax.).15 F 2.665(As)5.165 G +.165(hell v)-2.665 F .165(ariable that is null or unset e)-.25 F -.25 +(va)-.25 G .165(luates to 0 when referenced by name without us-).25 F +.421(ing the parameter e)108 208.8 R .421(xpansion syntax.)-.15 F .421 +(The v)5.421 F .421(alue of a v)-.25 F .421(ariable is e)-.25 F -.25(va) +-.25 G .42(luated as an arithmetic e).25 F .42(xpression when)-.15 F +.153(it is referenced, or when a v)108 220.8 R .154 +(ariable which has been gi)-.25 F -.15(ve)-.25 G 2.654(nt).15 G(he) +-2.654 E F2(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .154 +(ute using)-.2 F F1(declar)2.654 E 2.654<65ad>-.18 G(i)-2.654 E F0 .154 +(is assigned a)2.654 F -.25(va)108 232.8 S 2.857(lue. A).25 F .357 +(null v)2.857 F .357(alue e)-.25 F -.25(va)-.25 G .357(luates to 0.).25 +F 2.857(As)5.357 G .357(hell v)-2.857 F .357(ariable need not ha)-.25 F +.657 -.15(ve i)-.2 H(ts).15 E F2(inte)2.857 E -.1(ge)-.4 G(r).1 E F0 +(attrib)2.857 E .357(ute turned on to be used)-.2 F(in an e)108 244.8 Q +(xpression.)-.15 E(Inte)108 261.6 Q .517(ger constants follo)-.15 F +3.017(wt)-.25 G .518(he C language de\214nition, without suf)-3.017 F +<8c78>-.25 E .518(es or character constants.)-.15 F .518(Constants with) +5.518 F 3.283(al)108 273.6 S .783 +(eading 0 are interpreted as octal numbers.)-3.283 F 3.282(Al)5.783 G +.782(eading 0x or 0X denotes he)-3.282 F 3.282(xadecimal. Otherwise,) +-.15 F(num-)3.282 E .815(bers tak)108 285.6 R 3.315(et)-.1 G .815 +(he form [)-3.315 F F2(base#)A F0 .815(]n, where the optional)B F2(base) +3.315 E F0 .816(is a decimal number between 2 and 64 representing)3.315 +F .35(the arithmetic base, and)108 297.6 R F2(n)2.85 E F0 .35 +(is a number in that base.)2.85 F(If)5.35 E F2(base#)2.849 E F0 .349 +(is omitted, then base 10 is used.)2.849 F .349(When speci-)5.349 F +(fying)108 309.6 Q F2(n)2.974 E F0 2.974(,i)C 2.974(fan)-2.974 G .474(o\ +n-digit is required, the digits greater than 9 are represented by the l\ +o)-2.974 F .475(wercase letters, the up-)-.25 F .518 +(percase letters, @, and _, in that order)108 321.6 R 5.518(.I)-.55 G(f) +-5.518 E F2(base)3.018 E F0 .518(is less than or equal to 36, lo)3.018 F +.518(wercase and uppercase letters)-.25 F +(may be used interchangeably to represent numbers between 10 and 35.)108 +333.6 Q .234(Operators are e)108 350.4 R -.25(va)-.25 G .234 +(luated in order of precedence.).25 F(Sub-e)5.234 E .234 +(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .235 +(luated \214rst and may).25 F -.15(ove)108 362.4 S +(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E/F3 10.95 +/Times-Bold@0 SF(CONDITION)72 379.2 Q(AL EXPRESSIONS)-.219 E F0 .256 +(Conditional e)108 391.2 R .256(xpressions are used by the)-.15 F F1([[) +2.755 E F0 .255(compound command and the)2.755 F F1(test)2.755 E F0(and) +2.755 E F1([)2.755 E F0 -.2(bu)2.755 G .255(iltin commands to test).2 F +.133(\214le attrib)108 403.2 R .133 +(utes and perform string and arithmetic comparisons.)-.2 F(The)5.133 E +F1(test)2.633 E F0(and)2.633 E F1([)2.634 E F0 .134 +(commands determine their be-)2.634 F(ha)108 415.2 Q .198 +(vior based on the number of ar)-.2 F .197 +(guments; see the descriptions of those commands for an)-.18 F 2.697(yo) +-.15 G .197(ther command-)-2.697 F(speci\214c actions.)108 427.2 Q .234 +(Expressions are formed from the follo)108 444 R .234 +(wing unary or binary primaries.)-.25 F F1(Bash)5.234 E F0 .235 +(handles se)2.735 F -.15(ve)-.25 G .235(ral \214lenames spe-).15 F .425 +(cially when the)108 456 R 2.925(ya)-.15 G .425(re used in e)-2.925 F +2.925(xpressions. If)-.15 F .425(the operating system on which)2.925 F +F1(bash)2.924 E F0 .424(is running pro)2.924 F .424(vides these)-.15 F +.344(special \214les, bash will use them; otherwise it will emulate the\ +m internally with this beha)108 468 R .345(vior: If an)-.2 F(y)-.15 E F2 +(\214le)2.845 E F0(ar)2.845 E(-)-.2 E .806 +(gument to one of the primaries is of the form)108 480 R F2(/de)3.306 E +(v/fd/n)-.15 E F0 3.305(,t)C .805(hen \214le descriptor)-3.305 F F2(n) +3.305 E F0 .805(is check)3.305 F 3.305(ed. If)-.1 F(the)3.305 E F2 +(\214le)3.305 E F0(ar)3.305 E(gu-)-.18 E .029 +(ment to one of the primaries is one of)108 492 R F2(/de)2.529 E +(v/stdin)-.15 E F0(,)A F2(/de)2.529 E(v/stdout)-.15 E F0 2.53(,o)C(r) +-2.53 E F2(/de)2.53 E(v/stderr)-.15 E F0 2.53<2c8c>C .03 +(le descriptor 0, 1, or 2, respec-)-2.53 F(ti)108 504 Q -.15(ve)-.25 G +(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .722 +(Unless otherwise speci\214ed, primaries that operate on \214les follo) +108 520.8 R 3.221(ws)-.25 G .721(ymbolic links and operate on the tar) +-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 532.8 +Q 1.095(When used with)108 550.8 R F1([[)3.595 E F0 3.595(,t)C(he)-3.595 +E F1(<)3.595 E F0(and)3.595 E F1(>)3.595 E F0 1.095(operators sort le) +3.595 F 1.095(xicographically using the current locale.)-.15 F(The)6.096 +E F1(test)3.596 E F0(com-)3.596 E(mand sorts using ASCII ordering.)108 +562.8 Q F1108 586.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 586.8 S +(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1108 +598.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 598.8 S(ue if).35 E F2(\214le)2.5 +E F0 -.15(ex)2.5 G(ists and is a block special \214le.).15 E F1108 +610.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 610.8 S(ue if).35 E F2(\214le)2.5 +E F0 -.15(ex)2.5 G(ists and is a character special \214le.).15 E F1 +108 622.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 622.8 S(ue if).35 E F2 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F1 +108 634.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 634.8 S(ue if).35 E F2 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1108 646.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 646.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is a re).15 E(gular \214le.)-.15 E F1108 658.8 +Q F2(\214le)2.5 E F0 -.35(Tr)144 658.8 S(ue if).35 E F2(\214le)2.5 E F0 +-.15(ex)2.5 G(ists and is set-group-id.).15 E F1108 670.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 670.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is a symbolic link.).15 E F1108 682.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 682.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and its `).15 E(`stick)-.74 E(y')-.15 E 2.5('b)-.74 G +(it is set.)-2.5 E F1108 694.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 +694.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a named pipe \(FIFO\).).15 E F1108 706.8 Q F2(\214le) +2.5 E F0 -.35(Tr)144 706.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 +G(ists and is readable.).15 E F1108 718.8 Q F2(\214le)2.5 E F0 +-.35(Tr)144 718.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and has a size greater than zero.).15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(34)185.955 E 0 Cg EP %%Page: 35 35 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(3.)108 84 Q -(Redirections are performed as described abo)144 84 Q .3 -.15(ve u)-.15 -H(nder).15 E/F1 9/Times-Bold@0 SF(REDIRECTION)2.5 E/F2 9/Times-Roman@0 -SF(.)A F0(4.)108 100.8 Q .717(The te)144 100.8 R .717(xt after the)-.15 -F/F3 10/Times-Bold@0 SF(=)3.217 E F0 .717(in each v)3.217 F .717 -(ariable assignment under)-.25 F .717(goes tilde e)-.18 F .717 -(xpansion, parameter e)-.15 F(xpansion,)-.15 E .339 -(command substitution, arithmetic e)144 112.8 R .339 -(xpansion, and quote remo)-.15 F -.25(va)-.15 G 2.839(lb).25 G .339 -(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 124.8 Q -.332(If no command name results, the v)108 141.6 R .332 -(ariable assignments af)-.25 F .332(fect the current shell en)-.25 F -2.832(vironment. Otherwise,)-.4 F(the)2.832 E -.25(va)108 153.6 S .757 -(riables are added to the en).25 F .757(vironment of the e)-.4 F -.15 -(xe)-.15 G .757(cuted command and do not af).15 F .757 -(fect the current shell en)-.25 F(vi-)-.4 E 3.177(ronment. If)108 165.6 -R(an)3.177 E 3.177(yo)-.15 G 3.177(ft)-3.177 G .677 -(he assignments attempts to assign a v)-3.177 F .677 -(alue to a readonly v)-.25 F .676(ariable, an error occurs, and)-.25 F -(the command e)108 177.6 Q(xits with a non-zero status.)-.15 E .149 -(If no command name results, redirections are performed, b)108 194.4 R -.149(ut do not af)-.2 F .15(fect the current shell en)-.25 F 2.65 -(vironment. A)-.4 F(redirection error causes the command to e)108 206.4 -Q(xit with a non-zero status.)-.15 E 1.064 -(If there is a command name left after e)108 223.2 R 1.064(xpansion, e) --.15 F -.15(xe)-.15 G 1.064(cution proceeds as described belo).15 F -4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .068(command e)108 -235.2 R 2.568(xits. If)-.15 F .069(one of the e)2.568 F .069 -(xpansions contained a command substitution, the e)-.15 F .069 -(xit status of the command)-.15 F .467(is the e)108 247.2 R .466 -(xit status of the last command substitution performed.)-.15 F .466 -(If there were no command substitutions, the)5.466 F(command e)108 259.2 -Q(xits with a status of zero.)-.15 E/F4 10.95/Times-Bold@0 SF -(COMMAND EXECUTION)72 276 Q F0 .546 -(After a command has been split into w)108 288 R .547 -(ords, if it results in a simple command and an optional list of ar)-.1 -F(gu-)-.18 E(ments, the follo)108 300 Q(wing actions are tak)-.25 E(en.) --.1 E .379(If the command name contains no slashes, the shell attempts \ -to locate it.)108 316.8 R .379(If there e)5.379 F .379 -(xists a shell function by)-.15 F .246(that name, that function is in) -108 328.8 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G -.246(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F1(FUNCTIONS) -2.746 E F2(.)A F0 .246(If the name does not match a func-)4.746 F -(tion, the shell searches for it in the list of shell b)108 340.8 Q 2.5 -(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E -(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .31 -(If the name is neither a shell function nor a b)108 357.6 R .309 -(uiltin, and contains no slashes,)-.2 F F3(bash)2.809 E F0 .309 -(searches each element of)2.809 F(the)108 369.6 Q F1 -.666(PA)3.162 G -(TH)-.189 E F0 .662(for a directory containing an e)2.912 F -.15(xe)-.15 -G .662(cutable \214le by that name.).15 F F3(Bash)5.662 E F0 .663 -(uses a hash table to remember)3.162 F 1.915(the full pathnames of e)108 -381.6 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F3(hash)4.415 E -F0(under)4.415 E F1 1.915(SHELL B)4.415 F(UIL)-.09 E 1.914(TIN COMMANDS) --.828 F F0(belo)4.164 E 4.414(w\). A)-.25 F(full)4.414 E .719 -(search of the directories in)108 393.6 R F1 -.666(PA)3.219 G(TH)-.189 E -F0 .72(is performed only if the command is not found in the hash table.) -2.969 F .72(If the)5.72 F .956(search is unsuccessful, the shell search\ -es for a de\214ned shell function named)108 405.6 R F3(command_not_f) -3.455 E(ound_han-)-.25 E(dle)108 417.6 Q F0 6.005(.I)C 3.505(ft)-6.005 G -1.005(hat function e)-3.505 F 1.005(xists, it is in)-.15 F -.2(vo)-.4 G --.1(ke).2 G 3.506(di).1 G 3.506(nas)-3.506 G 1.006(eparate e)-3.506 F --.15(xe)-.15 G 1.006(cution en).15 F 1.006 -(vironment with the original command)-.4 F .256 -(and the original command')108 429.6 R 2.756(sa)-.55 G -.18(rg)-2.756 G -.256(uments as its ar).18 F .256(guments, and the function')-.18 F 2.755 -(se)-.55 G .255(xit status becomes the e)-2.905 F .255(xit sta-)-.15 F -.263(tus of that subshell.)108 441.6 R .263(If that function is not de\ -\214ned, the shell prints an error message and returns an e)5.263 F .263 -(xit sta-)-.15 F(tus of 127.)108 453.6 Q 1.089(If the search is success\ -ful, or if the command name contains one or more slashes, the shell e) -108 470.4 R -.15(xe)-.15 G 1.089(cutes the).15 F .197 -(named program in a separate e)108 482.4 R -.15(xe)-.15 G .197 -(cution en).15 F 2.698(vironment. Ar)-.4 F .198 -(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .198 -(n, and the remain-).15 F(ing ar)108 494.4 Q -(guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15 -(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.049(If this e)108 511.2 R --.15(xe)-.15 G 1.049(cution f).15 F 1.049 -(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.048 -(cutable format, and the \214le is not a directory).15 F 3.548(,i)-.65 G -3.548(ti)-3.548 G 3.548(sa)-3.548 G(s-)-3.548 E .042(sumed to be a)108 -523.2 R/F5 10/Times-Italic@0 SF .042(shell script)2.542 F F0 2.542 -(,a\214)C .043(le containing shell commands.)-2.542 F 2.543(As)5.043 G -.043(ubshell is spa)-2.543 F .043(wned to e)-.15 F -.15(xe)-.15 G .043 -(cute it.).15 F .043(This sub-)5.043 F .275 -(shell reinitializes itself, so that the ef)108 535.2 R .274 -(fect is as if a ne)-.25 F 2.774(ws)-.25 G .274(hell had been in)-2.774 -F -.2(vo)-.4 G -.1(ke).2 G 2.774(dt).1 G 2.774(oh)-2.774 G .274 -(andle the script, with the)-2.774 F -.15(ex)108 547.2 S 2.357 -(ception that the locations of commands remembered by the parent \(see) -.15 F F3(hash)4.858 E F0(belo)4.858 E 4.858(wu)-.25 G(nder)-4.858 E F1 -(SHELL)4.858 E -.09(BU)108 559.2 S(IL).09 E(TIN COMMANDS)-.828 E F2(\))A -F0(are retained by the child.)2.25 E .348(If the program is a \214le be) -108 576 R .348(ginning with)-.15 F F3(#!)2.848 E F0 2.848(,t)C .347(he \ -remainder of the \214rst line speci\214es an interpreter for the pro-) --2.848 F 3.178(gram. The)108 588 R .678(shell e)3.178 F -.15(xe)-.15 G -.678(cutes the speci\214ed interpreter on operating systems that do not\ - handle this e).15 F -.15(xe)-.15 G(cutable).15 E .206(format themselv) -108 600 R 2.706(es. The)-.15 F(ar)2.706 E .206 -(guments to the interpreter consist of a single optional ar)-.18 F .206 -(gument follo)-.18 F .206(wing the in-)-.25 F .267 -(terpreter name on the \214rst line of the program, follo)108 612 R .268 -(wed by the name of the program, follo)-.25 F .268(wed by the com-)-.25 -F(mand ar)108 624 Q(guments, if an)-.18 E -.65(y.)-.15 G F4 -(COMMAND EXECUTION ENVIR)72 640.8 Q(ONMENT)-.329 E F0(The shell has an) -108 652.8 Q F5 -.2(ex)2.5 G(ecution en).2 E(vir)-.4 E(onment)-.45 E F0 -2.5(,w)C(hich consists of the follo)-2.5 E(wing:)-.25 E<83>108 669.6 Q -1.406(open \214les inherited by the shell at in)144 669.6 R -.2(vo)-.4 G -1.405(cation, as modi\214ed by redirections supplied to the).2 F F3 -(exec)3.905 E F0 -.2(bu)144 681.6 S(iltin).2 E<83>108 698.4 Q -(the current w)144 698.4 Q(orking directory as set by)-.1 E F3(cd)2.5 E -F0(,)A F3(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F3(popd)2.5 E F0 2.5(,o)C 2.5 -(ri)-2.5 G(nherited by the shell at in)-2.5 E -.2(vo)-.4 G(cation).2 E -<83>108 715.2 Q(the \214le creation mode mask as set by)144 715.2 Q F3 -(umask)2.5 E F0(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent) --2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(35)190.395 E 0 Cg -EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF108 84 Q/F2 10/Times-Italic@0 SF(fd)2.5 E F0 -.35(Tr)144 84 S +(ue if \214le descriptor).35 E F2(fd)4.47 E F0 +(is open and refers to a terminal.)3.27 E F1108 96 Q F2(\214le)2.5 +E F0 -.35(Tr)144 96 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and its set-user).15 E(-id bit is set.)-.2 E F1108 108 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 108 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is writable.).15 E F1108 120 Q F2(\214le)2.5 E +F0 -.35(Tr)144 120 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is e).15 E -.15(xe)-.15 G(cutable.).15 E F1108 132 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 132 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E(fecti)-.25 E .3 -.15 +(ve g)-.25 H(roup id.).15 E F1108 144 Q F2(\214le)2.5 E F0 -.35 +(Tr)144 144 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a symbolic link.).15 E F1108 156 Q F2(\214le)2.5 E F0 +-.35(Tr)144 156 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and has been modi\214ed since it w).15 E(as last read.)-.1 E F1 +108 168 Q F2(\214le)2.5 E F0 -.35(Tr)144 168 S(ue if).35 E F2 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E +(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F1108 180 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 180 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2(\214le1)108 192 Q F1 +(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 204 S(ue if).35 E F2 +(\214le1)2.5 E F0(and)2.5 E F2(\214le2)2.5 E F0(refer to the same de)2.5 +E(vice and inode numbers.)-.25 E F2(\214le1)108 216 Q F02.5 E F1(nt) +A F2(\214le2)2.5 E F0 -.35(Tr)144 228 S(ue if).35 E F2(\214le1)2.5 E F0 +(is ne)2.5 E(wer \(according to modi\214cation date\) than)-.25 E F2 +(\214le2)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le1)2.5 E F0 +-.15(ex)2.5 G(ists and).15 E F2(\214le2)2.5 E F0(does not.)2.5 E F2 +(\214le1)108 240 Q F02.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144 +252 S(ue if).35 E F2(\214le1)2.5 E F0(is older than)2.5 E F2(\214le2)2.5 +E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le2)2.5 E F0 -.15(ex)2.5 G +(ists and).15 E F2(\214le1)2.5 E F0(does not.)2.5 E F1108 264 Q F2 +(optname)2.5 E F0 -.35(Tr)144 276 S .263(ue if the shell option).35 F F2 +(optname)2.992 E F0 .262(is enabled.)2.942 F .262 +(See the list of options under the description of the)5.262 F F1 +2.762 E F0(option to the)144 288 Q F1(set)2.5 E F0 -.2(bu)2.5 G +(iltin belo).2 E -.65(w.)-.25 G F1108 300 Q F2(varname)2.5 E F0 +-.35(Tr)144 312 S(ue if the shell v).35 E(ariable)-.25 E F2(varname)2.79 +E F0(is set \(has been assigned a v)2.68 E(alue\).)-.25 E F1108 +324 Q F2(varname)2.5 E F0 -.35(Tr)144 336 S(ue if the shell v).35 E +(ariable)-.25 E F2(varname)2.79 E F0(is set and is a name reference.) +2.68 E F1108 348 Q F2(string)2.5 E F0 -.35(Tr)144 360 S +(ue if the length of).35 E F2(string)2.5 E F0(is zero.)2.5 E F2(string) +108 372 Q F1108 384 Q F2(string)2.5 E F0 -.35(Tr)144 396 S +(ue if the length of).35 E F2(string)2.84 E F0(is non-zero.)2.72 E F2 +(string1)108 412.8 Q F1(==)2.5 E F2(string2)2.5 E(string1)108 424.8 Q F1 +(=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 436.8 S .861 +(ue if the strings are equal.).35 F F1(=)5.861 E F0 .861 +(should be used with the)3.361 F F1(test)3.361 E F0 .862 +(command for POSIX conformance.)3.362 F .447(When used with the)144 +448.8 R F1([[)2.946 E F0 .446 +(command, this performs pattern matching as described abo)2.946 F .746 +-.15(ve \()-.15 H F1(Compound).15 E(Commands)144 460.8 Q F0(\).)A F2 +(string1)108 477.6 Q F1(!=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 489.6 S +(ue if the strings are not equal.).35 E F2(string1)108 506.4 Q F1(<)2.5 +E F2(string2)2.5 E F0 -.35(Tr)144 518.4 S(ue if).35 E F2(string1)2.5 E +F0(sorts before)2.5 E F2(string2)2.5 E F0(le)2.5 E(xicographically)-.15 +E(.)-.65 E F2(string1)108 535.2 Q F1(>)2.5 E F2(string2)2.5 E F0 -.35 +(Tr)144 547.2 S(ue if).35 E F2(string1)2.5 E F0(sorts after)2.5 E F2 +(string2)2.5 E F0(le)2.5 E(xicographically)-.15 E(.)-.65 E F2(ar)108.33 +564 Q(g1)-.37 E F1(OP)2.5 E F2(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF +(OP)144 576 Q F0 .385(is one of)2.634 F F1(\255eq)2.885 E F0(,)A F1 +(\255ne)2.885 E F0(,)A F1(\255lt)2.885 E F0(,)A F1(\255le)2.885 E F0(,)A +F1(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F1(\255ge)2.885 E F0 5.385 +(.T)C .385(hese arithmetic binary operators return true if)-5.385 F F2 +(ar)2.885 E(g1)-.37 E F0 .845(is equal to, not equal to, less than, les\ +s than or equal to, greater than, or greater than or equal to)144 588 R +F2(ar)144 600 Q(g2)-.37 E F0 3.589(,r)C(especti)-3.589 E -.15(ve)-.25 G +(ly).15 E(.)-.65 E F2(Ar)7.099 E(g1)-.37 E F0(and)3.589 E F2(ar)3.919 E +(g2)-.37 E F0 1.089(may be positi)3.609 F 1.389 -.15(ve o)-.25 H 3.589 +(rn).15 G -2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte) +.15 E 3.59(gers. When)-.15 F 1.09(used with the)3.59 F F1([[)3.59 E F0 +(command,)144 612 Q F2(Ar)4.447 E(g1)-.37 E F0(and)3.437 E F2(Ar)4.447 E +(g2)-.37 E F0 .937(are e)3.457 F -.25(va)-.25 G .937 +(luated as arithmetic e).25 F .937(xpressions \(see)-.15 F F3 .937 +(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 624 Q F0(abo)2.25 +E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF(SIMPLE COMMAND EXP) +72 640.8 Q(ANSION)-.81 E F0 .613(When a simple command is e)108 652.8 R +-.15(xe)-.15 G .614(cuted, the shell performs the follo).15 F .614 +(wing e)-.25 F .614(xpansions, assignments, and redi-)-.15 F +(rections, from left to right, in the follo)108 664.8 Q(wing order)-.25 +E(.)-.55 E(1.)108 681.6 Q 1.849(The w)144 681.6 R 1.849 +(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.848 +(ariable assignments \(those preceding the command)-.25 F +(name\) and redirections are sa)144 693.6 Q -.15(ve)-.2 G 2.5(df).15 G +(or later processing.)-2.5 E(2.)108 710.4 Q .179(The w)144 710.4 R .179 +(ords that are not v)-.1 F .179 +(ariable assignments or redirections are e)-.25 F 2.68(xpanded. If)-.15 +F(an)2.68 E 2.68(yw)-.15 G .18(ords remain af-)-2.78 F .347(ter e)144 +722.4 R .347(xpansion, the \214rst w)-.15 F .347(ord is tak)-.1 F .347 +(en to be the name of the command and the remaining w)-.1 F .346 +(ords are)-.1 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(35) +185.955 E 0 Cg EP %%Page: 36 36 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>108 84 Q -(current traps set by)144 84 Q/F1 10/Times-Bold@0 SF(trap)2.5 E F0<83> -108 100.8 Q .256(shell parameters that are set by v)144 100.8 R .256 -(ariable assignment or with)-.25 F F1(set)2.756 E F0 .257 -(or inherited from the shell')2.756 F 2.757(sp)-.55 G(arent)-2.757 E -(in the en)144 112.8 Q(vironment)-.4 E<83>108 129.6 Q -(shell functions de\214ned during e)144 129.6 Q -.15(xe)-.15 G -(cution or inherited from the shell').15 E 2.5(sp)-.55 G -(arent in the en)-2.5 E(vironment)-.4 E<83>108 146.4 Q -(options enabled at in)144 146.4 Q -.2(vo)-.4 G(cation \(either by def) -.2 E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F1(set) -2.5 E F0<83>108 163.2 Q(options enabled by)144 163.2 Q F1(shopt)2.5 E F0 -<83>108 180 Q(shell aliases de\214ned with)144 180 Q F1(alias)2.5 E F0 -<83>108 196.8 Q -.25(va)144 196.8 S -(rious process IDs, including those of background jobs, the v).25 E -(alue of)-.25 E F1($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E -/F2 9/Times-Bold@0 SF(PPID)2.5 E F0 .427 -(When a simple command other than a b)108 213.6 R .426 -(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .426 -(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.926(di).1 G 2.926(nas) --2.926 G(eparate)-2.926 E -.15(exe)108 225.6 S .133(cution en).15 F .133 -(vironment that consists of the follo)-.4 F 2.634(wing. Unless)-.25 F -.134(otherwise noted, the v)2.634 F .134(alues are inherited from)-.25 F -(the shell.)108 237.6 Q<83>108 254.4 Q 1.056(the shell')144 254.4 R -3.556(so)-.55 G 1.056(pen \214les, plus an)-3.556 F 3.556(ym)-.15 G -1.056 -(odi\214cations and additions speci\214ed by redirections to the com-) --3.556 F(mand)144 266.4 Q<83>108 283.2 Q(the current w)144 283.2 Q -(orking directory)-.1 E<83>108 300 Q(the \214le creation mode mask)144 -300 Q<83>108 316.8 Q .856(shell v)144 316.8 R .857 -(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857 -(xport, along with v)-.15 F .857(ariables e)-.25 F .857 -(xported for the command,)-.15 F(passed in the en)144 328.8 Q(vironment) --.4 E<83>108 345.6 Q .307(traps caught by the shell are reset to the v) -144 345.6 R .306(alues inherited from the shell')-.25 F 2.806(sp)-.55 G -.306(arent, and traps ignored)-2.806 F(by the shell are ignored)144 -357.6 Q 2.5(Ac)108 374.4 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5 -(di).1 G 2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E -(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E -(vironment.)-.4 E .577(Command substitution, commands grouped with pare\ -ntheses, and asynchronous commands are in)108 391.2 R -.2(vo)-.4 G -.1 -(ke).2 G 3.078(di).1 G(n)-3.078 E 2.745(as)108 403.2 S .245(ubshell en) --2.745 F .245(vironment that is a duplicate of the shell en)-.4 F .244 -(vironment, e)-.4 F .244(xcept that traps caught by the shell are)-.15 F -.358(reset to the v)108 415.2 R .358 -(alues that the shell inherited from its parent at in)-.25 F -.2(vo)-.4 -G 2.858(cation. Builtin).2 F .359(commands that are in)2.859 F -.2(vo) --.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 427.2 -R -.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.356 -(vironment. Changes)-.4 F .856(made to the subshell en)3.356 F(viron-) --.4 E(ment cannot af)108 439.2 Q(fect the shell')-.25 E 2.5(se)-.55 G --.15(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.376(Subshells spa)108 -456 R 1.376(wned to e)-.15 F -.15(xe)-.15 G 1.377 -(cute command substitutions inherit the v).15 F 1.377(alue of the)-.25 F -F13.877 E F0 1.377(option from the parent)3.877 F 2.5(shell. When) -108 468 R(not in)2.5 E/F3 10/Times-Italic@0 SF(posix mode)2.5 E F0(,)A -F1(bash)2.5 E F0(clears the)2.5 E F12.5 E F0 -(option in such subshells.)2.5 E .405(If a command is follo)108 484.8 R -.405(wed by a)-.25 F F1(&)2.905 E F0 .404(and job control is not acti) -2.905 F -.15(ve)-.25 G 2.904(,t).15 G .404(he def)-2.904 F .404 -(ault standard input for the command)-.1 F .197(is the empty \214le)108 -496.8 R F3(/de)2.697 E(v/null)-.15 E F0 5.197(.O)C .197 -(therwise, the in)-5.197 F -.2(vo)-.4 G -.1(ke).2 G 2.697(dc).1 G .198 -(ommand inherits the \214le descriptors of the calling shell)-2.697 F -(as modi\214ed by redirections.)108 508.8 Q/F4 10.95/Times-Bold@0 SF -(ENVIR)72 525.6 Q(ONMENT)-.329 E F0 2.344(When a program is in)108 537.6 -R -.2(vo)-.4 G -.1(ke).2 G 4.843(di).1 G 4.843(ti)-4.843 G 4.843(sg) --4.843 G -2.15 -.25(iv e)-4.843 H 4.843(na).25 G 4.843(na)-4.843 G 2.343 -(rray of strings called the)-4.843 F F3(en)5.033 E(vir)-.4 E(onment)-.45 -E F0 7.343(.T).68 G 2.343(his is a list of)-7.343 F F3(name)108 549.6 Q -F0A F3(value)A F0(pairs, of the form)2.5 E F3(name)2.86 E F0(=)A F3 -(value)A F0(.).18 E .438(The shell pro)108 566.4 R .438(vides se)-.15 F --.15(ve)-.25 G .438(ral w).15 F .438(ays to manipulate the en)-.1 F -2.938(vironment. On)-.4 F(in)2.938 E -.2(vo)-.4 G .438 -(cation, the shell scans its o).2 F .439(wn en-)-.25 F .709(vironment a\ -nd creates a parameter for each name found, automatically marking it fo\ -r)108 578.4 R F3 -.2(ex)3.208 G(port).2 E F0 .708(to child pro-)3.888 F -2.703(cesses. Ex)108 590.4 R .203(ecuted commands inherit the en)-.15 F -2.703(vironment. The)-.4 F F1(export)2.703 E F0(and)2.703 E F1(declar) -2.703 E 2.703<65ad>-.18 G(x)-2.703 E F0 .203(commands allo)2.703 F 2.704 -(wp)-.25 G(aram-)-2.704 E .332 -(eters and functions to be added to and deleted from the en)108 602.4 R -2.832(vironment. If)-.4 F .332(the v)2.832 F .332 -(alue of a parameter in the en-)-.25 F .131 -(vironment is modi\214ed, the ne)108 614.4 R 2.631(wv)-.25 G .131 -(alue becomes part of the en)-2.881 F .132 -(vironment, replacing the old.)-.4 F .132(The en)5.132 F(vironment)-.4 E -.321(inherited by an)108 626.4 R 2.821(ye)-.15 G -.15(xe)-2.971 G .321 -(cuted command consists of the shell').15 F 2.821(si)-.55 G .321 -(nitial en)-2.821 F .32(vironment, whose v)-.4 F .32(alues may be modi-) --.25 F .533(\214ed in the shell, less an)108 638.4 R 3.033(yp)-.15 G -.534(airs remo)-3.033 F -.15(ve)-.15 G 3.034(db).15 G 3.034(yt)-3.034 G -(he)-3.034 E F1(unset)3.034 E F0 .534(command, plus an)3.034 F 3.034(ya) --.15 G .534(dditions via the)-3.034 F F1(export)3.034 E F0(and)3.034 E -F1(de-)3.034 E(clar)108 650.4 Q 2.5<65ad>-.18 G(x)-2.5 E F0(commands.) -2.5 E .563(The en)108 667.2 R .563(vironment for an)-.4 F(y)-.15 E F3 -.563(simple command)3.403 F F0 .562 -(or function may be augmented temporarily by pre\214xing it with)3.833 F -.202(parameter assignments, as described abo)108 679.2 R .502 -.15(ve i) --.15 H(n).15 E F2 -.666(PA)2.702 G(RAMETERS).666 E/F5 9/Times-Roman@0 SF -(.)A F0 .202(These assignment statements af)4.702 F .203(fect only the) --.25 F(en)108 691.2 Q(vironment seen by that command.)-.4 E .81(If the) -108 708 R F13.31 E F0 .81(option is set \(see the)3.31 F F1(set) -3.31 E F0 -.2(bu)3.31 G .81(iltin command belo).2 F .81(w\), then)-.25 F -F3(all)3.64 E F0 .81(parameter assignments are placed in)3.82 F(the en) -108 720 Q -(vironment for a command, not just those that precede the command name.) --.4 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(36)190.395 E 0 Cg -EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(the ar)144 84 Q +(guments.)-.18 E(3.)108 100.8 Q +(Redirections are performed as described abo)144 100.8 Q .3 -.15(ve u) +-.15 H(nder).15 E/F1 9/Times-Bold@0 SF(REDIRECTION)2.5 E/F2 9 +/Times-Roman@0 SF(.)A F0(4.)108 117.6 Q .716(The te)144 117.6 R .717 +(xt after the)-.15 F/F3 10/Times-Bold@0 SF(=)3.217 E F0 .717(in each v) +3.217 F .717(ariable assignment under)-.25 F .717(goes tilde e)-.18 F +.717(xpansion, parameter e)-.15 F(xpansion,)-.15 E .34 +(command substitution, arithmetic e)144 129.6 R .339 +(xpansion, and quote remo)-.15 F -.25(va)-.15 G 2.839(lb).25 G .339 +(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 141.6 Q +.586(If no command name results, the v)108 158.4 R .586 +(ariable assignments af)-.25 F .586(fect the current shell en)-.25 F +3.087(vironment. In)-.4 F .587(the case of)3.087 F .371(such a command \ +\(one that consists only of assignment statements and redirections\), a\ +ssignment statements)108 170.4 R .835 +(are performed before redirections.)108 182.4 R .835(Otherwise, the v) +5.835 F .835(ariables are added to the en)-.25 F .835 +(vironment of the e)-.4 F -.15(xe)-.15 G(cuted).15 E .839 +(command and do not af)108 194.4 R .838(fect the current shell en)-.25 F +3.338(vironment. If)-.4 F(an)3.338 E 3.338(yo)-.15 G 3.338(ft)-3.338 G +.838(he assignments attempts to assign a)-3.338 F -.25(va)108 206.4 S +(lue to a readonly v).25 E(ariable, an error occurs, and the command e) +-.25 E(xits with a non-zero status.)-.15 E .149 +(If no command name results, redirections are performed, b)108 223.2 R +.149(ut do not af)-.2 F .15(fect the current shell en)-.25 F 2.65 +(vironment. A)-.4 F(redirection error causes the command to e)108 235.2 +Q(xit with a non-zero status.)-.15 E 1.064 +(If there is a command name left after e)108 252 R 1.064(xpansion, e) +-.15 F -.15(xe)-.15 G 1.064(cution proceeds as described belo).15 F +4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .068(command e)108 264 +R 2.568(xits. If)-.15 F .069(one of the e)2.568 F .069 +(xpansions contained a command substitution, the e)-.15 F .069 +(xit status of the command)-.15 F .467(is the e)108 276 R .466 +(xit status of the last command substitution performed.)-.15 F .466 +(If there were no command substitutions, the)5.466 F(command e)108 288 Q +(xits with a status of zero.)-.15 E/F4 10.95/Times-Bold@0 SF +(COMMAND EXECUTION)72 304.8 Q F0 .546 +(After a command has been split into w)108 316.8 R .547 +(ords, if it results in a simple command and an optional list of ar)-.1 +F(gu-)-.18 E(ments, the follo)108 328.8 Q(wing actions are tak)-.25 E +(en.)-.1 E .379(If the command name contains no slashes, the shell atte\ +mpts to locate it.)108 345.6 R .379(If there e)5.379 F .379 +(xists a shell function by)-.15 F .246(that name, that function is in) +108 357.6 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G +.246(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F1(FUNCTIONS) +2.746 E F2(.)A F0 .246(If the name does not match a func-)4.746 F +(tion, the shell searches for it in the list of shell b)108 369.6 Q 2.5 +(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E +(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .31 +(If the name is neither a shell function nor a b)108 386.4 R .309 +(uiltin, and contains no slashes,)-.2 F F3(bash)2.809 E F0 .309 +(searches each element of)2.809 F(the)108 398.4 Q F1 -.666(PA)3.162 G +(TH)-.189 E F0 .662(for a directory containing an e)2.912 F -.15(xe)-.15 +G .662(cutable \214le by that name.).15 F F3(Bash)5.662 E F0 .663 +(uses a hash table to remember)3.162 F 1.915(the full pathnames of e)108 +410.4 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F3(hash)4.415 E +F0(under)4.415 E F1 1.915(SHELL B)4.415 F(UIL)-.09 E 1.914(TIN COMMANDS) +-.828 F F0(belo)4.164 E 4.414(w\). A)-.25 F(full)4.414 E .719 +(search of the directories in)108 422.4 R F1 -.666(PA)3.219 G(TH)-.189 E +F0 .72(is performed only if the command is not found in the hash table.) +2.969 F .72(If the)5.72 F .956(search is unsuccessful, the shell search\ +es for a de\214ned shell function named)108 434.4 R F3(command_not_f) +3.455 E(ound_han-)-.25 E(dle)108 446.4 Q F0 6.005(.I)C 3.505(ft)-6.005 G +1.005(hat function e)-3.505 F 1.005(xists, it is in)-.15 F -.2(vo)-.4 G +-.1(ke).2 G 3.506(di).1 G 3.506(nas)-3.506 G 1.006(eparate e)-3.506 F +-.15(xe)-.15 G 1.006(cution en).15 F 1.006 +(vironment with the original command)-.4 F .256 +(and the original command')108 458.4 R 2.756(sa)-.55 G -.18(rg)-2.756 G +.256(uments as its ar).18 F .256(guments, and the function')-.18 F 2.755 +(se)-.55 G .255(xit status becomes the e)-2.905 F .255(xit sta-)-.15 F +.263(tus of that subshell.)108 470.4 R .263(If that function is not de\ +\214ned, the shell prints an error message and returns an e)5.263 F .263 +(xit sta-)-.15 F(tus of 127.)108 482.4 Q 1.089(If the search is success\ +ful, or if the command name contains one or more slashes, the shell e) +108 499.2 R -.15(xe)-.15 G 1.089(cutes the).15 F .197 +(named program in a separate e)108 511.2 R -.15(xe)-.15 G .197 +(cution en).15 F 2.698(vironment. Ar)-.4 F .198 +(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .198 +(n, and the remain-).15 F(ing ar)108 523.2 Q +(guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15 +(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.049(If this e)108 540 R -.15 +(xe)-.15 G 1.049(cution f).15 F 1.049 +(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.048 +(cutable format, and the \214le is not a directory).15 F 3.548(,i)-.65 G +3.548(ti)-3.548 G 3.548(sa)-3.548 G(s-)-3.548 E .143(sumed to be a)108 +552 R/F5 10/Times-Italic@0 SF .143(shell script)2.643 F F0 2.643(,a\214) +C .143(le containing shell commands, and the shell creates a ne)-2.643 F +2.643(wi)-.25 G .143(nstance of itself to)-2.643 F -.15(exe)108 564 S +.137(cute it.).15 F .137 +(This subshell reinitializes itself, so that the ef)5.137 F .136 +(fect is as if a ne)-.25 F 2.636(ws)-.25 G .136(hell had been in)-2.636 +F -.2(vo)-.4 G -.1(ke).2 G 2.636(dt).1 G 2.636(oh)-2.636 G(andle)-2.636 +E .865(the script, with the e)108 576 R .866 +(xception that the locations of commands remembered by the parent \(see) +-.15 F F3(hash)3.366 E F0(belo)3.366 E(w)-.25 E(under)108 588 Q F1 +(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F2(\))A F0 +(are retained by the child.)2.25 E .348(If the program is a \214le be) +108 604.8 R .348(ginning with)-.15 F F3(#!)2.848 E F0 2.848(,t)C .347(h\ +e remainder of the \214rst line speci\214es an interpreter for the pro-) +-2.848 F 3.178(gram. The)108 616.8 R .678(shell e)3.178 F -.15(xe)-.15 G +.678(cutes the speci\214ed interpreter on operating systems that do not\ + handle this e).15 F -.15(xe)-.15 G(cutable).15 E .206(format themselv) +108 628.8 R 2.706(es. The)-.15 F(ar)2.706 E .206 +(guments to the interpreter consist of a single optional ar)-.18 F .206 +(gument follo)-.18 F .206(wing the in-)-.25 F .267 +(terpreter name on the \214rst line of the program, follo)108 640.8 R +.268(wed by the name of the program, follo)-.25 F .268(wed by the com-) +-.25 F(mand ar)108 652.8 Q(guments, if an)-.18 E -.65(y.)-.15 G F4 +(COMMAND EXECUTION ENVIR)72 669.6 Q(ONMENT)-.329 E F0(The shell has an) +108 681.6 Q F5 -.2(ex)2.5 G(ecution en).2 E(vir)-.4 E(onment)-.45 E F0 +2.5(,w)C(hich consists of the follo)-2.5 E(wing:)-.25 E<83>108 698.4 Q +1.406(open \214les inherited by the shell at in)144 698.4 R -.2(vo)-.4 G +1.405(cation, as modi\214ed by redirections supplied to the).2 F F3 +(exec)3.905 E F0 -.2(bu)144 710.4 S(iltin).2 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(36)185.955 E 0 Cg EP %%Page: 37 37 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(When)108 84 Q/F1 -10/Times-Bold@0 SF(bash)3.585 E F0(in)3.585 E -.2(vo)-.4 G -.1(ke).2 G -3.585(sa).1 G 3.585(ne)-3.585 G 1.085(xternal command, the v)-3.735 F -(ariable)-.25 E F1(_)3.585 E F0 1.086 -(is set to the full \214lename of the command and)3.586 F -(passed to that command in its en)108 96 Q(vironment.)-.4 E/F2 10.95 -/Times-Bold@0 SF(EXIT ST)72 112.8 Q -1.04(AT)-.986 G(US)1.04 E F0 .151 -(The e)108 124.8 R .151(xit status of an e)-.15 F -.15(xe)-.15 G .151 -(cuted command is the v).15 F .15(alue returned by the)-.25 F/F3 10 -/Times-Italic@0 SF(waitpid)2.65 E F0 .15(system call or equi)2.65 F -.25 -(va)-.25 G .15(lent func-).25 F 2.847(tion. Exit)108 136.8 R .347 -(statuses f)2.847 F .347(all between 0 and 255, though, as e)-.1 F .347 -(xplained belo)-.15 F 1.647 -.65(w, t)-.25 H .347(he shell may use v).65 -F .348(alues abo)-.25 F .648 -.15(ve 1)-.15 H(25).15 E(specially)108 -148.8 Q 5.507(.E)-.65 G .507(xit statuses from shell b)-5.507 F .507 -(uiltins and compound commands are also limited to this range.)-.2 F -(Under)5.506 E(certain circumstances, the shell will use special v)108 -160.8 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15 -(Fo)108 177.6 S 3.372(rt).15 G .872(he shell')-3.372 F 3.372(sp)-.55 G -.873(urposes, a command which e)-3.372 F .873(xits with a zero e)-.15 F -.873(xit status has succeeded.)-.15 F .873(An e)5.873 F .873 -(xit status of)-.15 F .049(zero indicates success.)108 189.6 R 2.549(An) -5.049 G .049(on-zero e)-2.549 F .049(xit status indicates f)-.15 F 2.549 -(ailure. When)-.1 F 2.549(ac)2.549 G .048(ommand terminates on a f) --2.549 F .048(atal sig-)-.1 F(nal)108 201.6 Q F3(N)2.5 E F0(,)A F1(bash) -2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F3(N)A F0(as the e)2.5 E -(xit status.)-.15 E .404 -(If a command is not found, the child process created to e)108 218.4 R --.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .405 -(If a command is)5.405 F(found b)108 230.4 Q(ut is not e)-.2 E -.15(xe) --.15 G(cutable, the return status is 126.).15 E(If a command f)108 247.2 -Q(ails because of an error during e)-.1 E -(xpansion or redirection, the e)-.15 E(xit status is greater than zero.) --.15 E .081(Shell b)108 264 R .081 -(uiltin commands return a status of 0 \()-.2 F F3(true)A F0 2.581(\)i)C -2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F3(false)A F0 -2.58(\)i)C 2.58(fa)-2.58 G 2.58(ne)-2.58 G .08(rror occurs while)-2.58 F -(the)108 276 Q 2.967(ye)-.15 G -.15(xe)-3.117 G 2.967(cute. All).15 F --.2(bu)2.967 G .467(iltins return an e).2 F .468 -(xit status of 2 to indicate incorrect usage, generally in)-.15 F -.25 -(va)-.4 G .468(lid options or).25 F(missing ar)108 288 Q(guments.)-.18 E -F1(Bash)108 304.8 Q F0 .202(itself returns the e)2.702 F .202 -(xit status of the last command e)-.15 F -.15(xe)-.15 G .201 -(cuted, unless a syntax error occurs, in which case).15 F(it e)108 316.8 -Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F1 -(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F2 -(SIGN)72 333.6 Q(ALS)-.219 E F0(When)108 345.6 Q F1(bash)2.502 E F0 .002 -(is interacti)2.502 F -.15(ve)-.25 G 2.502(,i).15 G 2.502(nt)-2.502 G -.002(he absence of an)-2.502 F 2.502(yt)-.15 G .002(raps, it ignores) --2.502 F/F4 9/Times-Bold@0 SF(SIGTERM)2.502 E F0 .002(\(so that)2.252 F -F1 .002(kill 0)2.502 F F0 .002(does not kill an in-)2.502 F(teracti)108 -357.6 Q 1.216 -.15(ve s)-.25 H .916(hell\), and).15 F F4(SIGINT)3.416 E -F0 .915(is caught and handled \(so that the)3.166 F F1(wait)3.415 E F0 --.2(bu)3.415 G .915(iltin is interruptible\).).2 F .915(In all cases,) -5.915 F F1(bash)108 369.6 Q F0(ignores)2.5 E F4(SIGQ)2.5 E(UIT)-.09 E/F5 -9/Times-Roman@0 SF(.)A F0(If job control is in ef)4.5 E(fect,)-.25 E F1 -(bash)2.5 E F0(ignores)2.5 E F4(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU) --.162 E F5(,)A F0(and)2.25 E F4(SIGTSTP)2.5 E F5(.)A F0(Non-b)108 386.4 -Q 1.064(uiltin commands run by)-.2 F F1(bash)3.564 E F0(ha)3.564 E 1.365 --.15(ve s)-.2 H 1.065(ignal handlers set to the v).15 F 1.065 -(alues inherited by the shell from its)-.25 F 3.248(parent. When)108 -398.4 R .748(job control is not in ef)3.248 F .747 -(fect, asynchronous commands ignore)-.25 F F4(SIGINT)3.247 E F0(and) -2.997 E F4(SIGQ)3.247 E(UIT)-.09 E F0 .747(in addi-)2.997 F .652 -(tion to these inherited handlers.)108 410.4 R .653 -(Commands run as a result of command substitution ignore the k)5.652 F --.15(ey)-.1 G(board-).15 E(generated job control signals)108 422.4 Q F4 -(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F0(and)2.25 E F4 -(SIGTSTP)2.5 E F5(.)A F0 2.046(The shell e)108 439.2 R 2.046 -(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F4(SIGHUP)4.545 E -F5(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.345 --.15(ve s)-.25 H 2.045(hell resends the).15 F F4(SIGHUP)108 451.2 Q F0 -1.004(to all jobs, running or stopped.)3.254 F 1.004 -(Stopped jobs are sent)6.004 F F4(SIGCONT)3.505 E F0 1.005 -(to ensure that the)3.255 F 3.505(yr)-.15 G(ecei)-3.505 E 1.305 -.15 -(ve t)-.25 H(he).15 E F4(SIGHUP)108 463.2 Q F5(.)A F0 2.53 -.8(To p)5.43 -H(re).8 E -.15(ve)-.25 G .93(nt the shell from sending the signal to a \ -particular job, it should be remo).15 F -.15(ve)-.15 G 3.429(df).15 G -.929(rom the)-3.429 F 1.356(jobs table with the)108 475.2 R F1(diso) -3.856 E(wn)-.1 E F0 -.2(bu)3.856 G 1.356(iltin \(see).2 F F4 1.356 -(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.607 E -1.357(w\) or mark)-.25 F 1.357(ed to not recei)-.1 F -.15(ve)-.25 G F4 -(SIGHUP)108 487.2 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A -.166(If the)108 504 R F1(huponexit)2.666 E F0 .166 -(shell option has been set with)2.666 F F1(shopt)2.666 E F0(,)A F1(bash) -2.666 E F0 .166(sends a)2.666 F F4(SIGHUP)2.666 E F0 .166 -(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108 -516 Q(xits.)-.15 E(If)108 532.8 Q F1(bash)3.046 E F0 .546(is w)3.046 F -.546(aiting for a command to complete and recei)-.1 F -.15(ve)-.25 G -3.046(sas).15 G .546(ignal for which a trap has been set, the trap) --3.046 F .663(will not be e)108 544.8 R -.15(xe)-.15 G .663 -(cuted until the command completes.).15 F(When)5.663 E F1(bash)3.163 E -F0 .662(is w)3.163 F .662(aiting for an asynchronous command)-.1 F .326 -(via the)108 556.8 R F1(wait)2.826 E F0 -.2(bu)2.826 G .327(iltin, the \ -reception of a signal for which a trap has been set will cause the).2 F -F1(wait)2.827 E F0 -.2(bu)2.827 G .327(iltin to re-).2 F -(turn immediately with an e)108 568.8 Q -(xit status greater than 128, immediately after which the trap is e)-.15 -E -.15(xe)-.15 G(cuted.).15 E F2(JOB CONTR)72 585.6 Q(OL)-.329 E F3 -.25 -(Jo)108 597.6 S 3.369(bc).25 G(ontr)-3.369 E(ol)-.45 E F0 .868 -(refers to the ability to selecti)3.879 F -.15(ve)-.25 G .868 -(ly stop \().15 F F3(suspend)A F0 3.368(\)t)C .868(he e)-3.368 F -.15 -(xe)-.15 G .868(cution of processes and continue \().15 F F3 -.37(re)C -(-).37 E(sume)108 609.6 Q F0 2.664(\)t)C .164(heir e)-2.664 F -.15(xe) --.15 G .164(cution at a later point.).15 F 2.665(Au)5.165 G .165 -(ser typically emplo)-2.665 F .165(ys this f)-.1 F .165 -(acility via an interacti)-.1 F .465 -.15(ve i)-.25 H(nterf).15 E .165 -(ace sup-)-.1 F(plied jointly by the operating system k)108 621.6 Q -(ernel')-.1 E 2.5(st)-.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(ra).15 -G(nd)-2.5 E F1(bash)2.5 E F0(.)A .785(The shell associates a)108 638.4 R -F3(job)5.025 E F0 .785(with each pipeline.)3.515 F .784(It k)5.785 F -.784(eeps a table of currently e)-.1 F -.15(xe)-.15 G .784 -(cuting jobs, which may be).15 F .324(listed with the)108 650.4 R F1 -(jobs)2.824 E F0 2.824(command. When)2.824 F F1(bash)2.825 E F0 .325 -(starts a job asynchronously \(in the)2.825 F F3(bac)3.095 E(kgr)-.2 E -(ound)-.45 E F0 .325(\), it prints a line).77 F(that looks lik)108 662.4 -Q(e:)-.1 E([1] 25647)144 679.2 Q .241(indicating that this job is job n\ -umber 1 and that the process ID of the last process in the pipeline ass\ -ociated)108 696 R .732(with this job is 25647.)108 708 R .733 -(All of the processes in a single pipeline are members of the same job) -5.732 F(.)-.4 E F1(Bash)5.733 E F0(uses)3.233 E(the)108 720 Q F3(job) -4.24 E F0(abstraction as the basis for job control.)2.73 E(GNU Bash 5.1) -72 768 Q(2020 October 29)141.235 E(37)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>108 84 Q +(the current w)144 84 Q(orking directory as set by)-.1 E/F1 10 +/Times-Bold@0 SF(cd)2.5 E F0(,)A F1(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F1 +(popd)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(nherited by the shell at in)-2.5 E +-.2(vo)-.4 G(cation).2 E<83>108 100.8 Q +(the \214le creation mode mask as set by)144 100.8 Q F1(umask)2.5 E F0 +(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E<83>108 +117.6 Q(current traps set by)144 117.6 Q F1(trap)2.5 E F0<83>108 134.4 Q +.256(shell parameters that are set by v)144 134.4 R .256 +(ariable assignment or with)-.25 F F1(set)2.756 E F0 .257 +(or inherited from the shell')2.756 F 2.757(sp)-.55 G(arent)-2.757 E +(in the en)144 146.4 Q(vironment)-.4 E<83>108 163.2 Q +(shell functions de\214ned during e)144 163.2 Q -.15(xe)-.15 G +(cution or inherited from the shell').15 E 2.5(sp)-.55 G +(arent in the en)-2.5 E(vironment)-.4 E<83>108 180 Q +(options enabled at in)144 180 Q -.2(vo)-.4 G(cation \(either by def).2 +E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F1(set)2.5 E +F0<83>108 196.8 Q(options enabled by)144 196.8 Q F1(shopt)2.5 E F0<83> +108 213.6 Q(shell aliases de\214ned with)144 213.6 Q F1(alias)2.5 E F0 +<83>108 230.4 Q -.25(va)144 230.4 S +(rious process IDs, including those of background jobs, the v).25 E +(alue of)-.25 E F1($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E +/F2 9/Times-Bold@0 SF(PPID)2.5 E F0 .427 +(When a simple command other than a b)108 247.2 R .426 +(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .426 +(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.926(di).1 G 2.926(nas) +-2.926 G(eparate)-2.926 E -.15(exe)108 259.2 S .133(cution en).15 F .133 +(vironment that consists of the follo)-.4 F 2.634(wing. Unless)-.25 F +.134(otherwise noted, the v)2.634 F .134(alues are inherited from)-.25 F +(the shell.)108 271.2 Q<83>108 288 Q 1.056(the shell')144 288 R 3.556 +(so)-.55 G 1.056(pen \214les, plus an)-3.556 F 3.556(ym)-.15 G 1.056 +(odi\214cations and additions speci\214ed by redirections to the com-) +-3.556 F(mand)144 300 Q<83>108 316.8 Q(the current w)144 316.8 Q +(orking directory)-.1 E<83>108 333.6 Q(the \214le creation mode mask)144 +333.6 Q<83>108 350.4 Q .856(shell v)144 350.4 R .857 +(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857 +(xport, along with v)-.15 F .857(ariables e)-.25 F .857 +(xported for the command,)-.15 F(passed in the en)144 362.4 Q(vironment) +-.4 E<83>108 379.2 Q .307(traps caught by the shell are reset to the v) +144 379.2 R .306(alues inherited from the shell')-.25 F 2.806(sp)-.55 G +.306(arent, and traps ignored)-2.806 F(by the shell are ignored)144 +391.2 Q 2.5(Ac)108 408 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5 +(di).1 G 2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E +(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E +(vironment.)-.4 E(A)108 424.8 Q/F3 10/Times-Italic@0 SF(subshell)2.5 E +F0(is a cop)2.5 E 2.5(yo)-.1 G 2.5(ft)-2.5 G(he shell process.)-2.5 E +.577(Command substitution, commands grouped with parentheses, and async\ +hronous commands are in)108 441.6 R -.2(vo)-.4 G -.1(ke).2 G 3.078(di).1 +G(n)-3.078 E 2.745(as)108 453.6 S .245(ubshell en)-2.745 F .245 +(vironment that is a duplicate of the shell en)-.4 F .244(vironment, e) +-.4 F .244(xcept that traps caught by the shell are)-.15 F .358 +(reset to the v)108 465.6 R .358 +(alues that the shell inherited from its parent at in)-.25 F -.2(vo)-.4 +G 2.858(cation. Builtin).2 F .359(commands that are in)2.859 F -.2(vo) +-.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 477.6 +R -.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.356 +(vironment. Changes)-.4 F .856(made to the subshell en)3.356 F(viron-) +-.4 E(ment cannot af)108 489.6 Q(fect the shell')-.25 E 2.5(se)-.55 G +-.15(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.376(Subshells spa)108 +506.4 R 1.376(wned to e)-.15 F -.15(xe)-.15 G 1.377 +(cute command substitutions inherit the v).15 F 1.377(alue of the)-.25 F +F13.877 E F0 1.377(option from the parent)3.877 F 2.5(shell. When) +108 518.4 R(not in)2.5 E F3(posix mode)2.5 E F0(,)A F1(bash)2.5 E F0 +(clears the)2.5 E F12.5 E F0(option in such subshells.)2.5 E .405 +(If a command is follo)108 535.2 R .405(wed by a)-.25 F F1(&)2.905 E F0 +.404(and job control is not acti)2.905 F -.15(ve)-.25 G 2.904(,t).15 G +.404(he def)-2.904 F .404(ault standard input for the command)-.1 F .197 +(is the empty \214le)108 547.2 R F3(/de)2.697 E(v/null)-.15 E F0 5.197 +(.O)C .197(therwise, the in)-5.197 F -.2(vo)-.4 G -.1(ke).2 G 2.697(dc) +.1 G .198(ommand inherits the \214le descriptors of the calling shell) +-2.697 F(as modi\214ed by redirections.)108 559.2 Q/F4 10.95 +/Times-Bold@0 SF(ENVIR)72 576 Q(ONMENT)-.329 E F0 2.344 +(When a program is in)108 588 R -.2(vo)-.4 G -.1(ke).2 G 4.843(di).1 G +4.843(ti)-4.843 G 4.843(sg)-4.843 G -2.15 -.25(iv e)-4.843 H 4.843(na) +.25 G 4.843(na)-4.843 G 2.343(rray of strings called the)-4.843 F F3(en) +5.033 E(vir)-.4 E(onment)-.45 E F0 7.343(.T).68 G 2.343 +(his is a list of)-7.343 F F3(name)108 600 Q F0A F3(value)A F0 +(pairs, of the form)2.5 E F3(name)2.86 E F0(=)A F3(value)A F0(.).18 E +.438(The shell pro)108 616.8 R .438(vides se)-.15 F -.15(ve)-.25 G .438 +(ral w).15 F .438(ays to manipulate the en)-.1 F 2.938(vironment. On)-.4 +F(in)2.938 E -.2(vo)-.4 G .438(cation, the shell scans its o).2 F .439 +(wn en-)-.25 F .709(vironment and creates a parameter for each name fou\ +nd, automatically marking it for)108 628.8 R F3 -.2(ex)3.208 G(port).2 E +F0 .708(to child pro-)3.888 F 2.703(cesses. Ex)108 640.8 R .203 +(ecuted commands inherit the en)-.15 F 2.703(vironment. The)-.4 F F1 +(export)2.703 E F0(and)2.703 E F1(declar)2.703 E 2.703<65ad>-.18 G(x) +-2.703 E F0 .203(commands allo)2.703 F 2.704(wp)-.25 G(aram-)-2.704 E +.332(eters and functions to be added to and deleted from the en)108 +652.8 R 2.832(vironment. If)-.4 F .332(the v)2.832 F .332 +(alue of a parameter in the en-)-.25 F .131 +(vironment is modi\214ed, the ne)108 664.8 R 2.631(wv)-.25 G .131 +(alue becomes part of the en)-2.881 F .132 +(vironment, replacing the old.)-.4 F .132(The en)5.132 F(vironment)-.4 E +.321(inherited by an)108 676.8 R 2.821(ye)-.15 G -.15(xe)-2.971 G .321 +(cuted command consists of the shell').15 F 2.821(si)-.55 G .321 +(nitial en)-2.821 F .32(vironment, whose v)-.4 F .32(alues may be modi-) +-.25 F .533(\214ed in the shell, less an)108 688.8 R 3.033(yp)-.15 G +.534(airs remo)-3.033 F -.15(ve)-.15 G 3.034(db).15 G 3.034(yt)-3.034 G +(he)-3.034 E F1(unset)3.034 E F0 .534(command, plus an)3.034 F 3.034(ya) +-.15 G .534(dditions via the)-3.034 F F1(export)3.034 E F0(and)3.034 E +F1(de-)3.034 E(clar)108 700.8 Q 2.5<65ad>-.18 G(x)-2.5 E F0(commands.) +2.5 E .563(The en)108 717.6 R .563(vironment for an)-.4 F(y)-.15 E F3 +.563(simple command)3.403 F F0 .562 +(or function may be augmented temporarily by pre\214xing it with)3.833 F +.202(parameter assignments, as described abo)108 729.6 R .502 -.15(ve i) +-.15 H(n).15 E F2 -.666(PA)2.702 G(RAMETERS).666 E/F5 9/Times-Roman@0 SF +(.)A F0 .202(These assignment statements af)4.702 F .203(fect only the) +-.25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(37)185.955 E 0 +Cg EP %%Page: 38 38 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.982 -.8(To f)108 -84 T .382(acilitate the implementation of the user interf).7 F .382 -(ace to job control, the operating system maintains the no-)-.1 F 1.537 -(tion of a)108 96 R/F1 10/Times-Italic@0 SF(curr)4.037 E 1.537 -(ent terminal pr)-.37 F 1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F0 -6.537(.M)C 1.538(embers of this process group \(processes whose process) --6.537 F .023 -(group ID is equal to the current terminal process group ID\) recei)108 -108 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 -(board-generated signals such as).15 F/F2 9/Times-Bold@0 SF(SIG-)2.522 E -(INT)108 120 Q/F3 9/Times-Roman@0 SF(.)A F0 1.215 -(These processes are said to be in the)5.715 F F1(for)5.685 E -.4(eg) --.37 G -.45(ro).4 G(und).45 E F0(.).77 E F1(Bac)6.795 E(kgr)-.2 E(ound) --.45 E F0 1.216(processes are those whose process)4.485 F .146 -(group ID dif)108 132 R .146(fers from the terminal')-.25 F .146 -(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .145 -(board-generated signals.).15 F .145(Only fore-)5.145 F .16 -(ground processes are allo)108 144 R .16(wed to read from or)-.25 F 2.66 -(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F4 10 -/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter) --2.66 F(-)-.2 E 3.052(minal. Background)108 156 R .551 -(processes which attempt to read from \(write to when)3.052 F F4 .551 -(stty tostop)3.051 F F0 .551(is in ef)3.051 F .551(fect\) the)-.25 F -.717(terminal are sent a)108 168 R F2 .717(SIGTTIN \(SIGTT)3.217 F(OU\)) --.162 E F0 .718(signal by the k)2.967 F(ernel')-.1 E 3.218(st)-.55 G -.718(erminal dri)-3.218 F -.15(ve)-.25 G 1.518 -.4(r, w).15 H .718 -(hich, unless caught, sus-).4 F(pends the process.)108 180 Q 1.088 -(If the operating system on which)108 196.8 R/F5 10/Times-Bold@0 SF -(bash)3.588 E F0 1.088(is running supports job control,)3.588 F F5(bash) -3.587 E F0 1.087(contains f)3.587 F 1.087(acilities to use it.)-.1 F -.8 -(Ty)108 208.8 S .301(ping the).8 F F1(suspend)3.141 E F0 .301 -(character \(typically)3.571 F F5(^Z)2.801 E F0 2.801(,C)C .301 -(ontrol-Z\) while a process is running causes that process to be)-2.801 -F 2.143(stopped and returns control to)108 220.8 R F5(bash)4.642 E F0 -7.142(.T)C 2.142(yping the)-7.942 F F1 2.142(delayed suspend)4.992 F F0 -2.142(character \(typically)5.412 F F5(^Y)4.642 E F0 4.642(,C)C -(ontrol-Y\))-4.642 E .021(causes the process to be stopped when it atte\ -mpts to read input from the terminal, and control to be returned)108 -232.8 R(to)108 244.8 Q F5(bash)3.392 E F0 5.892(.T)C .892 -(he user may then manipulate the state of this job, using the)-5.892 F -F5(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17 -(background, the)108 256.8 R F5(fg)2.67 E F0 .17 -(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F5 -(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F5(^Z)2.67 E F0 -(tak)2.67 E .17(es ef-)-.1 F 1.419(fect immediately)108 268.8 R 3.919 -(,a)-.65 G 1.418(nd has the additional side ef)-3.919 F 1.418 -(fect of causing pending output and typeahead to be dis-)-.25 F(carded.) -108 280.8 Q .777(There are a number of w)108 297.6 R .777 -(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F5 -(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 309.6 -Q F1(jobspec)A F0 3.458(\). Job)B(number)3.458 E F1(n)3.818 E F0 .957 -(may be referred to as)3.697 F F5(%n)3.457 E F0 5.957(.A)C .957 -(job may also be referred to using a pre\214x of the)-2.5 F .59(name us\ -ed to start it, or using a substring that appears in its command line.) -108 321.6 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F5(%ce)3.09 E -F0 .59(refers to a)3.09 F .385(stopped job whose command name be)108 -333.6 R .385(gins with)-.15 F F5(ce)2.885 E F0 5.385(.I)C 2.885(fap) --5.385 G .385(re\214x matches more than one job,)-2.885 F F5(bash)2.885 -E F0 .385(reports an)2.885 F(error)108 345.6 Q 5.194(.U)-.55 G(sing) --5.194 E F5(%?ce)2.694 E F0 2.694(,o)C 2.694(nt)-2.694 G .194 -(he other hand, refers to an)-2.694 F 2.694(yj)-.15 G .194 -(ob containing the string)-2.694 F F5(ce)2.694 E F0 .194 -(in its command line.)2.694 F .194(If the)5.194 F .306 -(substring matches more than one job,)108 357.6 R F5(bash)2.806 E F0 -.306(reports an error)2.806 F 5.306(.T)-.55 G .306(he symbols)-5.306 F -F5(%%)2.806 E F0(and)2.806 E F5(%+)2.806 E F0 .306(refer to the shell') -2.806 F(s)-.55 E .132(notion of the)108 369.6 R F1(curr)2.832 E .133 -(ent job)-.37 F F0 2.633(,w).23 G .133 -(hich is the last job stopped while it w)-2.633 F .133(as in the fore) --.1 F .133(ground or started in the back-)-.15 F 2.576(ground. The)108 -381.6 R F1(pr)3.826 E -.15(ev)-.37 G .076(ious job).15 F F0 .076 -(may be referenced using)2.806 F F5<25ad>2.576 E F0 5.076(.I)C 2.576(ft) --5.076 G .075(here is only a single job,)-2.576 F F5(%+)2.575 E F0(and) -2.575 E F5<25ad>2.575 E F0 .075(can both)2.575 F .317 -(be used to refer to that job)108 393.6 R 5.317(.I)-.4 G 2.817(no)-5.317 -G .317(utput pertaining to jobs \(e.g., the output of the)-2.817 F F5 -(jobs)2.817 E F0 .317(command\), the current)2.817 F .033(job is al)108 -405.6 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F5(+)2.533 E F0 2.533 -(,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F52.533 -E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .032 -(ying job speci-)-.15 F(\214cation\) also refers to the current job)108 -417.6 Q(.)-.4 E .443 -(Simply naming a job can be used to bring it into the fore)108 434.4 R -(ground:)-.15 E F5(%1)2.944 E F0 .444(is a synon)2.944 F .444(ym for) --.15 F F5 -.63(``)2.944 G .444(fg %1').63 F(')-.63 E F0 2.944(,b)C -(ringing)-2.944 E 1.473(job 1 from the background into the fore)108 -446.4 R 3.973(ground. Similarly)-.15 F(,)-.65 E F5 -.63(``)3.972 G 1.472 -(%1 &').63 F(')-.63 E F0 1.472(resumes job 1 in the background,)3.972 F -(equi)108 458.4 Q -.25(va)-.25 G(lent to).25 E F5 -.63(``)2.5 G(bg %1') -.63 E(')-.63 E F0(.)A .13(The shell learns immediately whene)108 475.2 R --.15(ve)-.25 G 2.63(raj).15 G .13(ob changes state.)-2.63 F(Normally) -5.131 E(,)-.65 E F5(bash)2.631 E F0 -.1(wa)2.631 G .131 -(its until it is about to print a).1 F .158 -(prompt before reporting changes in a job')108 487.2 R 2.658(ss)-.55 G -.158(tatus so as to not interrupt an)-2.658 F 2.657(yo)-.15 G .157 -(ther output.)-2.657 F .157(If the)5.157 F F52.657 E F0 .157 -(option to)2.657 F(the)108 499.2 Q F5(set)2.647 E F0 -.2(bu)2.647 G .147 -(iltin command is enabled,).2 F F5(bash)2.647 E F0 .148 -(reports such changes immediately)2.648 F 5.148(.A)-.65 G .448 -.15 -(ny t)-5.148 H .148(rap on).15 F F2(SIGCHLD)2.648 E F0 .148(is e)2.398 F --.15(xe)-.15 G(-).15 E(cuted for each child that e)108 511.2 Q(xits.) --.15 E .033(If an attempt to e)108 528 R(xit)-.15 E F5(bash)2.533 E F0 -.033(is made while jobs are stopped \(or)2.533 F 2.532(,i)-.4 G 2.532 -(ft)-2.532 G(he)-2.532 E F5(checkjobs)2.532 E F0 .032 -(shell option has been enabled)2.532 F 1.002(using the)108 540 R F5 -(shopt)3.502 E F0 -.2(bu)3.502 G 1.002 -(iltin, running\), the shell prints a w).2 F 1.002 -(arning message, and, if the)-.1 F F5(checkjobs)3.503 E F0 1.003 -(option is en-)3.503 F .956(abled, lists the jobs and their statuses.) -108 552 R(The)5.955 E F5(jobs)3.455 E F0 .955 -(command may then be used to inspect their status.)3.455 F .955(If a) -5.955 F .603(second attempt to e)108 564 R .604 -(xit is made without an interv)-.15 F .604 -(ening command, the shell does not print another w)-.15 F(arning,)-.1 E -(and an)108 576 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E .645 -(When the shell is w)108 592.8 R .645 -(aiting for a job or process using the)-.1 F F5(wait)3.144 E F0 -.2(bu) -3.144 G .644(iltin, and job control is enabled,).2 F F5(wait)3.144 E F0 -(will)3.144 E .282(return when the job changes state. The)108 604.8 R F5 -2.782 E F0 .282(option causes)2.782 F F5(wait)2.782 E F0 .282 -(to w)2.782 F .282(ait until the job or process terminates be-)-.1 F -(fore returning.)108 616.8 Q/F6 10.95/Times-Bold@0 SF(PR)72 633.6 Q -(OMPTING)-.329 E F0 .645(When e)108 645.6 R -.15(xe)-.15 G .645 -(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F5(bash)3.145 E -F0 .645(displays the primary prompt)3.145 F F2(PS1)3.145 E F0 .645 -(when it is ready to read a command,)2.895 F .427 -(and the secondary prompt)108 657.6 R F2(PS2)2.927 E F0 .427 -(when it needs more input to complete a command.)2.677 F F5(Bash)5.428 E -F0(displays)2.928 E F2(PS0)2.928 E F0(after)2.678 E .038 -(it reads a command b)108 669.6 R .038(ut before e)-.2 F -.15(xe)-.15 G -.038(cuting it.).15 F F5(Bash)5.038 E F0(displays)2.537 E F2(PS4)2.537 E -F0 .037(as described abo)2.287 F .337 -.15(ve b)-.15 H .037 -(efore tracing each com-).15 F 1.121(mand when the)108 681.6 R F5 -3.621 E F0 1.122(option is enabled.)3.621 F F5(Bash)6.122 E F0(allo) -3.622 E 1.122(ws these prompt strings to be customized by inserting a) --.25 F(number of backslash-escaped special characters that are decoded \ -as follo)108 693.6 Q(ws:)-.25 E F5(\\a)144 705.6 Q F0 -(an ASCII bell character \(07\))180 705.6 Q F5(\\d)144 717.6 Q F0 -(the date in "W)180 717.6 Q(eekday Month Date" format \(e.g., "T)-.8 E -(ue May 26"\))-.45 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(38) -190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(en)108 84 Q +(vironment seen by that command.)-.4 E .81(If the)108 100.8 R/F1 10 +/Times-Bold@0 SF3.31 E F0 .81(option is set \(see the)3.31 F F1 +(set)3.31 E F0 -.2(bu)3.31 G .81(iltin command belo).2 F .81(w\), then) +-.25 F/F2 10/Times-Italic@0 SF(all)3.64 E F0 .81 +(parameter assignments are placed in)3.82 F(the en)108 112.8 Q +(vironment for a command, not just those that precede the command name.) +-.4 E(When)108 129.6 Q F1(bash)3.585 E F0(in)3.585 E -.2(vo)-.4 G -.1 +(ke).2 G 3.585(sa).1 G 3.585(ne)-3.585 G 1.085(xternal command, the v) +-3.735 F(ariable)-.25 E F1(_)3.585 E F0 1.086 +(is set to the full \214lename of the command and)3.586 F +(passed to that command in its en)108 141.6 Q(vironment.)-.4 E/F3 10.95 +/Times-Bold@0 SF(EXIT ST)72 158.4 Q -1.04(AT)-.986 G(US)1.04 E F0 .151 +(The e)108 170.4 R .151(xit status of an e)-.15 F -.15(xe)-.15 G .151 +(cuted command is the v).15 F .15(alue returned by the)-.25 F F2 +(waitpid)2.65 E F0 .15(system call or equi)2.65 F -.25(va)-.25 G .15 +(lent func-).25 F 2.847(tion. Exit)108 182.4 R .347(statuses f)2.847 F +.347(all between 0 and 255, though, as e)-.1 F .347(xplained belo)-.15 F +1.647 -.65(w, t)-.25 H .347(he shell may use v).65 F .348(alues abo)-.25 +F .648 -.15(ve 1)-.15 H(25).15 E(specially)108 194.4 Q 5.507(.E)-.65 G +.507(xit statuses from shell b)-5.507 F .507 +(uiltins and compound commands are also limited to this range.)-.2 F +(Under)5.506 E(certain circumstances, the shell will use special v)108 +206.4 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15 +(Fo)108 223.2 S 3.372(rt).15 G .872(he shell')-3.372 F 3.372(sp)-.55 G +.873(urposes, a command which e)-3.372 F .873(xits with a zero e)-.15 F +.873(xit status has succeeded.)-.15 F .873(An e)5.873 F .873 +(xit status of)-.15 F .049(zero indicates success.)108 235.2 R 2.549(An) +5.049 G .049(on-zero e)-2.549 F .049(xit status indicates f)-.15 F 2.549 +(ailure. When)-.1 F 2.549(ac)2.549 G .048(ommand terminates on a f) +-2.549 F .048(atal sig-)-.1 F(nal)108 247.2 Q F2(N)2.5 E F0(,)A F1(bash) +2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F2(N)A F0(as the e)2.5 E +(xit status.)-.15 E .404 +(If a command is not found, the child process created to e)108 264 R +-.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .405 +(If a command is)5.405 F(found b)108 276 Q(ut is not e)-.2 E -.15(xe) +-.15 G(cutable, the return status is 126.).15 E(If a command f)108 292.8 +Q(ails because of an error during e)-.1 E +(xpansion or redirection, the e)-.15 E(xit status is greater than zero.) +-.15 E .081(Shell b)108 309.6 R .081 +(uiltin commands return a status of 0 \()-.2 F F2(true)A F0 2.581(\)i)C +2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F2(false)A F0 +2.58(\)i)C 2.58(fa)-2.58 G 2.58(ne)-2.58 G .08(rror occurs while)-2.58 F +(the)108 321.6 Q 2.967(ye)-.15 G -.15(xe)-3.117 G 2.967(cute. All).15 F +-.2(bu)2.967 G .467(iltins return an e).2 F .468 +(xit status of 2 to indicate incorrect usage, generally in)-.15 F -.25 +(va)-.4 G .468(lid options or).25 F(missing ar)108 333.6 Q(guments.)-.18 +E(The e)108 350.4 Q(xit status of the last command is a)-.15 E -.25(va) +-.2 G(ilable in the special parameter $?.).25 E F1(Bash)108 367.2 Q F0 +.202(itself returns the e)2.702 F .202(xit status of the last command e) +-.15 F -.15(xe)-.15 G .201 +(cuted, unless a syntax error occurs, in which case).15 F(it e)108 379.2 +Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F1 +(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F3 +(SIGN)72 396 Q(ALS)-.219 E F0(When)108 408 Q F1(bash)2.502 E F0 .002 +(is interacti)2.502 F -.15(ve)-.25 G 2.502(,i).15 G 2.502(nt)-2.502 G +.002(he absence of an)-2.502 F 2.502(yt)-.15 G .002(raps, it ignores) +-2.502 F/F4 9/Times-Bold@0 SF(SIGTERM)2.502 E F0 .002(\(so that)2.252 F +F1 .002(kill 0)2.502 F F0 .002(does not kill an in-)2.502 F(teracti)108 +420 Q 1.216 -.15(ve s)-.25 H .916(hell\), and).15 F F4(SIGINT)3.416 E F0 +.915(is caught and handled \(so that the)3.166 F F1(wait)3.415 E F0 -.2 +(bu)3.415 G .915(iltin is interruptible\).).2 F .915(In all cases,)5.915 +F F1(bash)108 432 Q F0(ignores)2.5 E F4(SIGQ)2.5 E(UIT)-.09 E/F5 9 +/Times-Roman@0 SF(.)A F0(If job control is in ef)4.5 E(fect,)-.25 E F1 +(bash)2.5 E F0(ignores)2.5 E F4(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU) +-.162 E F5(,)A F0(and)2.25 E F4(SIGTSTP)2.5 E F5(.)A F0(Non-b)108 448.8 +Q 1.064(uiltin commands run by)-.2 F F1(bash)3.564 E F0(ha)3.564 E 1.365 +-.15(ve s)-.2 H 1.065(ignal handlers set to the v).15 F 1.065 +(alues inherited by the shell from its)-.25 F 3.248(parent. When)108 +460.8 R .748(job control is not in ef)3.248 F .747 +(fect, asynchronous commands ignore)-.25 F F4(SIGINT)3.247 E F0(and) +2.997 E F4(SIGQ)3.247 E(UIT)-.09 E F0 .747(in addi-)2.997 F .652 +(tion to these inherited handlers.)108 472.8 R .653 +(Commands run as a result of command substitution ignore the k)5.652 F +-.15(ey)-.1 G(board-).15 E(generated job control signals)108 484.8 Q F4 +(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F0(and)2.25 E F4 +(SIGTSTP)2.5 E F5(.)A F0 2.046(The shell e)108 501.6 R 2.046 +(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F4(SIGHUP)4.545 E +F5(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.345 +-.15(ve s)-.25 H 2.045(hell resends the).15 F F4(SIGHUP)108 513.6 Q F0 +1.004(to all jobs, running or stopped.)3.254 F 1.004 +(Stopped jobs are sent)6.004 F F4(SIGCONT)3.505 E F0 1.005 +(to ensure that the)3.255 F 3.505(yr)-.15 G(ecei)-3.505 E 1.305 -.15 +(ve t)-.25 H(he).15 E F4(SIGHUP)108 525.6 Q F5(.)A F0 2.53 -.8(To p)5.43 +H(re).8 E -.15(ve)-.25 G .93(nt the shell from sending the signal to a \ +particular job, it should be remo).15 F -.15(ve)-.15 G 3.429(df).15 G +.929(rom the)-3.429 F 1.356(jobs table with the)108 537.6 R F1(diso) +3.856 E(wn)-.1 E F0 -.2(bu)3.856 G 1.356(iltin \(see).2 F F4 1.356 +(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.607 E +1.357(w\) or mark)-.25 F 1.357(ed to not recei)-.1 F -.15(ve)-.25 G F4 +(SIGHUP)108 549.6 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A +.166(If the)108 566.4 R F1(huponexit)2.666 E F0 .166 +(shell option has been set with)2.666 F F1(shopt)2.666 E F0(,)A F1(bash) +2.666 E F0 .166(sends a)2.666 F F4(SIGHUP)2.666 E F0 .166 +(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108 +578.4 Q(xits.)-.15 E(If)108 595.2 Q F1(bash)3.046 E F0 .546(is w)3.046 F +.546(aiting for a command to complete and recei)-.1 F -.15(ve)-.25 G +3.046(sas).15 G .546(ignal for which a trap has been set, the trap) +-3.046 F .663(will not be e)108 607.2 R -.15(xe)-.15 G .663 +(cuted until the command completes.).15 F(When)5.663 E F1(bash)3.163 E +F0 .662(is w)3.163 F .662(aiting for an asynchronous command)-.1 F .326 +(via the)108 619.2 R F1(wait)2.826 E F0 -.2(bu)2.826 G .327(iltin, the \ +reception of a signal for which a trap has been set will cause the).2 F +F1(wait)2.827 E F0 -.2(bu)2.827 G .327(iltin to re-).2 F +(turn immediately with an e)108 631.2 Q +(xit status greater than 128, immediately after which the trap is e)-.15 +E -.15(xe)-.15 G(cuted.).15 E .499(When job control is not enabled, and) +108 648 R F1(bash)2.998 E F0 .498(is w)2.998 F .498(aiting for a fore) +-.1 F .498(ground command to complete, the shell re-)-.15 F(cei)108 660 +Q -.15(ve)-.25 G 2.605(sk).15 G -.15(ey)-2.705 G .105 +(board-generated signals such as).15 F F4(SIGINT)2.605 E F0 .105 +(\(usually generated by)2.355 F F1(^C)2.605 E F0 2.605(\)t)C .105 +(hat users commonly intend to)-2.605 F .424(send to that command.)108 +672 R .424(This happens because the shell and the command are in the sa\ +me process group as)5.424 F(the terminal, and)108 684 Q F1(^C)2.5 E F0 +(sends)2.5 E F4(SIGINT)2.5 E F0(to all processes in that process group.) +2.25 E(When)108 700.8 Q F1(bash)3.8 E F0 1.3 +(is running without job control enabled and recei)3.8 F -.15(ve)-.25 G +(s).15 E F4(SIGINT)3.8 E F0 1.3(while w)3.55 F 1.3(aiting for a fore)-.1 +F(ground)-.15 E .81(command, it w)108 712.8 R .81(aits until that fore) +-.1 F .81 +(ground command terminates and then decides what to do about the)-.15 F +F4(SIG-)3.309 E(INT)108 724.8 Q F5(:)A F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(38)185.955 E 0 Cg EP %%Page: 39 39 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(\\D{)144 84 Q/F2 10/Times-Italic@0 SF(format)A F1(})A F0(the)180 96 Q -F2(format)3.927 E F0 1.427(is passed to)3.927 F F2(strftime)3.927 E F0 -1.427(\(3\) and the result is inserted into the prompt string; an)B -(empty)180 108 Q F2(format)2.5 E F0 -(results in a locale-speci\214c time representation.)2.5 E -(The braces are required)5 E F1(\\e)144 120 Q F0 -(an ASCII escape character \(033\))180 120 Q F1(\\h)144 132 Q F0 -(the hostname up to the \214rst `.)180 132 Q(')-.7 E F1(\\H)144 144 Q F0 -(the hostname)180 144 Q F1(\\j)144 156 Q F0 -(the number of jobs currently managed by the shell)180 156 Q F1(\\l)144 -168 Q F0(the basename of the shell')180 168 Q 2.5(st)-.55 G(erminal de) --2.5 E(vice name)-.25 E F1(\\n)144 180 Q F0(ne)180 180 Q(wline)-.25 E F1 -(\\r)144 192 Q F0(carriage return)180 192 Q F1(\\s)144 204 Q F0 -(the name of the shell, the basename of)180 204 Q F1($0)2.5 E F0 -(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1(\\t)144 -216 Q F0(the current time in 24-hour HH:MM:SS format)180 216 Q F1(\\T) -144 228 Q F0(the current time in 12-hour HH:MM:SS format)180 228 Q F1 -(\\@)144 240 Q F0(the current time in 12-hour am/pm format)180 240 Q F1 -(\\A)144 252 Q F0(the current time in 24-hour HH:MM format)180 252 Q F1 -(\\u)144 264 Q F0(the username of the current user)180 264 Q F1(\\v)144 -276 Q F0(the v)180 276 Q(ersion of)-.15 E F1(bash)2.5 E F0 -(\(e.g., 2.00\))2.5 E F1(\\V)144 288 Q F0(the release of)180 288 Q F1 -(bash)2.5 E F0 2.5(,v)C(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 300 Q F0 .115(the current w) -180 300 R .115(orking directory)-.1 F 2.615(,w)-.65 G(ith)-2.615 E/F3 9 -/Times-Bold@0 SF($HOME)2.615 E F0(abbre)2.365 E .116 -(viated with a tilde \(uses the v)-.25 F .116(alue of the)-.25 F F3(PR) -180 312 Q(OMPT_DIR)-.27 E(TRIM)-.36 E F0 -.25(va)2.25 G(riable\)).25 E -F1(\\W)144 324 Q F0(the basename of the current w)180 324 Q -(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F3($HOME)2.5 E F0 -(abbre)2.25 E(viated with a tilde)-.25 E F1(\\!)144 336 Q F0 -(the history number of this command)180 336 Q F1(\\#)144 348 Q F0 -(the command number of this command)180 348 Q F1(\\$)144 360 Q F0 -(if the ef)180 360 Q(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 372 Q F2(nnn) -A F0(the character corresponding to the octal number)180 372 Q F2(nnn) -2.5 E F1(\\\\)144 384 Q F0 2.5(ab)180 384 S(ackslash)-2.5 E F1(\\[)144 -396 Q F0(be)180 396 Q 1.257(gin a sequence of non-printing characters, \ -which could be used to embed a terminal)-.15 F -(control sequence into the prompt)180 408 Q F1(\\])144 420 Q F0 -(end a sequence of non-printing characters)180 420 Q .119 -(The command number and the history number are usually dif)108 436.8 R -.12(ferent: the history number of a command is its)-.25 F .547(position\ - in the history list, which may include commands restored from the hist\ -ory \214le \(see)108 448.8 R F3(HIST)3.046 E(OR)-.162 E(Y)-.315 E F0 -(be-)2.796 E(lo)108 460.8 Q .354(w\), while the command number is the p\ -osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .355 -(cuted during the current).15 F .823(shell session.)108 472.8 R .822 -(After the string is decoded, it is e)5.823 F .822 -(xpanded via parameter e)-.15 F .822(xpansion, command substitution,) --.15 F .682(arithmetic e)108 484.8 R .682(xpansion, and quote remo)-.15 -F -.25(va)-.15 G .682(l, subject to the v).25 F .683(alue of the)-.25 F -F1(pr)3.183 E(omptv)-.18 E(ars)-.1 E F0 .683(shell option \(see the de-) -3.183 F 1.198(scription of the)108 496.8 R F1(shopt)3.698 E F0 1.198 -(command under)3.698 F F3 1.197(SHELL B)3.697 F(UIL)-.09 E 1.197 -(TIN COMMANDS)-.828 F F0(belo)3.447 E 3.697(w\). This)-.25 F 1.197 -(can ha)3.697 F 1.497 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322(side ef) -108 508.8 R .322(fects if escaped portions of the string appear within \ -command substitution or contain characters spe-)-.25 F(cial to w)108 -520.8 Q(ord e)-.1 E(xpansion.)-.15 E/F4 10.95/Times-Bold@0 SF(READLINE) -72 537.6 Q F0 .151 -(This is the library that handles reading input when using an interacti) -108 549.6 R .45 -.15(ve s)-.25 H .15(hell, unless the).15 F F1 -(\255\255noediting)2.65 E F0(option)2.65 E .384(is gi)108 561.6 R -.15 -(ve)-.25 G 2.884(na).15 G 2.884(ts)-2.884 G .384(hell in)-2.884 F -.2 -(vo)-.4 G 2.884(cation. Line).2 F .384 -(editing is also used when using the)2.884 F F12.885 E F0 .385 -(option to the)2.885 F F1 -.18(re)2.885 G(ad).18 E F0 -.2(bu)2.885 G -2.885(iltin. By).2 F(de-)2.885 E -.1(fa)108 573.6 S 1.407 -(ult, the line editing commands are similar to those of Emacs.).1 F -3.906(Av)6.406 G 1.406(i-style line editing interf)-3.906 F 1.406 -(ace is also)-.1 F -.2(av)108 585.6 S 3.35(ailable. Line)-.05 F .85 -(editing can be enabled at an)3.35 F 3.35(yt)-.15 G .85(ime using the) --3.35 F F1 .85(\255o emacs)3.35 F F0(or)3.35 E F1 .85(\255o vi)3.35 F F0 -.85(options to the)3.35 F F1(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E -(\(see)108 597.6 Q F3 .763(SHELL B)3.263 F(UIL)-.09 E .763(TIN COMMANDS) --.828 F F0(belo)3.013 E 3.263(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) --3.263 F 3.263(fl)-.25 G .763 -(ine editing after the shell is running, use the)-3.263 F F1(+o)3.262 E -(emacs)108 609.6 Q F0(or)2.5 E F1(+o vi)2.5 E F0(options to the)2.5 E F1 -(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(Readline Notation)87 626.4 Q -F0 .463(In this section, the Emacs-style notation is used to denote k) -108 638.4 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke) -2.963 G .463(ys are denoted by C\255)-.05 F F2 -.1(ke)C(y)-.2 E F0(,)A -1.153(e.g., C\255n means Control\255N.)108 650.4 R(Similarly)6.153 E(,) --.65 E F2(meta)4.033 E F0 -.1(ke)3.913 G 1.153(ys are denoted by M\255) --.05 F F2 -.1(ke)C(y)-.2 E F0 3.652(,s)C 3.652(oM)-3.652 G 1.152 -(\255x means Meta\255X.)-3.652 F(\(On)6.152 E -.1(ke)108 662.4 S .83 -(yboards without a)-.05 F F2(meta)3.71 E F0 -.1(ke)3.59 G 2.13 -.65 -(y, M)-.05 H.65 E F2(x)A F0 .83(means ESC)3.33 F F2(x)3.33 E F0 3.33 -(,i)C .831(.e., press the Escape k)-3.33 F 1.131 -.15(ey t)-.1 H .831 -(hen the).15 F F2(x)4.101 E F0 -.1(ke)3.861 G 4.631 -.65(y. T)-.05 H -.831(his mak).65 F(es)-.1 E .6(ESC the)108 674.4 R F2 .6(meta pr)3.1 F -(e\214x)-.37 E F0 5.6(.T)C .6(he combination M\255C\255)-5.6 F F2(x)A F0 -.599(means ESC\255Control\255)3.099 F F2(x)A F0 3.099(,o)C 3.099(rp) --3.099 G .599(ress the Escape k)-3.099 F .899 -.15(ey t)-.1 H .599 -(hen hold).15 F(the Control k)108 686.4 Q .3 -.15(ey w)-.1 H -(hile pressing the).15 E F2(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)) -.65 E .595(Readline commands may be gi)108 703.2 R -.15(ve)-.25 G 3.096 -(nn).15 G(umeric)-3.096 E F2(ar)3.426 E(guments)-.37 E F0 3.096(,w).27 G -.596(hich normally act as a repeat count.)-3.096 F(Sometimes,)5.596 E -(ho)108 715.2 Q(we)-.25 E -.15(ve)-.25 G 1.419 -.4(r, i).15 H 3.119(ti) -.4 G 3.119(st)-3.119 G .619(he sign of the ar)-3.119 F .619 -(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) -.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 -(ument to a command that).18 F 2.938(acts in the forw)108 727.2 R 2.938 -(ard direction \(e.g.,)-.1 F F1(kill\255line)5.438 E F0 5.438(\)c)C -2.938(auses that command to act in a backw)-5.438 F 2.938 -(ard direction.)-.1 F(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E -(39)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(1.)108 84 Q .002 +(If the command terminates due to the)144 84 R/F1 9/Times-Bold@0 SF +(SIGINT)2.502 E/F2 9/Times-Roman@0 SF(,)A/F3 10/Times-Bold@0 SF(bash) +2.252 E F0 .003(concludes that the user meant to end the entire)2.502 F +(script, and acts on the)144 96 Q F1(SIGINT)2.5 E F0 +(\(e.g., by running a)2.25 E F1(SIGINT)2.5 E F0(trap or e)2.25 E +(xiting itself\);)-.15 E(2.)108 112.8 Q .289 +(If the command does not terminate due to)144 112.8 R F1(SIGINT)2.788 E +F2(,)A F0 .288(the program handled the)2.538 F F1(SIGINT)2.788 E F0 .288 +(itself and did)2.538 F .728(not treat it as a f)144 124.8 R .728 +(atal signal.)-.1 F .728(In that case,)5.728 F F3(bash)3.228 E F0 .728 +(does not treat)3.228 F F1(SIGINT)3.228 E F0 .728(as a f)2.978 F .728 +(atal signal, either)-.1 F 3.229(,i)-.4 G(n-)-3.229 E .772 +(stead assuming that the)144 136.8 R F1(SIGINT)3.272 E F0 -.1(wa)3.022 G +3.272(su).1 G .771(sed as part of the program')-3.272 F 3.271(sn)-.55 G +.771(ormal operation \(e.g., emacs)-3.271 F .409 +(uses it to abort editing commands\) or deliberately discarded.)144 +148.8 R(Ho)5.409 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F3(bash)3.309 E +F0 .41(will run an)2.91 F 2.91(yt)-.15 G .41(rap set)-2.91 F(on)144 +160.8 Q F1(SIGINT)3.789 E F2(,)A F0 1.289(as it does with an)3.539 F +3.789(yo)-.15 G 1.288(ther trapped signal it recei)-3.789 F -.15(ve)-.25 +G 3.788(sw).15 G 1.288(hile it is w)-3.788 F 1.288(aiting for the fore-) +-.1 F(ground command to complete, for compatibility)144 172.8 Q(.)-.65 E +/F4 10.95/Times-Bold@0 SF(JOB CONTR)72 189.6 Q(OL)-.329 E/F5 10 +/Times-Italic@0 SF -.25(Jo)108 201.6 S 3.368(bc).25 G(ontr)-3.368 E(ol) +-.45 E F0 .868(refers to the ability to selecti)3.878 F -.15(ve)-.25 G +.868(ly stop \().15 F F5(suspend)A F0 3.368(\)t)C .868(he e)-3.368 F +-.15(xe)-.15 G .868(cution of processes and continue \().15 F F5 -.37 +(re)C(-).37 E(sume)108 213.6 Q F0 2.665(\)t)C .165(heir e)-2.665 F -.15 +(xe)-.15 G .165(cution at a later point.).15 F 2.665(Au)5.165 G .165 +(ser typically emplo)-2.665 F .165(ys this f)-.1 F .164 +(acility via an interacti)-.1 F .464 -.15(ve i)-.25 H(nterf).15 E .164 +(ace sup-)-.1 F(plied jointly by the operating system k)108 225.6 Q +(ernel')-.1 E 2.5(st)-.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(ra).15 +G(nd)-2.5 E F3(bash)2.5 E F0(.)A .784(The shell associates a)108 242.4 R +F5(job)5.024 E F0 .784(with each pipeline.)3.514 F .784(It k)5.784 F +.785(eeps a table of currently e)-.1 F -.15(xe)-.15 G .785 +(cuting jobs, which may be).15 F .325(listed with the)108 254.4 R F3 +(jobs)2.825 E F0 2.825(command. When)2.825 F F3(bash)2.825 E F0 .325 +(starts a job asynchronously \(in the)2.825 F F5(bac)3.094 E(kgr)-.2 E +(ound)-.45 E F0 .324(\), it prints a line).77 F(that looks lik)108 266.4 +Q(e:)-.1 E([1] 25647)144 283.2 Q .241(indicating that this job is job n\ +umber 1 and that the process ID of the last process in the pipeline ass\ +ociated)108 300 R .733(with this job is 25647.)108 312 R .732 +(All of the processes in a single pipeline are members of the same job) +5.733 F(.)-.4 E F3(Bash)5.732 E F0(uses)3.232 E(the)108 324 Q F5(job) +4.24 E F0(abstraction as the basis for job control.)2.73 E 1.981 -.8 +(To f)108 340.8 T .382(acilitate the implementation of the user interf) +.7 F .382(ace to job control, the operating system maintains the no-)-.1 +F 1.538(tion of a)108 352.8 R F5(curr)4.038 E 1.538(ent terminal pr)-.37 +F 1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F0 6.537(.M)C 1.537 +(embers of this process group \(processes whose process)-6.537 F .023 +(group ID is equal to the current terminal process group ID\) recei)108 +364.8 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 +(board-generated signals such as).15 F F1(SIG-)2.523 E(INT)108 376.8 Q +F2(.)A F0 1.215(These processes are said to be in the)5.716 F F5(for) +5.685 E -.4(eg)-.37 G -.45(ro).4 G(und).45 E F0(.).77 E F5(Bac)6.795 E +(kgr)-.2 E(ound)-.45 E F0 1.215(processes are those whose process)4.485 +F .145(group ID dif)108 388.8 R .145(fers from the terminal')-.25 F .146 +(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .146 +(board-generated signals.).15 F .146(Only fore-)5.146 F .16 +(ground processes are allo)108 400.8 R .16(wed to read from or)-.25 F +2.66(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F6 +10/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter) +-2.66 F(-)-.2 E 3.051(minal. Background)108 412.8 R .551 +(processes which attempt to read from \(write to when)3.051 F F6 .551 +(stty tostop)3.051 F F0 .552(is in ef)3.052 F .552(fect\) the)-.25 F +.718(terminal are sent a)108 424.8 R F1 .718(SIGTTIN \(SIGTT)3.218 F +(OU\))-.162 E F0 .718(signal by the k)2.968 F(ernel')-.1 E 3.217(st)-.55 +G .717(erminal dri)-3.217 F -.15(ve)-.25 G 1.517 -.4(r, w).15 H .717 +(hich, unless caught, sus-).4 F(pends the process.)108 436.8 Q 1.087 +(If the operating system on which)108 453.6 R F3(bash)3.587 E F0 1.088 +(is running supports job control,)3.588 F F3(bash)3.588 E F0 1.088 +(contains f)3.588 F 1.088(acilities to use it.)-.1 F -.8(Ty)108 465.6 S +.302(ping the).8 F F5(suspend)3.142 E F0 .302(character \(typically) +3.572 F F3(^Z)2.801 E F0 2.801(,C)C .301 +(ontrol-Z\) while a process is running causes that process to be)-2.801 +F 2.142(stopped and returns control to)108 477.6 R F3(bash)4.642 E F0 +7.142(.T)C 2.142(yping the)-7.942 F F5 2.142(delayed suspend)4.992 F F0 +2.143(character \(typically)5.413 F F3(^Y)4.643 E F0 4.643(,C)C +(ontrol-Y\))-4.643 E .021(causes the process to be stopped when it atte\ +mpts to read input from the terminal, and control to be returned)108 +489.6 R(to)108 501.6 Q F3(bash)3.392 E F0 5.892(.T)C .892 +(he user may then manipulate the state of this job, using the)-5.892 F +F3(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17 +(background, the)108 513.6 R F3(fg)2.67 E F0 .17 +(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F3 +(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F3(^Z)2.67 E F0 +(tak)2.67 E .17(es ef-)-.1 F 1.418(fect immediately)108 525.6 R 3.918 +(,a)-.65 G 1.418(nd has the additional side ef)-3.918 F 1.418 +(fect of causing pending output and typeahead to be dis-)-.25 F(carded.) +108 537.6 Q .777(There are a number of w)108 554.4 R .777 +(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F3 +(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 566.4 +Q F5(jobspec)A F0 3.457(\). Job)B(number)3.457 E F5(n)3.817 E F0 .957 +(may be referred to as)3.697 F F3(%n)3.457 E F0 5.957(.A)C .957 +(job may also be referred to using a pre\214x of the)-2.5 F .59(name us\ +ed to start it, or using a substring that appears in its command line.) +108 578.4 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F3(%ce)3.09 E +F0 .59(refers to a)3.09 F .385(stopped job whose command name be)108 +590.4 R .385(gins with)-.15 F F3(ce)2.885 E F0 5.385(.I)C 2.885(fap) +-5.385 G .385(re\214x matches more than one job,)-2.885 F F3(bash)2.885 +E F0 .385(reports an)2.885 F(error)108 602.4 Q 5.194(.U)-.55 G(sing) +-5.194 E F3(%?ce)2.694 E F0 2.694(,o)C 2.694(nt)-2.694 G .194 +(he other hand, refers to an)-2.694 F 2.694(yj)-.15 G .194 +(ob containing the string)-2.694 F F3(ce)2.694 E F0 .194 +(in its command line.)2.694 F .194(If the)5.194 F .306 +(substring matches more than one job,)108 614.4 R F3(bash)2.806 E F0 +.306(reports an error)2.806 F 5.306(.T)-.55 G .306(he symbols)-5.306 F +F3(%%)2.806 E F0(and)2.806 E F3(%+)2.806 E F0 .307(refer to the shell') +2.806 F(s)-.55 E .133(notion of the)108 626.4 R F5(curr)2.833 E .133 +(ent job)-.37 F F0 2.633(,w).23 G .133 +(hich is the last job stopped while it w)-2.633 F .133(as in the fore) +-.1 F .132(ground or started in the back-)-.15 F 2.575(ground. The)108 +638.4 R F5(pr)3.825 E -.15(ev)-.37 G .075(ious job).15 F F0 .075 +(may be referenced using)2.805 F F3<25ad>2.575 E F0 5.075(.I)C 2.575(ft) +-5.075 G .076(here is only a single job,)-2.575 F F3(%+)2.576 E F0(and) +2.576 E F3<25ad>2.576 E F0 .076(can both)2.576 F .317 +(be used to refer to that job)108 650.4 R 5.317(.I)-.4 G 2.817(no)-5.317 +G .317(utput pertaining to jobs \(e.g., the output of the)-2.817 F F3 +(jobs)2.817 E F0 .317(command\), the current)2.817 F .032(job is al)108 +662.4 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F3(+)2.533 E F0 2.533 +(,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F32.533 +E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .033 +(ying job speci-)-.15 F(\214cation\) also refers to the current job)108 +674.4 Q(.)-.4 E .444 +(Simply naming a job can be used to bring it into the fore)108 691.2 R +(ground:)-.15 E F3(%1)2.943 E F0 .443(is a synon)2.943 F .443(ym for) +-.15 F F3 -.63(``)2.943 G .443(fg %1').63 F(')-.63 E F0 2.943(,b)C +(ringing)-2.943 E 1.472(job 1 from the background into the fore)108 +703.2 R 3.972(ground. Similarly)-.15 F(,)-.65 E F3 -.63(``)3.973 G 1.473 +(%1 &').63 F(')-.63 E F0 1.473(resumes job 1 in the background,)3.973 F +(equi)108 715.2 Q -.25(va)-.25 G(lent to).25 E F3 -.63(``)2.5 G(bg %1') +.63 E(')-.63 E F0(.)A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(39)185.955 E 0 Cg EP %%Page: 40 40 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(Commands whose beha)108 84 Q(vior with ar)-.2 E(guments de)-.18 E -(viates from this are noted belo)-.25 E -.65(w.)-.25 G .812 -(When a command is described as)108 100.8 R/F1 10/Times-Italic@0 SF -(killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 -(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .811 -(or possible future retrie)-3.311 F -.25(va)-.25 G 3.311(l\().25 G F1 -(yank-)-3.311 E(ing)108 112.8 Q F0 2.529(\). The)B .029(killed te)2.529 -F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F1 -.029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H -.029(ills cause the te).15 F .029(xt to be accumulated into one unit,) --.15 F .567(which can be yank)108 124.8 R .567(ed all at once.)-.1 F -.567(Commands which do not kill te)5.567 F .567 -(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) -108 136.8 Q/F2 10/Times-Bold@0 SF(Readline Initialization)87 153.6 Q F0 -.091(Readline is customized by putting commands in an initialization \ -\214le \(the)108 165.6 R F1(inputr)2.591 E(c)-.37 E F0 2.591 -(\214le\). The)2.591 F .092(name of this \214le)2.591 F .573(is tak)108 -177.6 R .573(en from the v)-.1 F .573(alue of the)-.25 F/F3 9 -/Times-Bold@0 SF(INPUTRC)3.073 E F0 -.25(va)2.823 G 3.073(riable. If).25 -F .573(that v)3.073 F .573(ariable is unset, the def)-.25 F .573 -(ault is)-.1 F F1(~/.inputr)2.573 E(c)-.37 E F0 5.572(.I).31 G 3.072(ft) --5.572 G(hat)-3.072 E 3.061(\214le does)108 189.6 R .561(not e)3.061 F -.562(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F -F1(/etc/inputr)4.212 E(c)-.37 E F0 5.562(.W).31 G .562 -(hen a program which uses the)-5.562 F .175(readline library starts up,\ - the initialization \214le is read, and the k)108 201.6 R .474 -.15 -(ey b)-.1 H .174(indings and v).15 F .174(ariables are set.)-.25 F .174 -(There are)5.174 F .238(only a fe)108 213.6 R 2.738(wb)-.25 G .238 -(asic constructs allo)-2.738 F .239 -(wed in the readline initialization \214le.)-.25 F .239 -(Blank lines are ignored.)5.239 F .239(Lines be)5.239 F(gin-)-.15 E .554 -(ning with a)108 225.6 R F2(#)3.054 E F0 .554(are comments.)3.054 F .554 -(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F0 .554 -(indicate conditional constructs.)3.054 F .553(Other lines denote)5.553 -F -.1(ke)108 237.6 S 2.5(yb)-.05 G(indings and v)-2.5 E -(ariable settings.)-.25 E .986(The def)108 254.4 R .986(ault k)-.1 F --.15(ey)-.1 G .987(-bindings may be changed with an).15 F F1(inputr) -3.497 E(c)-.37 E F0 3.487(\214le. Other)3.797 F .987 -(programs that use this library may)3.487 F(add their o)108 266.4 Q -(wn commands and bindings.)-.25 E -.15(Fo)108 283.2 S 2.5(re).15 G -(xample, placing)-2.65 E(M\255Control\255u: uni)144 300 Q -.15(ve)-.25 G -(rsal\255ar).15 E(gument)-.18 E(or)108 312 Q(C\255Meta\255u: uni)144 324 -Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 336 Q F1 -(inputr)2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G -(\255C\255u e)-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F1 -(univer)2.58 E(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.011(The follo) -108 352.8 R 1.011(wing symbolic character names are recognized:)-.25 F -F1 -.4(RU)3.511 G(BOUT).4 E F0(,)1.27 E F1(DEL)4.091 E F0(,).53 E F1 -(ESC)4.021 E F0(,).72 E F1(LFD)4.091 E F0(,).28 E F1(NEWLINE)4.21 E F0 -(,).73 E F1(RET)4.14 E F0(,)1.27 E F1(RETURN)108.63 364.8 Q F0(,)1.1 E -F1(SPC)2.83 E F0(,).72 E F1(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 -G(nd)-2.5 E F1 -.5(TA)2.5 G(B).5 E F0(.).27 E .209 -(In addition to command names, readline allo)108 381.6 R .209(ws k)-.25 -F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 -(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) --.1 H(s).15 E(pressed \(a)108 393.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A F2 -(Readline K)87 410.4 Q(ey Bindings)-.25 E F0 .366 -(The syntax for controlling k)108 422.4 R .666 -.15(ey b)-.1 H .366 -(indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366 -(\214le is simple.)3.176 F .366(All that is required is the name of the) -5.366 F .263(command or the te)108 434.4 R .264(xt of a macro and a k) --.15 F .564 -.15(ey s)-.1 H .264(equence to which it should be bound.) -.15 F .264(The name may be speci-)5.264 F .139(\214ed in one of tw)108 -446.4 R 2.638(ow)-.1 G .138(ays: as a symbolic k)-2.738 F .438 -.15 -(ey n)-.1 H .138(ame, possibly with).15 F F1(Meta\255)2.638 E F0(or) -2.638 E F1(Contr)2.638 E(ol\255)-.45 E F0(pre\214x)2.638 E .138 -(es, or as a k)-.15 F .438 -.15(ey s)-.1 H(e-).15 E(quence.)108 458.4 Q -.16(When using the form)108 475.2 R F2 -.1(ke)2.66 G(yname).1 E F0(:)A -F1(function\255name).833 E F0(or)2.66 E F1(macr)2.66 E(o)-.45 E F0(,)A -F1 -.1(ke)2.66 G(yname)-.2 E F0 .161(is the name of a k)2.84 F .461 -.15 -(ey s)-.1 H .161(pelled out in Eng-).15 F 2.5(lish. F)108 487.2 R(or e) --.15 E(xample:)-.15 E(Control-u: uni)144 511.2 Q -.15(ve)-.25 G -(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 523.2 Q -(ard-kill-w)-.1 E(ord)-.1 E(Control-o: "> output")144 535.2 Q .699 -(In the abo)108 552 R .998 -.15(ve ex)-.15 H(ample,).15 E F1(C\255u) -3.038 E F0 .698(is bound to the function)3.448 F F2(uni)3.198 E -.1(ve) --.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M\255DEL)3.878 E F0 .698 -(is bound to the func-)3.728 F(tion)108 564 Q F2(backward\255kill\255w) -2.758 E(ord)-.1 E F0 2.758(,a)C(nd)-2.758 E F1(C\255o)2.598 E F0 .258 -(is bound to run the macro e)2.938 F .259 -(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 -576 Q(xt)-.15 E/F4 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 -(into the line\).)2.5 E .056(In the second form,)108 592.8 R F2("k)2.556 -E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) -2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 -(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 -(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 -(denoting an entire k)108 604.8 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ -ay be speci\214ed by placing the sequence within double quotes.).15 F -(Some)6.284 E .386(GNU Emacs style k)108 616.8 R .686 -.15(ey e)-.1 H -.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 -(xample, b)-.15 F .385(ut the symbolic character names)-.2 F -(are not recognized.)108 628.8 Q("\\C\255u": uni)144 652.8 Q -.15(ve) --.25 G(rsal\255ar).15 E(gument)-.18 E -("\\C\255x\\C\255r": re\255read\255init\255\214le)144 664.8 Q -("\\e[11~": "Function K)144 676.8 Q .3 -.15(ey 1)-.25 H(").15 E .314 -(In this e)108 693.6 R(xample,)-.15 E F1(C\255u)2.654 E F0 .314(is ag) -3.064 F .315(ain bound to the function)-.05 F F2(uni)2.815 E -.1(ve)-.1 -G(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0 -.315(is bound to the func-)3.545 F(tion)108 705.6 Q F2 -.18(re)2.5 G -.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1 -(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F4 -(Function Key 1)2.5 E F0(.)A -(The full set of GNU Emacs style escape sequences is)108 722.4 Q -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(40)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .131 +(The shell learns immediately whene)108 84 R -.15(ve)-.25 G 2.631(raj) +.15 G .131(ob changes state.)-2.631 F(Normally)5.131 E(,)-.65 E/F1 10 +/Times-Bold@0 SF(bash)2.631 E F0 -.1(wa)2.63 G .13 +(its until it is about to print a).1 F .157 +(prompt before reporting changes in a job')108 96 R 2.657(ss)-.55 G .157 +(tatus so as to not interrupt an)-2.657 F 2.658(yo)-.15 G .158 +(ther output.)-2.658 F .158(If the)5.158 F F12.658 E F0 .158 +(option to)2.658 F(the)108 108 Q F1(set)2.648 E F0 -.2(bu)2.648 G .148 +(iltin command is enabled,).2 F F1(bash)2.648 E F0 .148 +(reports such changes immediately)2.648 F 5.147(.A)-.65 G .447 -.15 +(ny t)-5.147 H .147(rap on).15 F/F2 9/Times-Bold@0 SF(SIGCHLD)2.647 E F0 +.147(is e)2.397 F -.15(xe)-.15 G(-).15 E(cuted for each child that e)108 +120 Q(xits.)-.15 E .032(If an attempt to e)108 136.8 R(xit)-.15 E F1 +(bash)2.532 E F0 .032(is made while jobs are stopped \(or)2.532 F 2.533 +(,i)-.4 G 2.533(ft)-2.533 G(he)-2.533 E F1(checkjobs)2.533 E F0 .033 +(shell option has been enabled)2.533 F 1.003(using the)108 148.8 R F1 +(shopt)3.503 E F0 -.2(bu)3.503 G 1.003 +(iltin, running\), the shell prints a w).2 F 1.002 +(arning message, and, if the)-.1 F F1(checkjobs)3.502 E F0 1.002 +(option is en-)3.502 F .955(abled, lists the jobs and their statuses.) +108 160.8 R(The)5.955 E F1(jobs)3.455 E F0 .955 +(command may then be used to inspect their status.)3.455 F .956(If a) +5.956 F .604(second attempt to e)108 172.8 R .604 +(xit is made without an interv)-.15 F .604 +(ening command, the shell does not print another w)-.15 F(arning,)-.1 E +(and an)108 184.8 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E +.644(When the shell is w)108 201.6 R .644 +(aiting for a job or process using the)-.1 F F1(wait)3.145 E F0 -.2(bu) +3.145 G .645(iltin, and job control is enabled,).2 F F1(wait)3.145 E F0 +(will)3.145 E .282(return when the job changes state. The)108 213.6 R F1 +2.782 E F0 .282(option causes)2.782 F F1(wait)2.782 E F0 .282 +(to w)2.782 F .282(ait until the job or process terminates be-)-.1 F +(fore returning.)108 225.6 Q/F3 10.95/Times-Bold@0 SF(PR)72 242.4 Q +(OMPTING)-.329 E F0 .644(When e)108 254.4 R -.15(xe)-.15 G .644 +(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F1(bash)3.144 E +F0 .645(displays the primary prompt)3.145 F F2(PS1)3.145 E F0 .645 +(when it is ready to read a command,)2.895 F .428 +(and the secondary prompt)108 266.4 R F2(PS2)2.928 E F0 .427 +(when it needs more input to complete a command.)2.678 F F1(Bash)5.427 E +F0(displays)2.927 E F2(PS0)2.927 E F0(after)2.677 E .037 +(it reads a command b)108 278.4 R .037(ut before e)-.2 F -.15(xe)-.15 G +.037(cuting it.).15 F F1(Bash)5.037 E F0(displays)2.537 E F2(PS4)2.538 E +F0 .038(as described abo)2.288 F .338 -.15(ve b)-.15 H .038 +(efore tracing each com-).15 F 1.122(mand when the)108 290.4 R F1 +3.622 E F0 1.122(option is enabled.)3.622 F F1(Bash)6.122 E F0(allo) +3.622 E 1.122(ws these prompt strings to be customized by inserting a) +-.25 F(number of backslash-escaped special characters that are decoded \ +as follo)108 302.4 Q(ws:)-.25 E F1(\\a)144 314.4 Q F0 +(an ASCII bell character \(07\))180 314.4 Q F1(\\d)144 326.4 Q F0 +(the date in "W)180 326.4 Q(eekday Month Date" format \(e.g., "T)-.8 E +(ue May 26"\))-.45 E F1(\\D{)144 338.4 Q/F4 10/Times-Italic@0 SF(format) +A F1(})A F0(the)180 350.4 Q F4(format)3.926 E F0 1.426(is passed to) +3.926 F F4(strftime)3.926 E F0 1.427 +(\(3\) and the result is inserted into the prompt string; an)B(empty)180 +362.4 Q F4(format)2.5 E F0 +(results in a locale-speci\214c time representation.)2.5 E +(The braces are required)5 E F1(\\e)144 374.4 Q F0 +(an ASCII escape character \(033\))180 374.4 Q F1(\\h)144 386.4 Q F0 +(the hostname up to the \214rst `.)180 386.4 Q(')-.7 E F1(\\H)144 398.4 +Q F0(the hostname)180 398.4 Q F1(\\j)144 410.4 Q F0 +(the number of jobs currently managed by the shell)180 410.4 Q F1(\\l) +144 422.4 Q F0(the basename of the shell')180 422.4 Q 2.5(st)-.55 G +(erminal de)-2.5 E(vice name)-.25 E F1(\\n)144 434.4 Q F0(ne)180 434.4 Q +(wline)-.25 E F1(\\r)144 446.4 Q F0(carriage return)180 446.4 Q F1(\\s) +144 458.4 Q F0(the name of the shell, the basename of)180 458.4 Q F1($0) +2.5 E F0(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1 +(\\t)144 470.4 Q F0(the current time in 24-hour HH:MM:SS format)180 +470.4 Q F1(\\T)144 482.4 Q F0 +(the current time in 12-hour HH:MM:SS format)180 482.4 Q F1(\\@)144 +494.4 Q F0(the current time in 12-hour am/pm format)180 494.4 Q F1(\\A) +144 506.4 Q F0(the current time in 24-hour HH:MM format)180 506.4 Q F1 +(\\u)144 518.4 Q F0(the username of the current user)180 518.4 Q F1(\\v) +144 530.4 Q F0(the v)180 530.4 Q(ersion of)-.15 E F1(bash)2.5 E F0 +(\(e.g., 2.00\))2.5 E F1(\\V)144 542.4 Q F0(the release of)180 542.4 Q +F1(bash)2.5 E F0 2.5(,v)C(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 554.4 Q F0 .12(the v)180 +554.4 R .119(alue of the)-.25 F F1(PWD)2.619 E F0 .119(shell v)2.619 F +.119(ariable \()-.25 F F1($PWD)A F0 .119(\), with)B F2($HOME)2.619 E F0 +(abbre)2.369 E .119(viated with a tilde \(uses)-.25 F(the v)180 566.4 Q +(alue of the)-.25 E F2(PR)2.5 E(OMPT_DIR)-.27 E(TRIM)-.36 E F0 -.25(va) +2.25 G(riable\)).25 E F1(\\W)144 578.4 Q F0(the basename of)180 578.4 Q +F1($PWD)2.5 E F0 2.5(,w)C(ith)-2.5 E F2($HOME)2.5 E F0(abbre)2.25 E +(viated with a tilde)-.25 E F1(\\!)144 590.4 Q F0 +(the history number of this command)180 590.4 Q F1(\\#)144 602.4 Q F0 +(the command number of this command)180 602.4 Q F1(\\$)144 614.4 Q F0 +(if the ef)180 614.4 Q(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 626.4 Q F4 +(nnn)A F0(the character corresponding to the octal number)180 626.4 Q F4 +(nnn)2.5 E F1(\\\\)144 638.4 Q F0 2.5(ab)180 638.4 S(ackslash)-2.5 E F1 +(\\[)144 650.4 Q F0(be)180 650.4 Q 1.257(gin a sequence of non-printing\ + characters, which could be used to embed a terminal)-.15 F +(control sequence into the prompt)180 662.4 Q F1(\\])144 674.4 Q F0 +(end a sequence of non-printing characters)180 674.4 Q .12 +(The command number and the history number are usually dif)108 691.2 R +.119(ferent: the history number of a command is its)-.25 F .547(positio\ +n in the history list, which may include commands restored from the his\ +tory \214le \(see)108 703.2 R F2(HIST)3.047 E(OR)-.162 E(Y)-.315 E F0 +(be-)2.797 E(lo)108 715.2 Q .354(w\), while the command number is the p\ +osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .354 +(cuted during the current).15 F .822(shell session.)108 727.2 R .822 +(After the string is decoded, it is e)5.822 F .822 +(xpanded via parameter e)-.15 F .823(xpansion, command substitution,) +-.15 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(40)185.955 E 0 +Cg EP %%Page: 41 41 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF<5c43ad>144 84 Q F0(control pre\214x)180 84 Q F1<5c4dad>144 96 Q F0 -(meta pre\214x)180 96 Q F1(\\e)144 108 Q F0(an escape character)180 108 -Q F1(\\\\)144 120 Q F0(backslash)180 120 Q F1(\\")144 132 Q F0 -(literal ")180 132 Q F1<5c08>144 144 Q F0(literal \010)180 144 Q(In add\ -ition to the GNU Emacs style escape sequences, a second set of backslas\ -h escapes is a)108 160.8 Q -.25(va)-.2 G(ilable:).25 E F1(\\a)144 172.8 -Q F0(alert \(bell\))180 172.8 Q F1(\\b)144 184.8 Q F0(backspace)180 -184.8 Q F1(\\d)144 196.8 Q F0(delete)180 196.8 Q F1(\\f)144 208.8 Q F0 -(form feed)180 208.8 Q F1(\\n)144 220.8 Q F0(ne)180 220.8 Q(wline)-.25 E -F1(\\r)144 232.8 Q F0(carriage return)180 232.8 Q F1(\\t)144 244.8 Q F0 -(horizontal tab)180 244.8 Q F1(\\v)144 256.8 Q F0 -.15(ve)180 256.8 S -(rtical tab).15 E F1(\\)144 268.8 Q/F2 10/Times-Italic@0 SF(nnn)A F0 -(the eight-bit character whose v)180 268.8 Q(alue is the octal v)-.25 E -(alue)-.25 E F2(nnn)2.5 E F0(\(one to three digits\))2.5 E F1(\\x)144 -280.8 Q F2(HH)A F0(the eight-bit character whose v)180 280.8 Q -(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0 -(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.142 -(When entering the te)108 297.6 R 1.141(xt of a macro, single or double\ - quotes must be used to indicate a macro de\214nition.)-.15 F .089 -(Unquoted te)108 309.6 R .089(xt is assumed to be a function name.)-.15 -F .09(In the macro body)5.089 F 2.59(,t)-.65 G .09 -(he backslash escapes described abo)-2.59 F -.15(ve)-.15 G(are e)108 -321.6 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G -(ther character in the macro te)-2.5 E(xt, including " and \010.)-.15 E -F1(Bash)108 338.4 Q F0(allo)2.93 E .43(ws the current readline k)-.25 F -.73 -.15(ey b)-.1 H .429(indings to be displayed or modi\214ed with the) -.15 F F1(bind)2.929 E F0 -.2(bu)2.929 G .429(iltin command.).2 F .045 -(The editing mode may be switched during interacti)108 350.4 R .345 -.15 -(ve u)-.25 H .046(se by using the).15 F F12.546 E F0 .046 -(option to the)2.546 F F1(set)2.546 E F0 -.2(bu)2.546 G .046 -(iltin command).2 F(\(see)108 362.4 Q/F3 9/Times-Bold@0 SF(SHELL B)2.5 E -(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1 -(Readline V)87 379.2 Q(ariables)-.92 E F0 .044(Readline has v)108 391.2 -R .043(ariables that can be used to further customize its beha)-.25 F -(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043 -(riable may be set in the).25 F F2(inpu-)2.553 E(tr)108 403.2 Q(c)-.37 E -F0(\214le with a statement of the form)2.81 E F1(set)144 420 Q F2 -(variable\255name value)2.5 E F0(or using the)108 432 Q F1(bind)2.5 E F0 --.2(bu)2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E -(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .79 -(Except where noted, readline v)108 448.8 R .79(ariables can tak)-.25 F -3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1 -(Off)3.29 E F0 .79(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).) -.05 F(Unrecog-)5.79 E .449(nized v)108 460.8 R .448 -(ariable names are ignored.)-.25 F .448(When a v)5.448 F .448(ariable v) --.25 F .448(alue is read, empty or null v)-.25 F .448 -(alues, "on" \(case-insensi-)-.25 F(ti)108 472.8 Q -.15(ve)-.25 G .467 -(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(On) -2.968 E F0 5.468(.A)C .468(ll other v)-5.468 F .468(alues are equi)-.25 -F -.25(va)-.25 G .468(lent to).25 F F1(Off)2.968 E F0 5.468(.T)C .468 -(he v)-5.468 F .468(ariables and their def)-.25 F(ault)-.1 E -.25(va)108 -484.8 S(lues are:).25 E F1(bell\255style \(audible\))108 501.6 Q F0 .011 -(Controls what happens when readline w)144 513.6 R .011 -(ants to ring the terminal bell.)-.1 F .01(If set to)5.01 F F1(none)2.51 -E F0 2.51(,r)C .01(eadline ne)-2.51 F -.15(ve)-.25 G(r).15 E .94 -(rings the bell.)144 525.6 R .94(If set to)5.94 F F1(visible)3.44 E F0 -3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) --.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0(,)A -(readline attempts to ring the terminal')144 537.6 Q 2.5(sb)-.55 G(ell.) --2.5 E F1(bind\255tty\255special\255chars \(On\))108 549.6 Q F0 .056 -(If set to)144 561.6 R F1(On)2.556 E F0 2.556(,r)C .056(eadline attempt\ -s to bind the control characters treated specially by the k)-2.556 F -(ernel')-.1 E 2.555(st)-.55 G(ermi-)-2.555 E(nal dri)144 573.6 Q -.15 -(ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va) --.25 G(lents.).25 E F1(blink\255matching\255par)108 585.6 Q(en \(Off\)) --.18 E F0 .21(If set to)144 597.6 R F1(On)2.71 E F0 2.71(,r)C .21 -(eadline attempts to brie\215y mo)-2.71 F .51 -.15(ve t)-.15 H .21 -(he cursor to an opening parenthesis when a closing).15 F -(parenthesis is inserted.)144 609.6 Q F1(color)108 621.6 Q -(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to) -144 633.6 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, r\ -eadline displays the common pre\214x of the set of possible)-3.015 F -2.935(completions using a dif)144 645.6 R 2.935(ferent color)-.25 F -7.936(.T)-.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.936 -(en from the v)-.1 F 2.936(alue of the)-.25 F F1(LS_COLORS)144 657.6 Q -F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1(color)108 669.6 Q -(ed\255stats \(Off\))-.18 E F0 1.58(If set to)144 681.6 R F1(On)4.08 E -F0 4.08(,r)C 1.579(eadline displays possible completions using dif)-4.08 -F 1.579(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 -693.6 R(color de\214nitions are tak)2.5 E(en from the v)-.1 E -(alue of the)-.25 E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E -(ariable.)-.25 E F1(comment\255begin \(`)108 705.6 Q(`#')-.63 E('\))-.63 -E F0 .884(The string that is inserted when the readline)144 717.6 R F1 -(insert\255comment)3.385 E F0 .885(command is e)3.385 F -.15(xe)-.15 G -3.385(cuted. This).15 F(com-)3.385 E(mand is bound to)144 729.6 Q F1 -(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0 -(in vi command mode.)2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(41)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .683(arithmetic e) +108 84 R .683(xpansion, and quote remo)-.15 F -.25(va)-.15 G .683 +(l, subject to the v).25 F .682(alue of the)-.25 F/F1 10/Times-Bold@0 SF +(pr)3.182 E(omptv)-.18 E(ars)-.1 E F0 .682(shell option \(see the de-) +3.182 F 1.197(scription of the)108 96 R F1(shopt)3.697 E F0 1.197 +(command under)3.697 F/F2 9/Times-Bold@0 SF 1.197(SHELL B)3.697 F(UIL) +-.09 E 1.197(TIN COMMANDS)-.828 F F0(belo)3.448 E 3.698(w\). This)-.25 F +1.198(can ha)3.698 F 1.498 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322 +(side ef)108 108 R .322(fects if escaped portions of the string appear \ +within command substitution or contain characters spe-)-.25 F(cial to w) +108 120 Q(ord e)-.1 E(xpansion.)-.15 E/F3 10.95/Times-Bold@0 SF +(READLINE)72 136.8 Q F0 .15 +(This is the library that handles reading input when using an interacti) +108 148.8 R .451 -.15(ve s)-.25 H .151(hell, unless the).15 F F1 +(\255\255noediting)2.651 E F0(option)2.651 E .385(is gi)108 160.8 R -.15 +(ve)-.25 G 2.885(na).15 G 2.885(ts)-2.885 G .385(hell in)-2.885 F -.2 +(vo)-.4 G 2.885(cation. Line).2 F .385 +(editing is also used when using the)2.885 F F12.884 E F0 .384 +(option to the)2.884 F F1 -.18(re)2.884 G(ad).18 E F0 -.2(bu)2.884 G +2.884(iltin. By).2 F(de-)2.884 E -.1(fa)108 172.8 S 1.406 +(ult, the line editing commands are similar to those of Emacs.).1 F +3.907(Av)6.407 G 1.407(i-style line editing interf)-3.907 F 1.407 +(ace is also)-.1 F -.2(av)108 184.8 S 3.35(ailable. Line)-.05 F .85 +(editing can be enabled at an)3.35 F 3.35(yt)-.15 G .85(ime using the) +-3.35 F F1 .85(\255o emacs)3.35 F F0(or)3.35 E F1 .85(\255o vi)3.35 F F0 +.85(options to the)3.35 F F1(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E +(\(see)108 196.8 Q F2 .762(SHELL B)3.262 F(UIL)-.09 E .762(TIN COMMANDS) +-.828 F F0(belo)3.012 E 3.262(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) +-3.263 F 3.263(fl)-.25 G .763 +(ine editing after the shell is running, use the)-3.263 F F1(+o)3.263 E +(emacs)108 208.8 Q F0(or)2.5 E F1(+o vi)2.5 E F0(options to the)2.5 E F1 +(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(Readline Notation)87 225.6 Q +F0 .463(In this section, the Emacs-style notation is used to denote k) +108 237.6 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke) +2.963 G .463(ys are denoted by C\255)-.05 F/F4 10/Times-Italic@0 SF -.1 +(ke)C(y)-.2 E F0(,)A 1.152(e.g., C\255n means Control\255N.)108 249.6 R +(Similarly)6.152 E(,)-.65 E F4(meta)4.032 E F0 -.1(ke)3.913 G 1.153 +(ys are denoted by M\255)-.05 F F4 -.1(ke)C(y)-.2 E F0 3.653(,s)C 3.653 +(oM)-3.653 G 1.153(\255x means Meta\255X.)-3.653 F(\(On)6.153 E -.1(ke) +108 261.6 S .831(yboards without a)-.05 F F4(meta)3.711 E F0 -.1(ke) +3.591 G 2.131 -.65(y, M)-.05 H.65 E F4(x)A F0 .831(means ESC)3.331 F +F4(x)3.331 E F0 3.331(,i)C .83(.e., press the Escape k)-3.331 F 1.13 +-.15(ey t)-.1 H .83(hen the).15 F F4(x)4.1 E F0 -.1(ke)3.86 G 4.63 -.65 +(y. T)-.05 H .83(his mak).65 F(es)-.1 E .599(ESC the)108 273.6 R F4 .599 +(meta pr)3.099 F(e\214x)-.37 E F0 5.599(.T)C .599 +(he combination M\255C\255)-5.599 F F4(x)A F0 .599 +(means ESC\255Control\255)3.099 F F4(x)A F0 3.099(,o)C 3.099(rp)-3.099 G +.6(ress the Escape k)-3.099 F .9 -.15(ey t)-.1 H .6(hen hold).15 F +(the Control k)108 285.6 Q .3 -.15(ey w)-.1 H(hile pressing the).15 E F4 +(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)).65 E .596 +(Readline commands may be gi)108 302.4 R -.15(ve)-.25 G 3.096(nn).15 G +(umeric)-3.096 E F4(ar)3.426 E(guments)-.37 E F0 3.096(,w).27 G .596 +(hich normally act as a repeat count.)-3.096 F(Sometimes,)5.595 E(ho)108 +314.4 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti).4 G +3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 +(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) +.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 +(ument to a command that).18 F 1.019(acts in the forw)108 326.4 R 1.018 +(ard direction \(e.g.,)-.1 F F1(kill\255line)3.518 E F0 3.518(\)c)C +1.018(auses that command to act in a backw)-3.518 F 1.018 +(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 338.4 Q +(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) +-.25 E -.65(w.)-.25 G .811(When a command is described as)108 355.2 R F4 +(killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 +(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812 +(or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F4 +(yank-)-3.312 E(ing)108 367.2 Q F0 2.529(\). The)B .029(killed te)2.529 +F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F4 +.029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H +.029(ills cause the te).15 F .029(xt to be accumulated into one unit,) +-.15 F .567(which can be yank)108 379.2 R .567(ed all at once.)-.1 F +.567(Commands which do not kill te)5.567 F .567 +(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) +108 391.2 Q F1(Readline Initialization)87 408 Q F0 .091(Readline is cus\ +tomized by putting commands in an initialization \214le \(the)108 420 R +F4(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 F .091 +(name of this \214le)2.591 F .572(is tak)108 432 R .573(en from the v) +-.1 F .573(alue of the)-.25 F F2(INPUTRC)3.073 E F0 -.25(va)2.823 G +3.073(riable. If).25 F .573(that v)3.073 F .573 +(ariable is unset, the def)-.25 F .573(ault is)-.1 F F4(~/.inputr)2.573 +E(c)-.37 E F0 5.573(.I).31 G 3.073(ft)-5.573 G(hat)-3.073 E 3.062 +(\214le does)108 444 R .562(not e)3.062 F .562 +(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F F4 +(/etc/inputr)4.212 E(c)-.37 E F0 5.561(.W).31 G .561 +(hen a program which uses the)-5.561 F .174(readline library starts up,\ + the initialization \214le is read, and the k)108 456 R .475 -.15(ey b) +-.1 H .175(indings and v).15 F .175(ariables are set.)-.25 F .175 +(There are)5.175 F .239(only a fe)108 468 R 2.739(wb)-.25 G .239 +(asic constructs allo)-2.739 F .239 +(wed in the readline initialization \214le.)-.25 F .238 +(Blank lines are ignored.)5.239 F .238(Lines be)5.238 F(gin-)-.15 E .553 +(ning with a)108 480 R F1(#)3.053 E F0 .554(are comments.)3.053 F .554 +(Lines be)5.554 F .554(ginning with a)-.15 F F1($)3.054 E F0 .554 +(indicate conditional constructs.)3.054 F .554(Other lines denote)5.554 +F -.1(ke)108 492 S 2.5(yb)-.05 G(indings and v)-2.5 E(ariable settings.) +-.25 E .987(The def)108 508.8 R .987(ault k)-.1 F -.15(ey)-.1 G .987 +(-bindings may be changed with an).15 F F4(inputr)3.497 E(c)-.37 E F0 +3.487(\214le. Other)3.797 F .987(programs that use this library may) +3.487 F(add their o)108 520.8 Q(wn commands and bindings.)-.25 E -.15 +(Fo)108 537.6 S 2.5(re).15 G(xample, placing)-2.65 E +(M\255Control\255u: uni)144 554.4 Q -.15(ve)-.25 G(rsal\255ar).15 E +(gument)-.18 E(or)108 566.4 Q(C\255Meta\255u: uni)144 578.4 Q -.15(ve) +-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 590.4 Q F4(inputr) +2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e) +-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F4(univer)2.58 E +(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.01(The follo)108 607.2 R +1.011(wing symbolic character names are recognized:)-.25 F F4 -.4(RU) +3.511 G(BOUT).4 E F0(,)1.27 E F4(DEL)4.091 E F0(,).53 E F4(ESC)4.021 E +F0(,).72 E F4(LFD)4.091 E F0(,).28 E F4(NEWLINE)4.211 E F0(,).73 E F4 +(RET)4.141 E F0(,)1.27 E F4(RETURN)108.63 619.2 Q F0(,)1.1 E F4(SPC)2.83 +E F0(,).72 E F4(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G(nd)-2.5 E +F4 -.5(TA)2.5 G(B).5 E F0(.).27 E .209 +(In addition to command names, readline allo)108 636 R .209(ws k)-.25 F +-.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 +(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) +-.1 H(s).15 E(pressed \(a)108 648 Q F4(macr)2.5 E(o)-.45 E F0(\).)A F1 +(Readline K)87 664.8 Q(ey Bindings)-.25 E F0 .366 +(The syntax for controlling k)108 676.8 R .666 -.15(ey b)-.1 H .366 +(indings in the).15 F F4(inputr)2.876 E(c)-.37 E F0 .366 +(\214le is simple.)3.176 F .366(All that is required is the name of the) +5.366 F .264(command or the te)108 688.8 R .264(xt of a macro and a k) +-.15 F .564 -.15(ey s)-.1 H .264(equence to which it should be bound.) +.15 F .263(The name may be speci-)5.264 F .138(\214ed in one of tw)108 +700.8 R 2.638(ow)-.1 G .138(ays: as a symbolic k)-2.738 F .438 -.15 +(ey n)-.1 H .138(ame, possibly with).15 F F4(Meta\255)2.638 E F0(or) +2.638 E F4(Contr)2.638 E(ol\255)-.45 E F0(pre\214x)2.638 E .138 +(es, or as a k)-.15 F .439 -.15(ey s)-.1 H(e-).15 E(quence.)108 712.8 Q +1.542(When using the form)108 729.6 R F1 -.1(ke)4.042 G(yname).1 E F0(:) +A F4(function\255name).833 E F0(or)4.042 E F4(macr)4.042 E(o)-.45 E F0 +(,)A F4 -.1(ke)4.042 G(yname)-.2 E F0 1.542(is the name of a k)4.222 F +1.841 -.15(ey s)-.1 H 1.541(pelled out in).15 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(41)185.955 E 0 Cg EP %%Page: 42 42 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(completion\255display\255width \(\2551\))108 84 Q F0 1.453(The numbe\ -r of screen columns used to display possible matches when performing co\ -mpletion.)144 96 R .193(The v)144 108 R .193(alue is ignored if it is l\ -ess than 0 or greater than the terminal screen width.)-.25 F 2.694(Av) -5.194 G .194(alue of 0 will)-2.944 F -(cause matches to be displayed one per line.)144 120 Q(The def)5 E -(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 132 Q -(e\255case \(Off\))-.18 E F0(If set to)144 144 Q F1(On)2.5 E F0 2.5(,r)C -(eadline performs \214lename matching and completion in a case\255insen\ -siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 -(completion\255map\255case \(Off\))108 156 Q F0 .094(If set to)144 168 R -F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E -(e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093 -(yphens \()-.05 F/F2 10/Times-Italic@0 SFA F0 2.593(\)a)C .093 -(nd underscores)-2.593 F(\()144 180 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G -(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E -.3 -.15(ve \214)-.25 H(lename matching and completion.).15 E F1 -(completion\255pr)108 192 Q(e\214x\255display\255length \(0\))-.18 E F0 -.829(The length in characters of the common pre\214x of a list of possi\ -ble completions that is displayed)144 204 R 1.275 -(without modi\214cation.)144 216 R 1.275(When set to a v)6.275 F 1.274 -(alue greater than zero, common pre\214x)-.25 F 1.274 -(es longer than this)-.15 F -.25(va)144 228 S(lue are replaced with an \ -ellipsis when displaying possible completions.).25 E F1 -(completion\255query\255items \(100\))108 240 Q F0 .529 -(This determines when the user is queried about vie)144 252 R .53 -(wing the number of possible completions gen-)-.25 F .561(erated by the) -144 264 R F1(possible\255completions)3.061 E F0 3.061(command. It)3.061 -F .561(may be set to an)3.061 F 3.06(yi)-.15 G(nte)-3.06 E .56(ger v) --.15 F .56(alue greater than or)-.25 F .782(equal to zero.)144 276 R -.783(If the number of possible completions is greater than or equal to \ -the v)5.782 F .783(alue of this)-.25 F -.25(va)144 288 S .368 -(riable, readline will ask whether or not the user wishes to vie).25 F -2.867(wt)-.25 G .367(hem; otherwise the)-2.867 F 2.867(ya)-.15 G .367 -(re simply)-2.867 F(listed on the terminal.)144 300 Q F1(con)108 312 Q --.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612(If set to)144 324 R F1(On) -3.112 E F0 3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613 -(rt characters with the eighth bit set to an ASCII k).15 F .913 -.15 -(ey s)-.1 H .613(equence by).15 F .541 -(stripping the eighth bit and pre\214xing an escape character \(in ef) -144 336 R .541(fect, using escape as the)-.25 F F2 .541(meta pr)3.041 F -(e-)-.37 E<8c78>144 348 Q F0 2.5(\). The)B(def)2.5 E(ault is)-.1 E F2 -(On)2.5 E F0 2.5(,b)C(ut readline will set it to)-2.7 E F2(Of)2.5 E(f) --.18 E F0(if the locale contains eight-bit characters.)2.5 E F1 -(disable\255completion \(Off\))108 360 Q F0 .038(If set to)144 372 R F1 -(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 -(ord completion.)-.1 F .038 -(Completion characters will be inserted into the)5.038 F(line as if the) -144 384 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 -(.)A F1(echo\255contr)108 396 Q(ol\255characters \(On\))-.18 E F0 1.211 -(When set to)144 408 R F1(On)3.711 E F0 3.711(,o)C 3.711(no)-3.711 G -1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 G 1.21 -(upport it, readline echoes a character)-3.711 F -(corresponding to a signal generated from the k)144 420 Q -.15(ey)-.1 G -(board.).15 E F1(editing\255mode \(emacs\))108 432 Q F0 .141 -(Controls whether readline be)144 444 R .141(gins with a set of k)-.15 F -.441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.642 E F0 -(or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode)5.142 E F0 -(can be set to either)144 456 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E -F0(.)A F1(emacs\255mode\255string \(@\))108 468 Q F0 .518(If the)144 480 -R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 -.25(va)3.018 G -.517(riable is enabled, this string is displayed immediately before the) -.25 F .622 -(last line of the primary prompt when emacs editing mode is acti)144 492 -R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .622(alue is e)-.25 F -.622(xpanded lik)-.15 F 3.122(ea)-.1 G -.1(ke)144 504 S 3.34(yb)-.05 G -.839(inding, so the standard set of meta- and control pre\214x)-3.34 F -.839(es and backslash escape sequences is)-.15 F -.2(av)144 516 S 2.798 -(ailable. Use)-.05 F .298(the \\1 and \\2 escapes to be)2.798 F .298 -(gin and end sequences of non-printing characters, which)-.15 F -(can be used to embed a terminal control sequence into the mode string.) -144 528 Q F1(enable\255brack)108 540 Q(eted\255paste \(On\))-.1 E F0 -1.222(When set to)144 552 R F1(On)3.721 E F0 3.721(,r)C 1.221 -(eadline will con\214gure the terminal in a w)-3.721 F 1.221 -(ay that will enable it to insert each)-.1 F .353 -(paste into the editing b)144 564 R(uf)-.2 E .353(fer as a single strin\ -g of characters, instead of treating each character as if)-.25 F .544 -(it had been read from the k)144 576 R -.15(ey)-.1 G 3.043(board. This) -.15 F .543(can pre)3.043 F -.15(ve)-.25 G .543 -(nt pasted characters from being interpreted as).15 F(editing commands.) -144 588 Q F1(enable\255k)108 600 Q(eypad \(Off\))-.1 E F0 .892 -(When set to)144 612 R F1(On)3.393 E F0 3.393(,r)C .893 -(eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G -.893(pad when it is called.).15 F .893(Some sys-)5.893 F -(tems need this to enable the arro)144 624 Q 2.5(wk)-.25 G -.15(ey)-2.6 -G(s.).15 E F1(enable\255meta\255k)108 636 Q(ey \(On\))-.1 E F0 .64 -(When set to)144 648 R F1(On)3.14 E F0 3.14(,r)C .64 -(eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 -(eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 -(he terminal claims to support).15 F(when it is called.)144 660 Q -(On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H -2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 -(expand\255tilde \(Off\))108 672 Q F0(If set to)144 684 Q F1(On)2.5 E F0 -2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) --.15 E(ord completion.)-.1 E F1(history\255pr)108 696 Q(eser)-.18 E -.1 -(ve)-.1 G(\255point \(Off\)).1 E F0 .552(If set to)144 708 R F1(On)3.052 -E F0 3.052(,t)C .552(he history code attempts to place point at the sam\ -e location on each history line re-)-3.052 F(trie)144 720 Q -.15(ve)-.25 -G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E -F0(or)2.5 E F1(next-history)2.5 E F0(.)A(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(42)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 2.5(English. F)108 +84 R(or e)-.15 E(xample:)-.15 E(Control-u: uni)144 108 Q -.15(ve)-.25 G +(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 120 Q(ard-kill-w) +-.1 E(ord)-.1 E(Control-o: "> output")144 132 Q .698(In the abo)108 +148.8 R .998 -.15(ve ex)-.15 H(ample,).15 E/F1 10/Times-Italic@0 SF +(C\255u)3.038 E F0 .698(is bound to the function)3.448 F/F2 10 +/Times-Bold@0 SF(uni)3.198 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E +F0(,)A F1(M\255DEL)3.878 E F0 .698(is bound to the func-)3.728 F(tion) +108 160.8 Q F2(backward\255kill\255w)2.759 E(ord)-.1 E F0 2.759(,a)C(nd) +-2.759 E F1(C\255o)2.599 E F0 .258(is bound to run the macro e)2.939 F +.258(xpressed on the right hand side \(that is, to)-.15 F(insert the te) +108 172.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 +(into the line\).)2.5 E .055(In the second form,)108 189.6 R F2("k)2.555 +E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.555 E F1(macr) +2.555 E(o)-.45 E F0(,)A F2 -.1(ke)2.555 G(yseq).1 E F0(dif)2.556 E .056 +(fers from)-.25 F F2 -.1(ke)2.556 G(yname).1 E F0(abo)2.556 E .356 -.15 +(ve i)-.15 H 2.556(nt).15 G .056(hat strings)-2.556 F 1.284 +(denoting an entire k)108 201.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ +ay be speci\214ed by placing the sequence within double quotes.).15 F +(Some)6.284 E .385(GNU Emacs style k)108 213.6 R .685 -.15(ey e)-.1 H +.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .386 +(xample, b)-.15 F .386(ut the symbolic character names)-.2 F +(are not recognized.)108 225.6 Q("\\C\255u": uni)144 249.6 Q -.15(ve) +-.25 G(rsal\255ar).15 E(gument)-.18 E +("\\C\255x\\C\255r": re\255read\255init\255\214le)144 261.6 Q +("\\e[11~": "Function K)144 273.6 Q .3 -.15(ey 1)-.25 H(").15 E .315 +(In this e)108 290.4 R(xample,)-.15 E F1(C\255u)2.655 E F0 .315(is ag) +3.065 F .315(ain bound to the function)-.05 F F2(uni)2.815 E -.1(ve)-.1 +G(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0 +.314(is bound to the func-)3.544 F(tion)108 302.4 Q F2 -.18(re)2.5 G +.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1 +(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F3 +(Function Key 1)2.5 E F0(.)A +(The full set of GNU Emacs style escape sequences is)108 319.2 Q F2 +<5c43ad>144 331.2 Q F0(control pre\214x)180 331.2 Q F2<5c4dad>144 343.2 +Q F0(meta pre\214x)180 343.2 Q F2(\\e)144 355.2 Q F0 +(an escape character)180 355.2 Q F2(\\\\)144 367.2 Q F0(backslash)180 +367.2 Q F2(\\")144 379.2 Q F0(literal ")180 379.2 Q F2<5c08>144 391.2 Q +F0(literal \010)180 391.2 Q(In addition to the GNU Emacs style escape s\ +equences, a second set of backslash escapes is a)108 408 Q -.25(va)-.2 G +(ilable:).25 E F2(\\a)144 420 Q F0(alert \(bell\))180 420 Q F2(\\b)144 +432 Q F0(backspace)180 432 Q F2(\\d)144 444 Q F0(delete)180 444 Q F2 +(\\f)144 456 Q F0(form feed)180 456 Q F2(\\n)144 468 Q F0(ne)180 468 Q +(wline)-.25 E F2(\\r)144 480 Q F0(carriage return)180 480 Q F2(\\t)144 +492 Q F0(horizontal tab)180 492 Q F2(\\v)144 504 Q F0 -.15(ve)180 504 S +(rtical tab).15 E F2(\\)144 516 Q F1(nnn)A F0 +(the eight-bit character whose v)180 516 Q(alue is the octal v)-.25 E +(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 +528 Q F1(HH)A F0(the eight-bit character whose v)180 528 Q +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.141 +(When entering the te)108 544.8 R 1.141(xt of a macro, single or double\ + quotes must be used to indicate a macro de\214nition.)-.15 F .09 +(Unquoted te)108 556.8 R .09(xt is assumed to be a function name.)-.15 F +.089(In the macro body)5.089 F 2.589(,t)-.65 G .089 +(he backslash escapes described abo)-2.589 F -.15(ve)-.15 G(are e)108 +568.8 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G +(ther character in the macro te)-2.5 E(xt, including " and \010.)-.15 E +F2(Bash)108 585.6 Q F0(allo)2.929 E .429(ws the current readline k)-.25 +F .729 -.15(ey b)-.1 H .429 +(indings to be displayed or modi\214ed with the).15 F F2(bind)2.93 E F0 +-.2(bu)2.93 G .43(iltin command.).2 F .046 +(The editing mode may be switched during interacti)108 597.6 R .346 -.15 +(ve u)-.25 H .046(se by using the).15 F F22.545 E F0 .045 +(option to the)2.545 F F2(set)2.545 E F0 -.2(bu)2.545 G .045 +(iltin command).2 F(\(see)108 609.6 Q/F4 9/Times-Bold@0 SF(SHELL B)2.5 E +(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 +(Readline V)87 626.4 Q(ariables)-.92 E F0 .043(Readline has v)108 638.4 +R .043(ariables that can be used to further customize its beha)-.25 F +(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043 +(riable may be set in the).25 F F1(inpu-)2.554 E(tr)108 650.4 Q(c)-.37 E +F0(\214le with a statement of the form)2.81 E F2(set)144 667.2 Q F1 +(variable\255name value)2.5 E F0(or using the)108 679.2 Q F2(bind)2.5 E +F0 -.2(bu)2.5 G(iltin command \(see).2 E F4(SHELL B)2.5 E(UIL)-.09 E +(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .79 +(Except where noted, readline v)108 696 R .79(ariables can tak)-.25 F +3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F2(On)3.29 E F0(or)3.29 E F2 +(Off)3.29 E F0 .79(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).) +.05 F(Unrecog-)5.79 E .448(nized v)108 708 R .448 +(ariable names are ignored.)-.25 F .448(When a v)5.448 F .448(ariable v) +-.25 F .448(alue is read, empty or null v)-.25 F .449 +(alues, "on" \(case-insensi-)-.25 F(ti)108 720 Q -.15(ve)-.25 G .468 +(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F2(On) +2.968 E F0 5.468(.A)C .468(ll other v)-5.468 F .468(alues are equi)-.25 +F -.25(va)-.25 G .468(lent to).25 F F2(Off)2.968 E F0 5.468(.T)C .467 +(he v)-5.468 F .467(ariables and their def)-.25 F(ault)-.1 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(42)185.955 E 0 Cg EP %%Page: 43 43 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(history\255size \(unset\))108 84 Q F0 .949 -(Set the maximum number of history entries sa)144 96 R -.15(ve)-.2 G -3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.)-3.448 F .948 -(If set to zero, an)5.948 F 3.448(ye)-.15 G(xisting)-3.598 E .482 -(history entries are deleted and no ne)144 108 R 2.982(we)-.25 G .483 -(ntries are sa)-2.982 F -.15(ve)-.2 G 2.983(d. If).15 F .483(set to a v) -2.983 F .483(alue less than zero, the num-)-.25 F .278 -(ber of history entries is not limited.)144 120 R .277(By def)5.278 F -.277(ault, the number of history entries is set to the v)-.1 F .277 -(alue of)-.25 F(the)144 132 Q F1(HISTSIZE)3.41 E F0 .91(shell v)3.41 F -3.41(ariable. If)-.25 F .911(an attempt is made to set)3.41 F/F2 10 -/Times-Italic@0 SF(history\255size)3.411 E F0 .911(to a non-numeric v) -3.411 F(alue,)-.25 E -(the maximum number of history entries will be set to 500.)144 144 Q F1 -(horizontal\255scr)108 156 Q(oll\255mode \(Off\))-.18 E F0 .449 -(When set to)144 168 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448 -(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448 -(crolling the input horizontally on a)-2.948 F 1.194(single screen line\ - when it becomes longer than the screen width rather than wrapping to a\ - ne)144 180 R(w)-.25 E 2.5(line. This)144 192 R -(setting is automatically enabled for terminals of height 1.)2.5 E F1 -(input\255meta \(Off\))108 204 Q F0 1.062(If set to)144 216 R F1(On) -3.562 E F0 3.562(,r)C 1.061(eadline will enable eight-bit input \(that \ -is, it will not strip the eighth bit from the)-3.562 F .335 -(characters it reads\), re)144 228 R -.05(ga)-.15 G .335 -(rdless of what the terminal claims it can support.).05 F .336(The name) -5.336 F F1(meta\255\215ag)2.836 E F0(is)2.836 E 2.865(as)144 240 S(ynon) --2.865 E .365(ym for this v)-.15 F 2.864(ariable. The)-.25 F(def)2.864 E -.364(ault is)-.1 F F2(Of)2.864 E(f)-.18 E F0 2.864(,b)C .364 -(ut readline will set it to)-3.064 F F2(On)2.864 E F0 .364 -(if the locale contains)2.864 F(eight-bit characters.)144 252 Q F1 -(isear)108 264 Q(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\)) --.63 E F0 .439(The string of characters that should terminate an increm\ -ental search without subsequently e)144 276 R -.15(xe)-.15 G(cut-).15 E -.935(ing the character as a command.)144 288 R .935(If this v)5.935 F -.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934 -(alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 300 Q F2 -(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) -108 312 S(ymap \(emacs\)).1 E F0 2.02(Set the current readline k)144 324 -R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021 -(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.021 -(emacs, emacs\255standar)4.521 F(d,)-.37 E .042 -(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 336 R F0 2.542(,a)C -(nd)-2.542 E F2(vi\255insert)2.832 E F0(.).68 E F2(vi)5.042 E F0 .042 -(is equi)2.542 F -.25(va)-.25 G .042(lent to).25 F F2(vi\255command) -2.541 E F0(;)A F2(emacs)2.541 E F0 .448(is equi)144 348 R -.25(va)-.25 G -.448(lent to).25 F F2(emacs\255standar)2.948 E(d)-.37 E F0 5.448(.T)C -.448(he def)-5.448 F .448(ault v)-.1 F .449(alue is)-.25 F F2(emacs) -3.139 E F0 2.949(;t).27 G .449(he v)-2.949 F .449(alue of)-.25 F F1 -(editing\255mode)2.949 E F0 .449(also af-)2.949 F(fects the def)144 360 -Q(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke)108 372 S -(yseq\255timeout \(500\)).1 E F0 .368(Speci\214es the duration)144 384 R -F2 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 -(ait for a character when reading an ambiguous k)-.1 F .667 -.15(ey s) --.1 H(equence).15 E .524(\(one that can form a complete k)144 396 R .824 --.15(ey s)-.1 H .524(equence using the input read so f).15 F(ar)-.1 E -3.025(,o)-.4 G 3.025(rc)-3.025 G .525(an tak)-3.025 F 3.025(ea)-.1 G -.525(dditional in-)-3.025 F .807(put to complete a longer k)144 408 R -1.106 -.15(ey s)-.1 H 3.306(equence\). If).15 F .806(no input is recei) -3.306 F -.15(ve)-.25 G 3.306(dw).15 G .806(ithin the timeout,)-3.306 F -F2 -.37(re)3.306 G(adline).37 E F0(will)3.306 E .906(use the shorter b) -144 420 R .907(ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407 -(equence. The).15 F -.25(va)3.407 G .907 -(lue is speci\214ed in milliseconds, so a v).25 F .907(alue of)-.25 F -.05(1000 means that)144 432 R F2 -.37(re)2.55 G(adline).37 E F0 .05 -(will w)2.55 F .05(ait one second for additional input.)-.1 F .05 -(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051 -(less than or equal to zero, or to a non-numeric v)144 444 R(alue,)-.25 -E F2 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051 -(ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed) --2.552 E(to decide which k)144 456 Q .3 -.15(ey s)-.1 H -(equence to complete.).15 E F1(mark\255dir)108 468 Q(ectories \(On\)) --.18 E F0(If set to)144 480 Q F1(On)2.5 E F0 2.5(,c)C -(ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) -.15 E F1(mark\255modi\214ed\255lines \(Off\))108 492 Q F0(If set to)144 -504 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) --.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F1 -(*)A F0(\).)A F1(mark\255symlink)108 516 Q(ed\255dir)-.1 E -(ectories \(Off\))-.18 E F0 .175(If set to)144 528 R F1(On)2.675 E F0 -2.675(,c)C .175 -(ompleted names which are symbolic links to directories ha)-2.675 F .475 --.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 540 -Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1 -(match\255hidden\255\214les \(On\))108 552 Q F0 .192(This v)144 564 R -.192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C .192 -(auses readline to match \214les whose names be)-2.692 F .193 -(gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457 -(\214les\) when performing \214lename completion.)144 576 R .456 -(If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.) --2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F -(user in the \214lename to be completed.)144 588 Q F1 -(menu\255complete\255display\255pr)108 600 Q(e\214x \(Off\))-.18 E F0 -1.585(If set to)144 612 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\ -ion displays the common pre\214x of the list of possible completions) --4.085 F(\(which may be empty\) before c)144 624 Q -(ycling through the list.)-.15 E F1(output\255meta \(Off\))108 636 Q F0 -.507(If set to)144 648 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \ -display characters with the eighth bit set directly rather than as a me\ -ta-)-3.007 F(pre\214x)144 660 Q .884(ed escape sequence.)-.15 F .884 -(The def)5.884 F .884(ault is)-.1 F F2(Of)3.384 E(f)-.18 E F0 3.384(,b)C -.884(ut readline will set it to)-3.584 F F2(On)3.384 E F0 .885 -(if the locale contains)3.384 F(eight-bit characters.)144 672 Q F1 -(page\255completions \(On\))108 684 Q F0 .809(If set to)144 696 R F1(On) -3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F2(mor) -3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 -(ager to display a screenful of possible comple-)-3.308 F -(tions at a time.)144 708 Q(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(43)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)108 84 S +(lues are:).25 E/F1 10/Times-Bold@0 SF(bell\255style \(audible\))108 +100.8 Q F0 .01(Controls what happens when readline w)144 112.8 R .011 +(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) +2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E +.94(rings the bell.)144 124.8 R .94(If set to)5.94 F F1(visible)3.44 E +F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25 +(va)-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0 +(,)A(readline attempts to ring the terminal')144 136.8 Q 2.5(sb)-.55 G +(ell.)-2.5 E F1(bind\255tty\255special\255chars \(On\))108 148.8 Q F0 +.055(If set to)144 160.8 R F1(On)2.555 E F0 2.555(,r)C .056(eadline att\ +empts to bind the control characters treated specially by the k)-2.555 F +(ernel')-.1 E 2.556(st)-.55 G(ermi-)-2.556 E(nal dri)144 172.8 Q -.15 +(ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va) +-.25 G(lents.).25 E F1(blink\255matching\255par)108 184.8 Q(en \(Off\)) +-.18 E F0 .21(If set to)144 196.8 R F1(On)2.71 E F0 2.71(,r)C .21 +(eadline attempts to brie\215y mo)-2.71 F .51 -.15(ve t)-.15 H .21 +(he cursor to an opening parenthesis when a closing).15 F +(parenthesis is inserted.)144 208.8 Q F1(color)108 220.8 Q +(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to) +144 232.8 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, r\ +eadline displays the common pre\214x of the set of possible)-3.015 F +2.936(completions using a dif)144 244.8 R 2.936(ferent color)-.25 F +7.936(.T)-.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.935 +(en from the v)-.1 F 2.935(alue of the)-.25 F F1(LS_COLORS)144 256.8 Q +F0(en)3.076 E .577(vironment v)-.4 F 3.077(ariable. If)-.25 F .577 +(there is a color de\214nition in)3.077 F F1($LS_COLORS)3.077 E F0 .577 +(for the cus-)3.077 F .135(tom suf)144 268.8 R .135(\214x "readline-col\ +ored-completion-pre\214x", readline uses this color for the common pre\ +\214x in-)-.25 F(stead of its def)144 280.8 Q(ault.)-.1 E F1(color)108 +292.8 Q(ed\255stats \(Off\))-.18 E F0 1.579(If set to)144 304.8 R F1(On) +4.079 E F0 4.079(,r)C 1.579 +(eadline displays possible completions using dif)-4.079 F 1.58 +(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 316.8 R +(color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the)-.25 +E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1 +(comment\255begin \(`)108 328.8 Q(`#')-.63 E('\))-.63 E F0 .885 +(The string that is inserted when the readline)144 340.8 R F1 +(insert\255comment)3.385 E F0 .884(command is e)3.384 F -.15(xe)-.15 G +3.384(cuted. This).15 F(com-)3.384 E(mand is bound to)144 352.8 Q F1 +(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0 +(in vi command mode.)2.5 E F1(completion\255display\255width \(\2551\)) +108 364.8 Q F0 1.453(The number of screen columns used to display possi\ +ble matches when performing completion.)144 376.8 R .194(The v)144 388.8 +R .193(alue is ignored if it is less than 0 or greater than the termina\ +l screen width.)-.25 F 2.693(Av)5.193 G .193(alue of 0 will)-2.943 F +(cause matches to be displayed one per line.)144 400.8 Q(The def)5 E +(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 412.8 Q +(e\255case \(Off\))-.18 E F0(If set to)144 424.8 Q F1(On)2.5 E F0 2.5 +(,r)C(eadline performs \214lename matching and completion in a case\255\ +insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 +(completion\255map\255case \(Off\))108 436.8 Q F0 .093(If set to)144 +448.8 R F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor) +2.593 E(e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F +.093(yphens \()-.05 F/F2 10/Times-Italic@0 SFA F0 2.593(\)a)C .094 +(nd underscores)-2.593 F(\()144 460.8 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 +G(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E +.3 -.15(ve \214)-.25 H(lename matching and completion.).15 E F1 +(completion\255pr)108 472.8 Q(e\214x\255display\255length \(0\))-.18 E +F0 .829(The length in characters of the common pre\214x of a list of po\ +ssible completions that is displayed)144 484.8 R 1.274 +(without modi\214cation.)144 496.8 R 1.274(When set to a v)6.274 F 1.274 +(alue greater than zero, common pre\214x)-.25 F 1.275 +(es longer than this)-.15 F -.25(va)144 508.8 S(lue are replaced with a\ +n ellipsis when displaying possible completions.).25 E F1 +(completion\255query\255items \(100\))108 520.8 Q F0 .53 +(This determines when the user is queried about vie)144 532.8 R .529 +(wing the number of possible completions gen-)-.25 F .56(erated by the) +144 544.8 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F +.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) +-.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 556.8 R +.783(If the number of possible completions is greater than or equal to \ +the v)5.783 F .782(alue of this)-.25 F -.25(va)144 568.8 S .367 +(riable, readline will ask whether or not the user wishes to vie).25 F +2.868(wt)-.25 G .368(hem; otherwise the)-2.868 F 2.868(ya)-.15 G .368 +(re simply)-2.868 F .673(listed on the terminal.)144 580.8 R 3.173(Az) +5.673 G .673(ero v)-3.173 F .673(alue means readline should ne)-.25 F +-.15(ve)-.25 G 3.172(ra).15 G .672(sk; ne)-3.172 F -.05(ga)-.15 G(ti).05 +E .972 -.15(ve v)-.25 H .672(alues are treated)-.1 F(as zero.)144 592.8 +Q F1(con)108 604.8 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612 +(If set to)144 616.8 R F1(On)3.112 E F0 3.112(,r)C .613 +(eadline will con)-3.112 F -.15(ve)-.4 G .613 +(rt characters with the eighth bit set to an ASCII k).15 F .913 -.15 +(ey s)-.1 H .613(equence by).15 F .541 +(stripping the eighth bit and pre\214xing an escape character \(in ef) +144 628.8 R .541(fect, using escape as the)-.25 F F2 .541(meta pr)3.041 +F(e-)-.37 E<8c78>144 640.8 Q F0 2.5(\). The)B(def)2.5 E(ault is)-.1 E F2 +(On)2.5 E F0 2.5(,b)C(ut readline will set it to)-2.7 E F2(Of)2.5 E(f) +-.18 E F0(if the locale contains eight-bit characters.)2.5 E F1 +(disable\255completion \(Off\))108 652.8 Q F0 .038(If set to)144 664.8 R +F1(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 +(ord completion.)-.1 F .038 +(Completion characters will be inserted into the)5.038 F(line as if the) +144 676.8 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E +F0(.)A F1(echo\255contr)108 688.8 Q(ol\255characters \(On\))-.18 E F0 +1.211(When set to)144 700.8 R F1(On)3.711 E F0 3.711(,o)C 3.711(no) +-3.711 G 1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 +G 1.21(upport it, readline echoes a character)-3.711 F +(corresponding to a signal generated from the k)144 712.8 Q -.15(ey)-.1 +G(board.).15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(43) +185.955 E 0 Cg EP %%Page: 44 44 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(print\255completions\255horizontally \(Off\))108 84 Q F0 .227 -(If set to)144 96 R F1(On)2.727 E F0 2.727(,r)C .227(eadline will displ\ -ay completions with matches sorted horizontally in alphabetical or) --2.727 F(-)-.2 E(der)144 108 Q 2.5(,r)-.4 G(ather than do)-2.5 E -(wn the screen.)-.25 E F1 -2.29 -.18(re v)108 120 T -(ert\255all\255at\255newline \(Off\)).08 E F0 .699(If set to)144 132 R -F1(On)3.199 E F0 3.199(,r)C .699 -(eadline will undo all changes to history lines before returning when) --3.199 F F1(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 144 S -2.686(cuted. By).15 F(def)2.686 E .186 -(ault, history lines may be modi\214ed and retain indi)-.1 F .186 -(vidual undo lists across calls to)-.25 F F1 -.18(re)144 156 S(adline) -.18 E F0(.)A F1(sho)108 168 Q(w\255all\255if\255ambiguous \(Off\))-.1 E -F0 .304(This alters the def)144 180 R .304(ault beha)-.1 F .304 -(vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On) -2.804 E F0 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H -(ore).15 E 1.264(than one possible completion cause the matches to be l\ -isted immediately instead of ringing the)144 192 R(bell.)144 204 Q F1 -(sho)108 216 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346 -(This alters the def)144 228 R 5.346(ault beha)-.1 F 5.345 -(vior of the completion functions in a f)-.2 F 5.345(ashion similar to) --.1 F F1(sho)144 240 Q(w\255all\255if\255ambiguous)-.1 E F0 6.69(.I)C -4.19(fs)-6.69 G 1.691(et to)-4.19 F F1(On)4.191 E F0 4.191(,w)C 1.691 -(ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 -(ore than one possible completion).15 F 1.04(without an)144 252 R 3.54 -(yp)-.15 G 1.039 -(ossible partial completion \(the possible completions don')-3.54 F -3.539(ts)-.18 G 1.039(hare a common pre\214x\))-3.539 F(cause the match\ -es to be listed immediately instead of ringing the bell.)144 264 Q F1 -(sho)108 276 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.021 -(If set to)144 288 R F1(On)3.521 E F0 3.521(,a)C 1.022 -(dd a string to the be)-3.521 F 1.022 -(ginning of the prompt indicating the editing mode: emacs, vi)-.15 F -(command, or vi insertion.)144 300 Q(The mode strings are user)5 E -(-settable \(e.g.,)-.2 E/F2 10/Times-Italic@0 SF -(emacs\255mode\255string)2.5 E F0(\).)A F1 -(skip\255completed\255text \(Off\))108 312 Q F0 .095(If set to)144 324 R -F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095 -(ault completion beha)-.1 F .094 -(vior when inserting a single match into the line.)-.2 F(It')144 336 Q -2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046 -(hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1 -F .046(enabled, readline does not)2.546 F 1.394(insert characters from \ -the completion that match characters after point in the w)144 348 R -1.394(ord being com-)-.1 F(pleted, so portions of the w)144 360 Q -(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1 -(vi\255cmd\255mode\255string \(\(cmd\)\))108 372 Q F0 .517(If the)144 -384 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G -.518(riable is enabled, this string is displayed immediately before the) -.25 F .475(last line of the primary prompt when vi editing mode is acti) -144 396 R .775 -.15(ve a)-.25 H .475(nd in command mode.).15 F .475 -(The v)5.475 F(alue)-.25 E .33(is e)144 408 R .33(xpanded lik)-.15 F -2.83(eak)-.1 G .63 -.15(ey b)-2.93 H .33 -(inding, so the standard set of meta- and control pre\214x).15 F .33 -(es and backslash es-)-.15 F .245(cape sequences is a)144 420 R -.25(va) --.2 G 2.745(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.745 F -.244(gin and end sequences of non-printing)-.15 F(characters, which can\ - be used to embed a terminal control sequence into the mode string.)144 -432 Q F1(vi\255ins\255mode\255string \(\(ins\)\))108 444 Q F0 .517 -(If the)144 456 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 --.25(va)3.017 G .518 +SF(editing\255mode \(emacs\))108 84 Q F0 .141 +(Controls whether readline be)144 96 R .141(gins with a set of k)-.15 F +.441 -.15(ey b)-.1 H .141(indings similar to).15 F/F2 10/Times-Italic@0 +SF(Emacs)2.642 E F0(or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode) +5.142 E F0(can be set to either)144 108 Q F1(emacs)2.5 E F0(or)2.5 E F1 +(vi)2.5 E F0(.)A F1(emacs\255mode\255string \(@\))108 120 Q F0 .518 +(If the)144 132 R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 +-.25(va)3.018 G .517 (riable is enabled, this string is displayed immediately before the).25 -F .186(last line of the primary prompt when vi editing mode is acti)144 -468 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .186(The v) -5.186 F .186(alue is)-.25 F -.15(ex)144 480 S .923(panded lik).15 F -3.423(eak)-.1 G 1.223 -.15(ey b)-3.523 H .924 -(inding, so the standard set of meta- and control pre\214x).15 F .924 -(es and backslash es-)-.15 F .245(cape sequences is a)144 492 R -.25(va) --.2 G 2.745(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.745 F -.244(gin and end sequences of non-printing)-.15 F(characters, which can\ - be used to embed a terminal control sequence into the mode string.)144 -504 Q F1(visible\255stats \(Off\))108 516 Q F0 .846(If set to)144 528 R -F1(On)3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F -3.346(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 -(\(2\) is appended to the \214lename)B -(when listing possible completions.)144 540 Q F1 -(Readline Conditional Constructs)87 556.8 Q F0 .05 -(Readline implements a f)108 568.8 R .05(acility similar in spirit to t\ -he conditional compilation features of the C preprocessor)-.1 F .096 -(which allo)108 580.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .096 -(indings and v).15 F .096 -(ariable settings to be performed as the result of tests.)-.25 F .097 -(There are four parser)5.096 F(directi)108 592.8 Q -.15(ve)-.25 G 2.5 -(su).15 G(sed.)-2.5 E F1($if)108 609.6 Q F0(The)144 609.6 Q F1($if)2.963 -E F0 .463(construct allo)2.963 F .462(ws bindings to be made based on t\ -he editing mode, the terminal being used,)-.25 F -(or the application using readline.)144 621.6 Q(The te)5 E -(xt of the test, after an)-.15 E 2.5(yc)-.15 G(omparison operator)-2.5 E -(,)-.4 E -.15(ex)146.5 633.6 S(tends to the end of the line; unless oth\ -erwise noted, no characters are required to isolate it.).15 E F1(mode) -144 650.4 Q F0(The)180 650.4 Q F1(mode=)3.711 E F0 1.211(form of the) -3.711 F F1($if)3.711 E F0(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711 -(su).15 G 1.211(sed to test whether readline is in emacs or vi)-3.711 F -3.065(mode. This)180 662.4 R .565(may be used in conjunction with the) -3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565 -(command, for instance, to)3.065 F .735(set bindings in the)180 674.4 R -F2(emacs\255standar)3.235 E(d)-.37 E F0(and)3.235 E F2(emacs\255ctlx) -3.235 E F0 -.1(ke)3.235 G .735(ymaps only if readline is starting)-.05 F -(out in emacs mode.)180 686.4 Q F1(term)144 703.2 Q F0(The)180 703.2 Q -F1(term=)3.197 E F0 .696 -(form may be used to include terminal-speci\214c k)3.197 F .996 -.15 -(ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 715.2 R -.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 -(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 -(wo)3.154 G .654(rd on the right side of).1 F(the)180 727.2 Q F1(=)3.232 -E F0 .732(is tested ag)3.232 F .732(ainst both the full name of the ter\ -minal and the portion of the terminal)-.05 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(44)190.395 E 0 Cg EP +F .622(last line of the primary prompt when emacs editing mode is acti) +144 144 R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .622 +(alue is e)-.25 F .622(xpanded lik)-.15 F 3.122(ea)-.1 G -.1(ke)144 156 +S 3.34(yb)-.05 G .839 +(inding, so the standard set of meta- and control pre\214x)-3.34 F .839 +(es and backslash escape sequences is)-.15 F -.2(av)144 168 S 2.798 +(ailable. Use)-.05 F .298(the \\1 and \\2 escapes to be)2.798 F .298 +(gin and end sequences of non-printing characters, which)-.15 F +(can be used to embed a terminal control sequence into the mode string.) +144 180 Q F1(enable\255acti)108 192 Q -.1(ve)-.1 G.1 E +(egion \(On\))-.18 E F0(The)144 204 Q F2(point)3.246 E F0 .746 +(is the current cursor position, and)3.246 F F2(mark)3.246 E F0 .746 +(refers to a sa)3.246 F -.15(ve)-.2 G 3.246(dc).15 G .746 +(ursor position.)-3.246 F .745(The te)5.746 F .745(xt be-)-.15 F .344 +(tween the point and mark is referred to as the)144 216 R F2 -.37(re) +2.844 G(gion)-.03 E F0 5.344(.W)C .344(hen this v)-5.344 F .344 +(ariable is set to)-.25 F F2(On)2.845 E F0 2.845(,r)C .345(eadline al-) +-2.845 F(lo)144 228 Q .098(ws certain commands to designate the re)-.25 +F .098(gion as)-.15 F F2(active)2.598 E F0 5.098(.W)C .098(hen the re) +-5.098 F .098(gion is acti)-.15 F -.15(ve)-.25 G 2.598(,r).15 G .098 +(eadline high-)-2.598 F .628(lights the te)144 240 R .628(xt in the re) +-.15 F .628(gion using the terminal')-.15 F 3.128(ss)-.55 G .628 +(tandout mode.)-3.128 F .628(The acti)5.628 F .928 -.15(ve r)-.25 H -.15 +(eg).15 G .628(ion sho).15 F .629(ws the te)-.25 F(xt)-.15 E .448 +(inserted by brack)144 252 R .448(eted-paste and an)-.1 F 2.948(ym)-.15 +G .448(atching te)-2.948 F .447 +(xt found by incremental and non-incremental his-)-.15 F(tory searches.) +144 264 Q F1(enable\255brack)108 276 Q(eted\255paste \(On\))-.1 E F0 +1.221(When set to)144 288 R F1(On)3.721 E F0 3.721(,r)C 1.221 +(eadline will con\214gure the terminal in a w)-3.721 F 1.221 +(ay that will enable it to insert each)-.1 F .353 +(paste into the editing b)144 300 R(uf)-.2 E .353(fer as a single strin\ +g of characters, instead of treating each character as if)-.25 F .543 +(it had been read from the k)144 312 R -.15(ey)-.1 G 3.043(board. This) +.15 F .543(can pre)3.043 F -.15(ve)-.25 G .544 +(nt pasted characters from being interpreted as).15 F(editing commands.) +144 324 Q F1(enable\255k)108 336 Q(eypad \(Off\))-.1 E F0 .893 +(When set to)144 348 R F1(On)3.393 E F0 3.393(,r)C .893 +(eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G +.893(pad when it is called.).15 F .892(Some sys-)5.893 F +(tems need this to enable the arro)144 360 Q 2.5(wk)-.25 G -.15(ey)-2.6 +G(s.).15 E F1(enable\255meta\255k)108 372 Q(ey \(On\))-.1 E F0 .64 +(When set to)144 384 R F1(On)3.14 E F0 3.14(,r)C .64 +(eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 +(eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 +(he terminal claims to support).15 F(when it is called.)144 396 Q +(On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H +2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 +(expand\255tilde \(Off\))108 408 Q F0(If set to)144 420 Q F1(On)2.5 E F0 +2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) +-.15 E(ord completion.)-.1 E F1(history\255pr)108 432 Q(eser)-.18 E -.1 +(ve)-.1 G(\255point \(Off\)).1 E F0 .553(If set to)144 444 R F1(On)3.052 +E F0 3.052(,t)C .552(he history code attempts to place point at the sam\ +e location on each history line re-)-3.052 F(trie)144 456 Q -.15(ve)-.25 +G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E +F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1(history\255size \(unset\)) +108 468 Q F0 .948(Set the maximum number of history entries sa)144 480 R +-.15(ve)-.2 G 3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.) +-3.448 F .949(If set to zero, an)5.948 F 3.449(ye)-.15 G(xisting)-3.599 +E .483(history entries are deleted and no ne)144 492 R 2.983(we)-.25 G +.483(ntries are sa)-2.983 F -.15(ve)-.2 G 2.983(d. If).15 F .482 +(set to a v)2.983 F .482(alue less than zero, the num-)-.25 F .277 +(ber of history entries is not limited.)144 504 R .277(By def)5.277 F +.278(ault, the number of history entries is set to the v)-.1 F .278 +(alue of)-.25 F(the)144 516 Q F1(HISTSIZE)3.411 E F0 .911(shell v)3.411 +F 3.411(ariable. If)-.25 F .911(an attempt is made to set)3.411 F F2 +(history\255size)3.41 E F0 .91(to a non-numeric v)3.41 F(alue,)-.25 E +(the maximum number of history entries will be set to 500.)144 528 Q F1 +(horizontal\255scr)108 540 Q(oll\255mode \(Off\))-.18 E F0 .448 +(When set to)144 552 R F1(On)2.948 E F0 2.948(,m)C(ak)-2.948 E .448 +(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .449 +(crolling the input horizontally on a)-2.948 F 1.194(single screen line\ + when it becomes longer than the screen width rather than wrapping to a\ + ne)144 564 R(w)-.25 E 2.5(line. This)144 576 R +(setting is automatically enabled for terminals of height 1.)2.5 E F1 +(input\255meta \(Off\))108 588 Q F0 1.061(If set to)144 600 R F1(On) +3.561 E F0 3.561(,r)C 1.062(eadline will enable eight-bit input \(that \ +is, it will not strip the eighth bit from the)-3.561 F .336 +(characters it reads\), re)144 612 R -.05(ga)-.15 G .335 +(rdless of what the terminal claims it can support.).05 F .335(The name) +5.335 F F1(meta\255\215ag)2.835 E F0(is)2.835 E 2.864(as)144 624 S(ynon) +-2.864 E .364(ym for this v)-.15 F 2.864(ariable. The)-.25 F(def)2.864 E +.364(ault is)-.1 F F2(Of)2.864 E(f)-.18 E F0 2.864(,b)C .364 +(ut readline will set it to)-3.064 F F2(On)2.864 E F0 .365 +(if the locale contains)2.865 F(eight-bit characters.)144 636 Q F1 +(isear)108 648 Q(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\)) +-.63 E F0 .439(The string of characters that should terminate an increm\ +ental search without subsequently e)144 660 R -.15(xe)-.15 G(cut-).15 E +.934(ing the character as a command.)144 672 R .935(If this v)5.935 F +.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.435(nav).15 G .935 +(alue, the characters)-3.685 F F2(ESC)3.435 E F0(and)144 684 Q F2 +(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) +108 696 S(ymap \(emacs\)).1 E F0 2.021(Set the current readline k)144 +708 R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021 +(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.02 +(emacs, emacs\255standar)4.52 F(d,)-.37 E .041 +(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 720 R F0 2.542(,a)C +(nd)-2.542 E F2(vi\255insert)2.832 E F0(.).68 E F2(vi)5.042 E F0 .042 +(is equi)2.542 F -.25(va)-.25 G .042(lent to).25 F F2(vi\255command) +2.542 E F0(;)A F2(emacs)2.542 E F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(44)185.955 E 0 Cg EP %%Page: 45 45 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -(name before the \214rst)180 84 Q/F1 10/Times-Bold@0 SF2.5 E F0 5 -(.T)C(his allo)-5 E(ws)-.25 E/F2 10/Times-Italic@0 SF(sun)2.84 E F0 -(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.84 E -F0 2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 100.8 S(rsion).1 E F0 -(The)180 112.8 Q F1 -.1(ve)3.108 G(rsion).1 E F0 .608 -(test may be used to perform comparisons ag)3.108 F .609 -(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 124.8 Q F1 --.1(ve)2.772 G(rsion).1 E F0 -.15(ex)2.772 G .272 -(pands to the current readline v).15 F 2.771(ersion. The)-.15 F .271 -(set of comparison operators in-)2.771 F(cludes)180 136.8 Q F1(=)3.063 E -F0 3.063(,\()C(and)-3.063 E F1(==)3.063 E F0(\),)A F1(!=)3.063 E F0(,)A -F1(<=)3.063 E F0(,)A F1(>=)3.063 E F0(,)A F1(<)3.063 E F0 3.063(,a)C(nd) --3.063 E F1(>)3.064 E F0 5.564(.T)C .564(he v)-5.564 F .564 -(ersion number supplied on the right side)-.15 F .318 -(of the operator consists of a major v)180 148.8 R .318(ersion number) --.15 F 2.818(,a)-.4 G 2.818(no)-2.818 G .318 -(ptional decimal point, and an op-)-2.818 F .1(tional minor v)180 160.8 -R .1(ersion \(e.g.,)-.15 F F1(7.1)2.6 E F0 .1(\). If the minor v)B .101 -(ersion is omitted, it is assumed to be)-.15 F F1(0)2.601 E F0 5.101(.T) -C(he)-5.101 E .06(operator may be separated from the string)180 172.8 R -F1 -.1(ve)2.56 G(rsion).1 E F0 .06(and from the v)2.56 F .06 -(ersion number ar)-.15 F(gument)-.18 E(by whitespace.)180 184.8 Q F1 -(application)144 201.6 Q F0(The)180 213.6 Q F1(application)3.003 E F0 -.503(construct is used to include application-speci\214c settings.)3.003 -F .503(Each program)5.503 F .114(using the readline library sets the)180 -225.6 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 -(nd an initialization \214le can test for a)-2.614 F .5(particular v)180 -237.6 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15 -(ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397 -(ci\214c program.)180 249.6 R -.15(Fo)5.397 G 2.896(ri).15 G .396 -(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 -(ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 261.6 -Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 285.6 Q F0 -(Bash)2.5 E 2.5(#Q)180 297.6 S(uote the current or pre)-2.5 E(vious w) --.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 309.6 Q F1($endif)180 -321.6 Q F2(variable)144 338.4 Q F0(The)180 350.4 Q F2(variable)3.776 E -F0 1.276(construct pro)3.776 F 1.276 -(vides simple equality tests for readline v)-.15 F 1.277(ariables and v) --.25 F(alues.)-.25 E .08(The permitted comparison operators are)180 -362.4 R F2(=)2.579 E F0(,)A F2(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F2 -(!=)2.579 E F0 5.079(.T)C .079(he v)-5.079 F .079 -(ariable name must be sepa-)-.25 F .98(rated from the comparison operat\ -or by whitespace; the operator may be separated from)180 374.4 R .13 -(the v)180 386.4 R .13(alue on the right hand side by whitespace.)-.25 F -.129(Both string and boolean v)5.129 F .129(ariables may be)-.25 F -(tested. Boolean v)180 398.4 Q(ariables must be tested ag)-.25 E -(ainst the v)-.05 E(alues)-.25 E F2(on)2.5 E F0(and)2.5 E F2(of)2.5 E(f) --.18 E F0(.)A F1($endif)108 415.2 Q F0(This command, as seen in the pre) -144 415.2 Q(vious e)-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0 -(command.)2.5 E F1($else)108 432 Q F0(Commands in this branch of the)144 -432 Q F1($if)2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15 -(xe)-.15 G(cuted if the test f).15 E(ails.)-.1 E F1($include)108 448.8 Q -F0 .356(This directi)144 460.8 R .656 -.15(ve t)-.25 H(ak).15 E .356 -(es a single \214lename as an ar)-.1 F .357 -(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) -144 472.8 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 --.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1 -($include)144 496.8 Q F2(/etc/inputr)5.833 E(c)-.37 E F1(Sear)87 513.6 Q -(ching)-.18 E F0 .835(Readline pro)108 525.6 R .835 -(vides commands for searching through the command history \(see)-.15 F -/F3 9/Times-Bold@0 SF(HIST)3.334 E(OR)-.162 E(Y)-.315 E F0(belo)3.084 E -.834(w\) for lines)-.25 F(containing a speci\214ed string.)108 537.6 Q -(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E -(emental)-.37 E F0(and)3.01 E F2(non-incr)2.86 E(emental)-.37 E F0(.).51 -E .697(Incremental searches be)108 554.4 R .697 -(gin before the user has \214nished typing the search string.)-.15 F -.698(As each character of the)5.698 F .113 -(search string is typed, readline displays the ne)108 566.4 R .112 -(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 -E 5.112(.A)-.55 G(n)-5.112 E .542 -(incremental search requires only as man)108 578.4 R 3.042(yc)-.15 G -.542(haracters as needed to \214nd the desired history entry)-3.042 F -5.542(.T)-.65 G .542(he char)-5.542 F(-)-.2 E .224 -(acters present in the v)108 590.4 R .224(alue of the)-.25 F F1(isear) -2.724 E(ch-terminators)-.18 E F0 -.25(va)2.724 G .224 -(riable are used to terminate an incremental search.).25 F .66 -(If that v)108 602.4 R .66(ariable has not been assigned a v)-.25 F .66 -(alue the Escape and Control-J characters will terminate an incre-)-.25 -F .097(mental search.)108 614.4 R .096(Control-G will abort an incremen\ -tal search and restore the original line.)5.097 F .096 -(When the search is)5.096 F(terminated, the history entry containing th\ -e search string becomes the current line.)108 626.4 Q 2.938 -.8(To \214) -108 643.2 T 1.339(nd other matching entries in the history list, type C\ -ontrol-S or Control-R as appropriate.).8 F 1.339(This will)6.339 F .675 -(search backw)108 655.2 R .675(ard or forw)-.1 F .675 -(ard in the history for the ne)-.1 F .674 -(xt entry matching the search string typed so f)-.15 F(ar)-.1 E 5.674 -(.A)-.55 G -.15(ny)-5.674 G .174(other k)108 667.2 R .474 -.15(ey s)-.1 -H .174 -(equence bound to a readline command will terminate the search and e).15 -F -.15(xe)-.15 G .175(cute that command.).15 F -.15(Fo)5.175 G(r).15 E -.541(instance, a)108 679.2 R F2(ne)3.041 E(wline)-.15 E F0 .541 -(will terminate the search and accept the line, thereby e)3.041 F -.15 -(xe)-.15 G .54(cuting the command from the).15 F(history list.)108 691.2 -Q .653(Readline remembers the last incremental search string.)108 708 R -.653(If tw)5.653 F 3.153(oC)-.1 G .653(ontrol-Rs are typed without an) --3.153 F 3.153(yi)-.15 G(nterv)-3.153 E(en-)-.15 E -(ing characters de\214ning a ne)108 720 Q 2.5(ws)-.25 G -(earch string, an)-2.5 E 2.5(yr)-.15 G(emembered search string is used.) --2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(45)190.395 E 0 Cg -EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .449(is equi)144 +84 R -.25(va)-.25 G .449(lent to).25 F/F1 10/Times-Italic@0 SF +(emacs\255standar)2.949 E(d)-.37 E F0 5.449(.T)C .449(he def)-5.449 F +.449(ault v)-.1 F .449(alue is)-.25 F F1(emacs)3.139 E F0 2.948(;t).27 G +.448(he v)-2.948 F .448(alue of)-.25 F/F2 10/Times-Bold@0 SF +(editing\255mode)2.948 E F0 .448(also af-)2.948 F(fects the def)144 96 Q +(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F2 -.1(ke)108 108 S +(yseq\255timeout \(500\)).1 E F0 .367(Speci\214es the duration)144 120 R +F1 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 +(ait for a character when reading an ambiguous k)-.1 F .668 -.15(ey s) +-.1 H(equence).15 E .525(\(one that can form a complete k)144 132 R .825 +-.15(ey s)-.1 H .524(equence using the input read so f).15 F(ar)-.1 E +3.024(,o)-.4 G 3.024(rc)-3.024 G .524(an tak)-3.024 F 3.024(ea)-.1 G +.524(dditional in-)-3.024 F .806(put to complete a longer k)144 144 R +1.106 -.15(ey s)-.1 H 3.306(equence\). If).15 F .806(no input is recei) +3.306 F -.15(ve)-.25 G 3.306(dw).15 G .807(ithin the timeout,)-3.306 F +F1 -.37(re)3.307 G(adline).37 E F0(will)3.307 E .907(use the shorter b) +144 156 R .907(ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407 +(equence. The).15 F -.25(va)3.407 G .907 +(lue is speci\214ed in milliseconds, so a v).25 F .906(alue of)-.25 F +.05(1000 means that)144 168 R F1 -.37(re)2.55 G(adline).37 E F0 .05 +(will w)2.55 F .05(ait one second for additional input.)-.1 F .05 +(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051 +(less than or equal to zero, or to a non-numeric v)144 180 R(alue,)-.25 +E F1 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051 +(ait until another k)-.1 F .351 -.15(ey i)-.1 H 2.551(sp).15 G(ressed) +-2.551 E(to decide which k)144 192 Q .3 -.15(ey s)-.1 H +(equence to complete.).15 E F2(mark\255dir)108 204 Q(ectories \(On\)) +-.18 E F0(If set to)144 216 Q F2(On)2.5 E F0 2.5(,c)C +(ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) +.15 E F2(mark\255modi\214ed\255lines \(Off\))108 228 Q F0(If set to)144 +240 Q F2(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) +-.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F2 +(*)A F0(\).)A F2(mark\255symlink)108 252 Q(ed\255dir)-.1 E +(ectories \(Off\))-.18 E F0 .175(If set to)144 264 R F2(On)2.675 E F0 +2.675(,c)C .175 +(ompleted names which are symbolic links to directories ha)-2.675 F .475 +-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 276 +Q(alue of)-.25 E F2(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F2 +(match\255hidden\255\214les \(On\))108 288 Q F0 .193(This v)144 300 R +.193(ariable, when set to)-.25 F F2(On)2.693 E F0 2.693(,c)C .192 +(auses readline to match \214les whose names be)-2.693 F .192 +(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E .456 +(\214les\) when performing \214lename completion.)144 312 R .456 +(If set to)5.456 F F2(Off)2.956 E F0 2.956(,t)C .456(he leading `.) +-2.956 F 2.956('m)-.7 G .457(ust be supplied by the)-2.956 F +(user in the \214lename to be completed.)144 324 Q F2 +(menu\255complete\255display\255pr)108 336 Q(e\214x \(Off\))-.18 E F0 +1.586(If set to)144 348 R F2(On)4.086 E F0 4.086(,m)C 1.585(enu complet\ +ion displays the common pre\214x of the list of possible completions) +-4.086 F(\(which may be empty\) before c)144 360 Q +(ycling through the list.)-.15 E F2(output\255meta \(Off\))108 372 Q F0 +.506(If set to)144 384 R F2(On)3.006 E F0 3.006(,r)C .507(eadline will \ +display characters with the eighth bit set directly rather than as a me\ +ta-)-3.006 F(pre\214x)144 396 Q .885(ed escape sequence.)-.15 F .884 +(The def)5.884 F .884(ault is)-.1 F F1(Of)3.384 E(f)-.18 E F0 3.384(,b)C +.884(ut readline will set it to)-3.584 F F1(On)3.384 E F0 .884 +(if the locale contains)3.384 F(eight-bit characters.)144 408 Q F2 +(page\255completions \(On\))108 420 Q F0 .808(If set to)144 432 R F2(On) +3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F1(mor) +3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 +(ager to display a screenful of possible comple-)-3.308 F +(tions at a time.)144 444 Q F2 +(print\255completions\255horizontally \(Off\))108 456 Q F0 .228 +(If set to)144 468 R F2(On)2.727 E F0 2.727(,r)C .227(eadline will disp\ +lay completions with matches sorted horizontally in alphabetical or) +-2.727 F(-)-.2 E(der)144 480 Q 2.5(,r)-.4 G(ather than do)-2.5 E +(wn the screen.)-.25 E F2 -2.29 -.18(re v)108 492 T +(ert\255all\255at\255newline \(Off\)).08 E F0 .698(If set to)144 504 R +F2(On)3.198 E F0 3.198(,r)C .699 +(eadline will undo all changes to history lines before returning when) +-3.198 F F2(accept\255line)3.199 E F0(is)3.199 E -.15(exe)144 516 S +2.686(cuted. By).15 F(def)2.686 E .186 +(ault, history lines may be modi\214ed and retain indi)-.1 F .186 +(vidual undo lists across calls to)-.25 F F2 -.18(re)144 528 S(adline) +.18 E F0(.)A F2(sho)108 540 Q(w\255all\255if\255ambiguous \(Off\))-.1 E +F0 .303(This alters the def)144 552 R .303(ault beha)-.1 F .304 +(vior of the completion functions.)-.2 F .304(If set to)5.304 F F2(On) +2.804 E F0 2.804(,w)C .304(ords which ha)-2.904 F .604 -.15(ve m)-.2 H +(ore).15 E 1.264(than one possible completion cause the matches to be l\ +isted immediately instead of ringing the)144 564 R(bell.)144 576 Q F2 +(sho)108 588 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.345 +(This alters the def)144 600 R 5.345(ault beha)-.1 F 5.345 +(vior of the completion functions in a f)-.2 F 5.346(ashion similar to) +-.1 F F2(sho)144 612 Q(w\255all\255if\255ambiguous)-.1 E F0 6.691(.I)C +4.191(fs)-6.691 G 1.691(et to)-4.191 F F2(On)4.191 E F0 4.191(,w)C 1.691 +(ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 +(ore than one possible completion).15 F 1.039(without an)144 624 R 3.539 +(yp)-.15 G 1.039 +(ossible partial completion \(the possible completions don')-3.539 F +3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ +s to be listed immediately instead of ringing the bell.)144 636 Q F2 +(sho)108 648 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.022 +(If set to)144 660 R F2(On)3.522 E F0 3.522(,a)C 1.022 +(dd a string to the be)-3.522 F 1.021 +(ginning of the prompt indicating the editing mode: emacs, vi)-.15 F +(command, or vi insertion.)144 672 Q(The mode strings are user)5 E +(-settable \(e.g.,)-.2 E F1(emacs\255mode\255string)2.5 E F0(\).)A F2 +(skip\255completed\255text \(Off\))108 684 Q F0 .094(If set to)144 696 R +F2(On)2.594 E F0 2.594(,t)C .095(his alters the def)-2.594 F .095 +(ault completion beha)-.1 F .095 +(vior when inserting a single match into the line.)-.2 F(It')144 708 Q +2.546(so)-.55 G .046(nly acti)-2.546 F .346 -.15(ve w)-.25 H .046 +(hen performing completion in the middle of a w).15 F 2.545(ord. If)-.1 +F .045(enabled, readline does not)2.545 F 3.275(insert characters from \ +the completion that match characters after point in the w)144 720 R +3.275(ord being)-.1 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(45)185.955 E 0 Cg EP %%Page: 46 46 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .567(Non-incremen\ -tal searches read the entire search string before starting to search fo\ -r matching history lines.)108 84 R(The search string may be typed by th\ -e user or be part of the contents of the current line.)108 96 Q/F1 10 -/Times-Bold@0 SF(Readline Command Names)87 112.8 Q F0 1.391(The follo) -108 124.8 R 1.391 -(wing is a list of the names of the commands and the def)-.25 F 1.391 -(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F -3.892(ya)-.15 G(re)-3.892 E 2.622(bound. Command)108 136.8 R .122 -(names without an accompan)2.622 F .122(ying k)-.15 F .421 -.15(ey s)-.1 -H .121(equence are unbound by def).15 F 2.621(ault. In)-.1 F .121 -(the follo)2.621 F(wing)-.25 E(descriptions,)108 148.8 Q/F2 10 -/Times-Italic@0 SF(point)3.41 E F0 .91 -(refers to the current cursor position, and)3.41 F F2(mark)3.411 E F0 -.911(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.411(db).15 G -3.411(yt)-3.411 G(he)-3.411 E F1(set\255mark)108 160.8 Q F0 2.5 -(command. The)2.5 F(te)2.5 E -(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) -2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 177.6 Q(or Mo)-.25 E(ving)-.1 -E(beginning\255of\255line \(C\255a\))108 189.6 Q F0(Mo)144 201.6 Q .3 --.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 -(end\255of\255line \(C\255e\))108 213.6 Q F0(Mo)144 225.6 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 -237.6 S(rward\255char \(C\255f\)).25 E F0(Mo)144 249.6 Q .3 -.15(ve f) --.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 -(backward\255char \(C\255b\))108 261.6 Q F0(Mo)144 273.6 Q .3 -.15(ve b) --.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 285.6 S(rward\255w) -.25 E(ord \(M\255f\))-.1 E F0(Mo)144 297.6 Q .823 -.15(ve f)-.15 H(orw) -.15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W) --.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F -(ters and digits\).)144 309.6 Q F1(backward\255w)108 321.6 Q -(ord \(M\255b\))-.1 E F0(Mo)144 333.6 Q 1.71 -.15(ve b)-.15 H 1.41 -(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 -(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F -(characters \(letters and digits\).)144 345.6 Q F1(shell\255f)108 357.6 -Q(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 369.6 Q .784 -.15(ve f)-.15 H -(orw).15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984 -(ord. W)-.1 F .484(ords are delimited by non-quoted shell metacharac-) --.8 F(ters.)144 381.6 Q F1(shell\255backward\255w)108 393.6 Q(ord)-.1 E -F0(Mo)144 405.6 Q .908 -.15(ve b)-.15 H .609 -(ack to the start of the current or pre).15 F .609(vious w)-.25 F 3.109 -(ord. W)-.1 F .609(ords are delimited by non-quoted shell)-.8 F -(metacharacters.)144 417.6 Q F1(pr)108 429.6 Q -.15(ev)-.18 G -(ious\255scr).15 E(een\255line)-.18 E F0 .891(Attempt to mo)144 441.6 R -1.191 -.15(ve p)-.15 H .891(oint to the same ph).15 F .891 -(ysical screen column on the pre)-.05 F .89(vious ph)-.25 F .89 -(ysical screen line.)-.05 F .87(This will not ha)144 453.6 R 1.17 -.15 -(ve t)-.2 H .87(he desired ef).15 F .87 -(fect if the current Readline line does not tak)-.25 F 3.37(eu)-.1 G -3.37(pm)-3.37 G .87(ore than one)-3.37 F(ph)144 465.6 Q(ysical line or \ -if point is not greater than the length of the prompt plus the screen w\ -idth.)-.05 E F1(next\255scr)108 477.6 Q(een\255line)-.18 E F0 .638 -(Attempt to mo)144 489.6 R .938 -.15(ve p)-.15 H .638 -(oint to the same ph).15 F .637(ysical screen column on the ne)-.05 F -.637(xt ph)-.15 F .637(ysical screen line. This)-.05 F .008(will not ha) -144 501.6 R .309 -.15(ve t)-.2 H .009(he desired ef).15 F .009 -(fect if the current Readline line does not tak)-.25 F 2.509(eu)-.1 G -2.509(pm)-2.509 G .009(ore than one ph)-2.509 F(ysical)-.05 E .772(line\ - or if the length of the current Readline line is not greater than the \ -length of the prompt plus)144 513.6 R(the screen width.)144 525.6 Q F1 -(clear\255display \(M\255C\255l\))108 537.6 Q F0 1.498 -(Clear the screen and, if possible, the terminal')144 549.6 R 3.999(ss) --.55 G 1.499(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.999(,t)-.4 G -1.499(hen redra)-3.999 F 3.999(wt)-.15 G 1.499(he current line,)-3.999 F -(lea)144 561.6 Q(ving the current line at the top of the screen.)-.2 E -F1(clear\255scr)108 573.6 Q(een \(C\255l\))-.18 E F0 1.36 -(Clear the screen, then redra)144 585.6 R 3.86(wt)-.15 G 1.36 -(he current line, lea)-3.86 F 1.36 -(ving the current line at the top of the screen.)-.2 F -.4(Wi)144 597.6 -S(th an ar).4 E -(gument, refresh the current line without clearing the screen.)-.18 E F1 --.18(re)108 609.6 S(draw\255curr).18 E(ent\255line)-.18 E F0 -(Refresh the current line.)144 621.6 Q F1(Commands f)87 638.4 Q -(or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108 -650.4 Q(n\))-.15 E F0 .158(Accept the line re)144 662.4 R -.05(ga)-.15 G -.158(rdless of where the cursor is.).05 F .158 -(If this line is non-empty)5.158 F 2.659(,a)-.65 G .159 -(dd it to the history list)-2.659 F .699(according to the state of the) -144 674.4 R/F3 9/Times-Bold@0 SF(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va) -2.949 G 3.199(riable. If).25 F .699 -(the line is a modi\214ed history line, then)3.199 F -(restore the history line to its original state.)144 686.4 Q F1(pr)108 -698.4 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 -(Fetch the pre)144 710.4 Q(vious command from the history list, mo)-.25 -E(ving back in the list.)-.15 E(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(46)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(completed, so portions of the w)144 84 Q(ord follo)-.1 E +(wing the cursor are not duplicated.)-.25 E/F1 10/Times-Bold@0 SF +(vi\255cmd\255mode\255string \(\(cmd\)\))108 96 Q F0 .518(If the)144 108 +R/F2 10/Times-Italic@0 SF(show\255mode\255in\255pr)3.018 E(ompt)-.45 E +F0 -.25(va)3.018 G .517 +(riable is enabled, this string is displayed immediately before the).25 +F .475(last line of the primary prompt when vi editing mode is acti)144 +120 R .775 -.15(ve a)-.25 H .476(nd in command mode.).15 F .476(The v) +5.476 F(alue)-.25 E .33(is e)144 132 R .33(xpanded lik)-.15 F 2.83(eak) +-.1 G .63 -.15(ey b)-2.93 H .33 +(inding, so the standard set of meta- and control pre\214x).15 F .33 +(es and backslash es-)-.15 F .244(cape sequences is a)144 144 R -.25(va) +-.2 G 2.744(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.744 F +.245(gin and end sequences of non-printing)-.15 F(characters, which can\ + be used to embed a terminal control sequence into the mode string.)144 +156 Q F1(vi\255ins\255mode\255string \(\(ins\)\))108 168 Q F0 .518 +(If the)144 180 R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 +-.25(va)3.018 G .517 +(riable is enabled, this string is displayed immediately before the).25 +F .186(last line of the primary prompt when vi editing mode is acti)144 +192 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .187(The v) +5.186 F .187(alue is)-.25 F -.15(ex)144 204 S .924(panded lik).15 F +3.424(eak)-.1 G 1.224 -.15(ey b)-3.524 H .924 +(inding, so the standard set of meta- and control pre\214x).15 F .923 +(es and backslash es-)-.15 F .244(cape sequences is a)144 216 R -.25(va) +-.2 G 2.744(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.744 F +.245(gin and end sequences of non-printing)-.15 F(characters, which can\ + be used to embed a terminal control sequence into the mode string.)144 +228 Q F1(visible\255stats \(Off\))108 240 Q F0 .847(If set to)144 252 R +F1(On)3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F +3.346(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 +(\(2\) is appended to the \214lename)B +(when listing possible completions.)144 264 Q F1 +(Readline Conditional Constructs)87 280.8 Q F0 .05 +(Readline implements a f)108 292.8 R .05(acility similar in spirit to t\ +he conditional compilation features of the C preprocessor)-.1 F .097 +(which allo)108 304.8 R .097(ws k)-.25 F .396 -.15(ey b)-.1 H .096 +(indings and v).15 F .096 +(ariable settings to be performed as the result of tests.)-.25 F .096 +(There are four parser)5.096 F(directi)108 316.8 Q -.15(ve)-.25 G 2.5 +(su).15 G(sed.)-2.5 E F1($if)108 333.6 Q F0(The)144 333.6 Q F1($if)2.962 +E F0 .462(construct allo)2.962 F .463(ws bindings to be made based on t\ +he editing mode, the terminal being used,)-.25 F +(or the application using readline.)144 345.6 Q(The te)5 E +(xt of the test, after an)-.15 E 2.5(yc)-.15 G(omparison operator)-2.5 E +(,)-.4 E -.15(ex)146.5 357.6 S(tends to the end of the line; unless oth\ +erwise noted, no characters are required to isolate it.).15 E F1(mode) +144 374.4 Q F0(The)180 374.4 Q F1(mode=)3.712 E F0 1.212(form of the) +3.712 F F1($if)3.711 E F0(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711 +(su).15 G 1.211(sed to test whether readline is in emacs or vi)-3.711 F +3.065(mode. This)180 386.4 R .565(may be used in conjunction with the) +3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565 +(command, for instance, to)3.065 F .735(set bindings in the)180 398.4 R +F2(emacs\255standar)3.235 E(d)-.37 E F0(and)3.235 E F2(emacs\255ctlx) +3.235 E F0 -.1(ke)3.235 G .735(ymaps only if readline is starting)-.05 F +(out in emacs mode.)180 410.4 Q F1(term)144 427.2 Q F0(The)180 427.2 Q +F1(term=)3.196 E F0 .696 +(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 +(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 439.2 R +.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 +(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 +(wo)3.154 G .654(rd on the right side of).1 F(the)180 451.2 Q F1(=)3.231 +E F0 .731(is tested ag)3.231 F .732(ainst both the full name of the ter\ +minal and the portion of the terminal)-.05 F(name before the \214rst)180 +463.2 Q F12.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.84 E F0 +(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.84 E +F0 2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 480 S(rsion).1 E F0 +(The)180 492 Q F1 -.1(ve)3.109 G(rsion).1 E F0 .608 +(test may be used to perform comparisons ag)3.109 F .608 +(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 504 Q F1 -.1 +(ve)2.771 G(rsion).1 E F0 -.15(ex)2.771 G .271 +(pands to the current readline v).15 F 2.772(ersion. The)-.15 F .272 +(set of comparison operators in-)2.772 F(cludes)180 516 Q F1(=)3.064 E +F0 3.064(,\()C(and)-3.064 E F1(==)3.064 E F0(\),)A F1(!=)3.064 E F0(,)A +F1(<=)3.064 E F0(,)A F1(>=)3.064 E F0(,)A F1(<)3.064 E F0 3.064(,a)C(nd) +-3.064 E F1(>)3.064 E F0 5.563(.T)C .563(he v)-5.563 F .563 +(ersion number supplied on the right side)-.15 F .318 +(of the operator consists of a major v)180 528 R .318(ersion number)-.15 +F 2.818(,a)-.4 G 2.818(no)-2.818 G .318 +(ptional decimal point, and an op-)-2.818 F .101(tional minor v)180 540 +R .101(ersion \(e.g.,)-.15 F F1(7.1)2.601 E F0 .101(\). If the minor v)B +.1(ersion is omitted, it is assumed to be)-.15 F F1(0)2.6 E F0 5.1(.T)C +(he)-5.1 E .06(operator may be separated from the string)180 552 R F1 +-.1(ve)2.56 G(rsion).1 E F0 .06(and from the v)2.56 F .06 +(ersion number ar)-.15 F(gument)-.18 E(by whitespace.)180 564 Q F1 +(application)144 580.8 Q F0(The)180 592.8 Q F1(application)3.003 E F0 +.503(construct is used to include application-speci\214c settings.)3.003 +F .503(Each program)5.503 F .114(using the readline library sets the)180 +604.8 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 +(nd an initialization \214le can test for a)-2.614 F .501(particular v) +180 616.8 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F +.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F +.396(ci\214c program.)180 628.8 R -.15(Fo)5.396 G 2.896(ri).15 G .396 +(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 +(ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 640.8 +Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 664.8 Q F0 +(Bash)2.5 E 2.5(#Q)180 676.8 S(uote the current or pre)-2.5 E(vious w) +-.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 688.8 Q F1($endif)180 +700.8 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(46)185.955 E +0 Cg EP %%Page: 47 47 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(next\255history \(C\255n\))108 84 Q F0(Fetch the ne)144 96 Q -(xt command from the history list, mo)-.15 E(ving forw)-.15 E -(ard in the list.)-.1 E F1(beginning\255of\255history \(M\255<\))108 108 -Q F0(Mo)144 120 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G -(he \214rst line in the history)-2.5 E(.)-.65 E F1 -(end\255of\255history \(M\255>\))108 132 Q F0(Mo)144 144 Q .3 -.15(ve t) --.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 G -(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108 -156 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47 -(Search backw)144 168 R 1.471(ard starting at the current line and mo) --.1 F 1.471(ving `up' through the history as necessary)-.15 F(.)-.65 E -(This is an incremental search.)144 180 Q F1 -.25(fo)108 192 S -(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132 -(Search forw)144 204 R 1.132(ard starting at the current line and mo)-.1 -F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary)-.25 -F(.)-.65 E(This is an incremental search.)144 216 Q F1(non\255incr)108 -228 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E -(ch\255history \(M\255p\))-.18 E F0 .164(Search backw)144 240 R .164(ar\ -d through the history starting at the current line using a non-incremen\ -tal search for)-.1 F 2.5(as)144 252 S(tring supplied by the user)-2.5 E -(.)-.55 E F1(non\255incr)108 264 Q(emental\255f)-.18 E(orward\255sear) --.25 E(ch\255history \(M\255n\))-.18 E F0 1.354(Search forw)144 276 R -1.354(ard through the history using a non-incremental search for a stri\ -ng supplied by the)-.1 F(user)144 288 Q(.)-.55 E F1(history\255sear)108 -300 Q(ch\255f)-.18 E(orward)-.25 E F0 .248(Search forw)144 312 R .249(a\ -rd through the history for the string of characters between the start o\ -f the current line)-.1 F(and the point.)144 324 Q -(This is a non-incremental search.)5 E F1(history\255sear)108 336 Q -(ch\255backward)-.18 E F0 .951(Search backw)144 348 R .951(ard through \ -the history for the string of characters between the start of the curre\ -nt)-.1 F(line and the point.)144 360 Q -(This is a non-incremental search.)5 E F1(history\255substring\255sear) -108 372 Q(ch\255backward)-.18 E F0 .95(Search backw)144 384 R .951(ard \ -through the history for the string of characters between the start of t\ -he current)-.1 F .007(line and the current cursor position \(the)144 396 -R/F2 10/Times-Italic@0 SF(point)2.507 E F0 2.507(\). The)B .007 -(search string may match an)2.507 F .006(ywhere in a history)-.15 F 2.5 -(line. This)144 408 R(is a non-incremental search.)2.5 E F1 -(history\255substring\255sear)108 420 Q(ch\255f)-.18 E(orward)-.25 E F0 -.248(Search forw)144 432 R .249(ard through the history for the string \ -of characters between the start of the current line)-.1 F .319 -(and the point.)144 444 R .319(The search string may match an)5.319 F -.319(ywhere in a history line.)-.15 F .318(This is a non-incremental) -5.318 F(search.)144 456 Q F1(yank\255nth\255ar)108 468 Q 2.5(g\()-.1 G -<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 480 R .622 -(gument to the pre)-.18 F .622(vious command \(usually the second w)-.25 -F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .773(at point.)144 -492 R -.4(Wi)5.773 G .773(th an ar).4 F(gument)-.18 E F2(n)3.633 E F0 -3.273(,i).24 G .773(nsert the)-3.273 F F2(n)3.273 E F0 .773(th w)B .773 -(ord from the pre)-.1 F .773(vious command \(the w)-.25 F .773 -(ords in the)-.1 F(pre)144 504 Q .291(vious command be)-.25 F .291 -(gin with w)-.15 F .291(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a) --2.791 H(ti).15 E .591 -.15(ve a)-.25 H -.18(rg).15 G .291 -(ument inserts the).18 F F2(n)2.791 E F0 .291(th w)B .292 -(ord from the end of)-.1 F .282(the pre)144 516 R .282(vious command.) --.25 F .282(Once the ar)5.282 F(gument)-.18 E F2(n)2.781 E F0 .281 -(is computed, the ar)2.781 F .281(gument is e)-.18 F .281 -(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 528 Q -(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 540 Q -2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307 -(Insert the last ar)144 552 R 1.307(gument to the pre)-.18 F 1.307 -(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308 -(vious history entry\).)-.25 F -.4(Wi)144 564 S .204(th a numeric ar).4 -F .204(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) --.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.203(.S)C(uccessi)-5.203 -E .503 -.15(ve c)-.25 H .203(alls to).15 F F1(yank\255last\255ar)2.703 E -(g)-.1 E F0(mo)144 576 Q .806 -.15(ve b)-.15 H .507 -(ack through the history list, inserting the last w).15 F .507 -(ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E -.416(to the \214rst call\) of each line in turn.)144 588 R(An)5.416 E -2.916(yn)-.15 G .416(umeric ar)-2.916 F .416 -(gument supplied to these successi)-.18 F .715 -.15(ve c)-.25 H .415 -(alls de-).15 F 1.217(termines the direction to mo)144 600 R 1.518 -.15 -(ve t)-.15 H 1.218(hrough the history).15 F 6.218(.A)-.65 G(ne)-2.5 E --.05(ga)-.15 G(ti).05 E 1.518 -.15(ve a)-.25 H -.18(rg).15 G 1.218 -(ument switches the direction).18 F .494 -(through the history \(back or forw)144 612 R 2.994(ard\). The)-.1 F -.494(history e)2.994 F .494(xpansion f)-.15 F .494 -(acilities are used to e)-.1 F .494(xtract the last)-.15 F -.1(wo)144 -624 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.) --.15 E F1(shell\255expand\255line \(M\255C\255e\))108 636 Q F0 .622 -(Expand the line as the shell does.)144 648 R .622 -(This performs alias and history e)5.622 F .623 -(xpansion as well as all of the)-.15 F(shell w)144 660 Q(ord e)-.1 E 2.5 -(xpansions. See)-.15 F/F3 9/Times-Bold@0 SF(HIST)2.5 E(OR)-.162 E 2.25 -(YE)-.315 G(XP)-2.25 E(ANSION)-.666 E F0(belo)2.25 E 2.5(wf)-.25 G -(or a description of history e)-2.5 E(xpansion.)-.15 E F1 -(history\255expand\255line \(M\255^\))108 672 Q F0 .939 -(Perform history e)144 684 R .939(xpansion on the current line.)-.15 F -(See)5.939 E F3(HIST)3.439 E(OR)-.162 E 3.189(YE)-.315 G(XP)-3.189 E -(ANSION)-.666 E F0(belo)3.189 E 3.438(wf)-.25 G .938(or a descrip-) --3.438 F(tion of history e)144 696 Q(xpansion.)-.15 E(GNU Bash 5.1)72 -768 Q(2020 October 29)141.235 E(47)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 +/Times-Italic@0 SF(variable)144 84 Q F0(The)180 96 Q F1(variable)3.777 E +F0 1.277(construct pro)3.777 F 1.276 +(vides simple equality tests for readline v)-.15 F 1.276(ariables and v) +-.25 F(alues.)-.25 E .079(The permitted comparison operators are)180 108 +R F1(=)2.579 E F0(,)A F1(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F1(!=) +2.579 E F0 5.079(.T)C .079(he v)-5.079 F .08(ariable name must be sepa-) +-.25 F .98(rated from the comparison operator by whitespace; the operat\ +or may be separated from)180 120 R .129(the v)180 132 R .129 +(alue on the right hand side by whitespace.)-.25 F .13 +(Both string and boolean v)5.129 F .13(ariables may be)-.25 F +(tested. Boolean v)180 144 Q(ariables must be tested ag)-.25 E +(ainst the v)-.05 E(alues)-.25 E F1(on)2.5 E F0(and)2.5 E F1(of)2.5 E(f) +-.18 E F0(.)A/F2 10/Times-Bold@0 SF($endif)108 160.8 Q F0 +(This command, as seen in the pre)144 160.8 Q(vious e)-.25 E +(xample, terminates an)-.15 E F2($if)2.5 E F0(command.)2.5 E F2($else) +108 177.6 Q F0(Commands in this branch of the)144 177.6 Q F2($if)2.5 E +F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G +(cuted if the test f).15 E(ails.)-.1 E F2($include)108 194.4 Q F0 .357 +(This directi)144 206.4 R .657 -.15(ve t)-.25 H(ak).15 E .357 +(es a single \214lename as an ar)-.1 F .356 +(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) +144 218.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 +-.15(ve w)-.25 H(ould read).05 E F1(/etc/inputr)2.5 E(c)-.37 E F0(:)A F2 +($include)144 242.4 Q F1(/etc/inputr)5.833 E(c)-.37 E F2(Sear)87 259.2 Q +(ching)-.18 E F0 .834(Readline pro)108 271.2 R .834 +(vides commands for searching through the command history \(see)-.15 F +/F3 9/Times-Bold@0 SF(HIST)3.335 E(OR)-.162 E(Y)-.315 E F0(belo)3.085 E +.835(w\) for lines)-.25 F(containing a speci\214ed string.)108 283.2 Q +(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F1(incr)2.51 E +(emental)-.37 E F0(and)3.01 E F1(non-incr)2.86 E(emental)-.37 E F0(.).51 +E .698(Incremental searches be)108 300 R .698 +(gin before the user has \214nished typing the search string.)-.15 F +.697(As each character of the)5.697 F .112 +(search string is typed, readline displays the ne)108 312 R .112 +(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 +E 5.113(.A)-.55 G(n)-5.113 E .542 +(incremental search requires only as man)108 324 R 3.042(yc)-.15 G .542 +(haracters as needed to \214nd the desired history entry)-3.042 F 5.541 +(.T)-.65 G .541(he char)-5.541 F(-)-.2 E .224(acters present in the v) +108 336 R .224(alue of the)-.25 F F2(isear)2.724 E(ch-terminators)-.18 E +F0 -.25(va)2.724 G .224 +(riable are used to terminate an incremental search.).25 F .66 +(If that v)108 348 R .66(ariable has not been assigned a v)-.25 F .66 +(alue the Escape and Control-J characters will terminate an incre-)-.25 +F .096(mental search.)108 360 R .096(Control-G will abort an incrementa\ +l search and restore the original line.)5.096 F .097(When the search is) +5.097 F(terminated, the history entry containing the search string beco\ +mes the current line.)108 372 Q 2.939 -.8(To \214)108 388.8 T 1.339(nd \ +other matching entries in the history list, type Control-S or Control-R\ + as appropriate.).8 F 1.338(This will)6.338 F .674(search backw)108 +400.8 R .674(ard or forw)-.1 F .674(ard in the history for the ne)-.1 F +.675(xt entry matching the search string typed so f)-.15 F(ar)-.1 E +5.675(.A)-.55 G -.15(ny)-5.675 G .175(other k)108 412.8 R .475 -.15 +(ey s)-.1 H .174 +(equence bound to a readline command will terminate the search and e).15 +F -.15(xe)-.15 G .174(cute that command.).15 F -.15(Fo)5.174 G(r).15 E +.54(instance, a)108 424.8 R F1(ne)3.04 E(wline)-.15 E F0 .541 +(will terminate the search and accept the line, thereby e)3.04 F -.15 +(xe)-.15 G .541(cuting the command from the).15 F(history list.)108 +436.8 Q .653(Readline remembers the last incremental search string.)108 +453.6 R .653(If tw)5.653 F 3.153(oC)-.1 G .653 +(ontrol-Rs are typed without an)-3.153 F 3.152(yi)-.15 G(nterv)-3.152 E +(en-)-.15 E(ing characters de\214ning a ne)108 465.6 Q 2.5(ws)-.25 G +(earch string, an)-2.5 E 2.5(yr)-.15 G(emembered search string is used.) +-2.5 E .567(Non-incremental searches read the entire search string befo\ +re starting to search for matching history lines.)108 482.4 R(The searc\ +h string may be typed by the user or be part of the contents of the cur\ +rent line.)108 494.4 Q F2(Readline Command Names)87 511.2 Q F0 1.392 +(The follo)108 523.2 R 1.391 +(wing is a list of the names of the commands and the def)-.25 F 1.391 +(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F +3.891(ya)-.15 G(re)-3.891 E 2.621(bound. Command)108 535.2 R .121 +(names without an accompan)2.621 F .121(ying k)-.15 F .421 -.15(ey s)-.1 +H .122(equence are unbound by def).15 F 2.622(ault. In)-.1 F .122 +(the follo)2.622 F(wing)-.25 E(descriptions,)108 547.2 Q F1(point)3.411 +E F0 .911(refers to the current cursor position, and)3.411 F F1(mark) +3.411 E F0 .91(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.41 +(db).15 G 3.41(yt)-3.41 G(he)-3.41 E F2(set\255mark)108 559.2 Q F0 2.5 +(command. The)2.5 F(te)2.5 E +(xt between the point and mark is referred to as the)-.15 E F1 -.37(re) +2.5 G(gion)-.03 E F0(.)A F2(Commands f)87 576 Q(or Mo)-.25 E(ving)-.1 E +(beginning\255of\255line \(C\255a\))108 588 Q F0(Mo)144 600 Q .3 -.15 +(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F2 +(end\255of\255line \(C\255e\))108 612 Q F0(Mo)144 624 Q .3 -.15(ve t) +-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F2 -.25(fo)108 636 S +(rward\255char \(C\255f\)).25 E F0(Mo)144 648 Q .3 -.15(ve f)-.15 H(orw) +.15 E(ard a character)-.1 E(.)-.55 E F2(backward\255char \(C\255b\))108 +660 Q F0(Mo)144 672 Q .3 -.15(ve b)-.15 H(ack a character).15 E(.)-.55 E +F2 -.25(fo)108 684 S(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 696 +Q .822 -.15(ve f)-.15 H(orw).15 E .522(ard to the end of the ne)-.1 F +.523(xt w)-.15 F 3.023(ord. W)-.1 F .523 +(ords are composed of alphanumeric characters \(let-)-.8 F +(ters and digits\).)144 708 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(47)185.955 E 0 Cg EP %%Page: 48 48 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(magic\255space)108 84 Q F0 .437(Perform history e)144 96 R .437 -(xpansion on the current line and insert a space.)-.15 F(See)5.438 E/F2 -9/Times-Bold@0 SF(HIST)2.938 E(OR)-.162 E 2.688(YE)-.315 G(XP)-2.688 E -(ANSION)-.666 E F0(be-)2.688 E(lo)144 108 Q 2.5(wf)-.25 G -(or a description of history e)-2.5 E(xpansion.)-.15 E F1 -(alias\255expand\255line)108 120 Q F0 .395(Perform alias e)144 132 R -.395(xpansion on the current line.)-.15 F(See)5.395 E F2(ALIASES)2.895 E -F0(abo)2.645 E .694 -.15(ve f)-.15 H .394(or a description of alias e) -.15 F(xpan-)-.15 E(sion.)144 144 Q F1 -(history\255and\255alias\255expand\255line)108 156 Q F0 -(Perform history and alias e)144 168 Q(xpansion on the current line.) --.15 E F1(insert\255last\255ar)108 180 Q(gument \(M\255.)-.1 E 2.5(,M) -.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 192 S(ynon)-2.5 E(ym for) --.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1 -(operate\255and\255get\255next \(C\255o\))108 204 Q F0 .947 -(Accept the current line for e)144 216 R -.15(xe)-.15 G .948 -(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.248 -.15 -(ve t)-.25 H 3.448(ot).15 G .948(he current line from the)-3.448 F .73 -(history for editing.)144 228 R 3.23(An)5.73 G .73(umeric ar)-3.23 F -.729 +SF(backward\255w)108 84 Q(ord \(M\255b\))-.1 E F0(Mo)144 96 Q 1.71 -.15 +(ve b)-.15 H 1.41(ack to the start of the current or pre).15 F 1.41 +(vious w)-.25 F 3.91(ord. W)-.1 F 1.41 +(ords are composed of alphanumeric)-.8 F +(characters \(letters and digits\).)144 108 Q F1(shell\255f)108 120 Q +(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 132 Q .784 -.15(ve f)-.15 H(orw) +.15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984(ord. W) +-.1 F .484(ords are delimited by non-quoted shell metacharac-)-.8 F +(ters.)144 144 Q F1(shell\255backward\255w)108 156 Q(ord)-.1 E F0(Mo)144 +168 Q .909 -.15(ve b)-.15 H .609(ack to the start of the current or pre) +.15 F .609(vious w)-.25 F 3.109(ord. W)-.1 F .608 +(ords are delimited by non-quoted shell)-.8 F(metacharacters.)144 180 Q +F1(pr)108 192 Q -.15(ev)-.18 G(ious\255scr).15 E(een\255line)-.18 E F0 +.89(Attempt to mo)144 204 R 1.19 -.15(ve p)-.15 H .89 +(oint to the same ph).15 F .891(ysical screen column on the pre)-.05 F +.891(vious ph)-.25 F .891(ysical screen line.)-.05 F .87 +(This will not ha)144 216 R 1.17 -.15(ve t)-.2 H .87(he desired ef).15 F +.87(fect if the current Readline line does not tak)-.25 F 3.37(eu)-.1 G +3.37(pm)-3.37 G .87(ore than one)-3.37 F(ph)144 228 Q(ysical line or if\ + point is not greater than the length of the prompt plus the screen wid\ +th.)-.05 E F1(next\255scr)108 240 Q(een\255line)-.18 E F0 .637 +(Attempt to mo)144 252 R .937 -.15(ve p)-.15 H .637(oint to the same ph) +.15 F .638(ysical screen column on the ne)-.05 F .638(xt ph)-.15 F .638 +(ysical screen line. This)-.05 F .009(will not ha)144 264 R .309 -.15 +(ve t)-.2 H .009(he desired ef).15 F .009 +(fect if the current Readline line does not tak)-.25 F 2.509(eu)-.1 G +2.509(pm)-2.509 G .008(ore than one ph)-2.509 F(ysical)-.05 E .772(line\ + or if the length of the current Readline line is not greater than the \ +length of the prompt plus)144 276 R(the screen width.)144 288 Q F1 +(clear\255display \(M\255C\255l\))108 300 Q F0 1.499 +(Clear the screen and, if possible, the terminal')144 312 R 3.999(ss) +-.55 G 1.498(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.998(,t)-.4 G +1.498(hen redra)-3.998 F 3.998(wt)-.15 G 1.498(he current line,)-3.998 F +(lea)144 324 Q(ving the current line at the top of the screen.)-.2 E F1 +(clear\255scr)108 336 Q(een \(C\255l\))-.18 E F0 1.36 +(Clear the screen, then redra)144 348 R 3.86(wt)-.15 G 1.36 +(he current line, lea)-3.86 F 1.36 +(ving the current line at the top of the screen.)-.2 F -.4(Wi)144 360 S +(th an ar).4 E +(gument, refresh the current line without clearing the screen.)-.18 E F1 +-.18(re)108 372 S(draw\255curr).18 E(ent\255line)-.18 E F0 +(Refresh the current line.)144 384 Q F1(Commands f)87 400.8 Q +(or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108 +412.8 Q(n\))-.15 E F0 .159(Accept the line re)144 424.8 R -.05(ga)-.15 G +.159(rdless of where the cursor is.).05 F .158 +(If this line is non-empty)5.158 F 2.658(,a)-.65 G .158 +(dd it to the history list)-2.658 F .699(according to the state of the) +144 436.8 R/F2 9/Times-Bold@0 SF(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va) +2.949 G 3.199(riable. If).25 F .699 +(the line is a modi\214ed history line, then)3.199 F +(restore the history line to its original state.)144 448.8 Q F1(pr)108 +460.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 +(Fetch the pre)144 472.8 Q(vious command from the history list, mo)-.25 +E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 484.8 +Q F0(Fetch the ne)144 496.8 Q(xt command from the history list, mo)-.15 +E(ving forw)-.15 E(ard in the list.)-.1 E F1 +(beginning\255of\255history \(M\255<\))108 508.8 Q F0(Mo)144 520.8 Q .3 +-.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.) +-.65 E F1(end\255of\255history \(M\255>\))108 532.8 Q F0(Mo)144 544.8 Q +.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5 +(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 +(operate\255and\255get\255next \(C\255o\))108 556.8 Q F0 .948 +(Accept the current line for e)144 568.8 R -.15(xe)-.15 G .948 +(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.247 -.15 +(ve t)-.25 H 3.447(ot).15 G .947(he current line from the)-3.447 F .729 +(history for editing.)144 580.8 R 3.229(An)5.729 G .729(umeric ar)-3.229 +F .729 (gument, if supplied, speci\214es the history entry to use instead of) --.18 F(the current line.)144 240 Q F1 -(edit\255and\255execute\255command \(C\255x C\255e\))108 252 Q F0(In)144 -264 Q -.2(vo)-.4 G .346 -.1(ke a).2 H 2.646(ne).1 G .146 -(ditor on the current command line, and e)-2.646 F -.15(xe)-.15 G .146 -(cute the result as shell commands.).15 F F1(Bash)5.147 E F0(at-)2.647 E -(tempts to in)144 276 Q -.2(vo)-.4 G -.1(ke).2 G F2($VISU)2.6 E(AL)-.54 -E/F3 9/Times-Roman@0 SF(,)A F2($EDIT)2.25 E(OR)-.162 E F3(,)A F0(and) -2.25 E/F4 10/Times-Italic@0 SF(emacs)2.5 E F0(as the editor)2.5 E 2.5 -(,i)-.4 G 2.5(nt)-2.5 G(hat order)-2.5 E(.)-.55 E F1(Commands f)87 292.8 -Q(or Changing T)-.25 E(ext)-.92 E F4(end\255of\255\214le)108 304.8 Q F1 -(\(usually C\255d\))2.5 E F0 .799 -(The character indicating end-of-\214le as set, for e)144 316.8 R .799 -(xample, by)-.15 F/F5 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C 3.298 -(ft)-5.799 G .798(his character is read when)-3.298 F .592 -(there are no characters on the line, and point is at the be)144 328.8 R -.593(ginning of the line, Readline interprets it)-.15 F -(as the end of input and returns)144 340.8 Q F2(EOF)2.5 E F3(.)A F1 -(delete\255char \(C\255d\))108 352.8 Q F0 .442 -(Delete the character at point.)144 364.8 R .442 -(If this function is bound to the same character as the tty)5.442 F F1 -(EOF)2.941 E F0(char)2.941 E(-)-.2 E(acter)144 376.8 Q 2.5(,a)-.4 G(s) --2.5 E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H -(or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\)) -108 388.8 Q F0 .552(Delete the character behind the cursor)144 400.8 R -5.553(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 -(umeric ar)-3.053 F .553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553 -(he deleted te).15 F .553(xt on)-.15 F(the kill ring.)144 412.8 Q F1 --.25(fo)108 424.8 S(rward\255backward\255delete\255char).25 E F0 .474 -(Delete the character under the cursor)144 436.8 R 2.974(,u)-.4 G .474 -(nless the cursor is at the end of the line, in which case the)-2.974 F -(character behind the cursor is deleted.)144 448.8 Q F1 -(quoted\255insert \(C\255q, C\255v\))108 460.8 Q F0 .778(Add the ne)144 -472.8 R .779(xt character typed to the line v)-.15 F 3.279 -(erbatim. This)-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279 -G .779(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.279 E F0 3.279 -(,f)C(or)-3.279 E -.15(ex)144 484.8 S(ample.).15 E F1 -(tab\255insert \(C\255v T)108 496.8 Q(AB\))-.9 E F0 -(Insert a tab character)144 508.8 Q(.)-.55 E F1 -(self\255insert \(a, b, A, 1, !, ...\))108 520.8 Q F0 -(Insert the character typed.)144 532.8 Q F1 -(transpose\255chars \(C\255t\))108 544.8 Q F0 .322 -(Drag the character before point forw)144 556.8 R .321(ard o)-.1 F -.15 -(ve)-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .321 -(ving point forw)-.15 F .321(ard as well.)-.1 F .372 -(If point is at the end of the line, then this transposes the tw)144 -568.8 R 2.872(oc)-.1 G .373(haracters before point.)-2.872 F(Ne)5.373 E --.05(ga)-.15 G(ti).05 E .673 -.15(ve a)-.25 H -.2(r-).15 G(guments ha) -144 580.8 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 -(transpose\255w)108 592.8 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 -604.8 R .024(ord before point past the w)-.1 F .023(ord after point, mo) --.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.523(rt).15 G .023(hat w) --2.523 F .023(ord as well.)-.1 F .023(If point)5.023 F -(is at the end of the line, this transposes the last tw)144 616.8 Q 2.5 -(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 628.8 Q -(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 -640.8 R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F --.05(ga)-.15 G(ti).05 E 1.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699 -(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 652.8 S(rd, b).1 -E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 664.8 Q -(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 676.8 Q 1.648 -(wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148 -(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15 -(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre) --.25 F(vious)-.25 E -.1(wo)144 688.8 S(rd, b).1 E(ut do not mo)-.2 E .3 --.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 700.8 Q -(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 -712.8 R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F --.05(ga)-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.975 -(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 724.8 S(rd, b) -.1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E(GNU Bash 5.1)72 -768 Q(2020 October 29)141.235 E(48)190.395 E 0 Cg EP +-.18 F(the current line.)144 592.8 Q F1(fetch\255history)108 604.8 Q F0 +-.4(Wi)144 616.8 S .257(th a numeric ar).4 F .257 +(gument, fetch that entry from the history list and mak)-.18 F 2.756(ei) +-.1 G 2.756(tt)-2.756 G .256(he current line.)-2.756 F -.4(Wi)5.256 G +(th-).4 E(out an ar)144 628.8 Q(gument, mo)-.18 E .3 -.15(ve b)-.15 H +(ack to the \214rst entry in the history list.).15 E F1 -2.29 -.18(re v) +108 640.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47 +(Search backw)144 652.8 R 1.471(ard starting at the current line and mo) +-.1 F 1.471(ving `up' through the history as necessary)-.15 F(.)-.65 E +(This is an incremental search.)144 664.8 Q F1 -.25(fo)108 676.8 S +(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132 +(Search forw)144 688.8 R 1.132(ard starting at the current line and mo) +-.1 F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary) +-.25 F(.)-.65 E(This is an incremental search.)144 700.8 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(48)185.955 E 0 Cg EP %%Page: 49 49 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF -.1(ove)108 84 S(rwrite\255mode).1 E F0 -.8(To)144 96 S .438(ggle o) -.8 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e) -.4 F .438(xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15 -F .437(gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15 -F -.4(Wi)144 108 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 --.15(ve n)-.25 H .781(umeric ar).15 F .781 -(gument, switches to insert mode.)-.18 F .781(This command af)5.781 F -(fects)-.25 E(only)144 120 Q F1(emacs)4.395 E F0(mode;)4.395 E F1(vi) -4.395 E F0 1.894(mode does o)4.395 F -.15(ve)-.15 G 1.894(rwrite dif).15 -F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F2 10 -/Times-Italic@0 SF -.37(re)4.394 G(adline\(\)).37 E F0 1.894 -(starts in insert)4.394 F 3.968(mode. In)144 132 R -.15(ove)3.968 G -1.468(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E -F0 1.469(replace the te)3.969 F 1.469(xt at point rather than)-.15 F -.958(pushing the te)144 144 R .958(xt to the right.)-.15 F .957 -(Characters bound to)5.958 F F1(backward\255delete\255char)3.457 E F0 -.957(replace the character)3.457 F(before point with a space.)144 156 Q -(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87 -172.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 184.8 Q F0 -(Kill the te)144 196.8 Q(xt from point to the end of the line.)-.15 E F1 -(backward\255kill\255line \(C\255x Rubout\))108 208.8 Q F0(Kill backw) -144 220.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 -(unix\255line\255discard \(C\255u\))108 232.8 Q F0(Kill backw)144 244.8 -Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E -(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) --2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 256.8 Q F0 -(Kill all characters on the current line, no matter where point is.)144 -268.8 Q F1(kill\255w)108 280.8 Q(ord \(M\255d\))-.1 E F0 .728 -(Kill from point to the end of the current w)144 292.8 R .729 -(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F .729 -(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 304.8 S -(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G -(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 316.8 Q -(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 328.8 Q(ord behind point.) --.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 -(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(shell\255kill\255w)108 340.8 Q -(ord)-.1 E F0 .729(Kill from point to the end of the current w)144 352.8 -R .728(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F -.728(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 364.8 S -(rd boundaries are the same as those used by).8 E F1(shell\255f)2.5 E -(orward\255w)-.25 E(ord)-.1 E F0(.)A F1(shell\255backward\255kill\255w) -108 376.8 Q(ord)-.1 E F0 3.025(Kill the w)144 388.8 R 3.025 -(ord behind point.)-.1 F -.8(Wo)8.025 G 3.025 -(rd boundaries are the same as those used by).8 F F1(shell\255back-) -5.525 E(ward\255w)144 400.8 Q(ord)-.1 E F0(.)A F1(unix\255w)108 412.8 Q -(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 424.8 R .365 -(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1 -F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 -(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144 -436.8 Q F1(unix\255\214lename\255rubout)108 448.8 Q F0 .166(Kill the w) -144 460.8 R .166 -(ord behind point, using white space and the slash character as the w) --.1 F .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 472.8 Q -(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) --2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 484.8 Q F0 -(Delete all spaces and tabs around point.)144 496.8 Q F1(kill\255r)108 -508.8 Q(egion)-.18 E F0(Kill the te)144 520.8 Q(xt in the current re) --.15 E(gion.)-.15 E F1(copy\255r)108 532.8 Q(egion\255as\255kill)-.18 E -F0(Cop)144 544.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E -(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 -(copy\255backward\255w)108 556.8 Q(ord)-.1 E F0(Cop)144 568.8 Q 4.801 -(yt)-.1 G 2.301(he w)-4.801 F 2.301(ord before point to the kill b)-.1 F -(uf)-.2 E(fer)-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.3 -(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 580.8 -Q(ord)-.1 E F0(.)A F1(copy\255f)108 592.8 Q(orward\255w)-.25 E(ord)-.1 E -F0(Cop)144 604.8 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo) --.1 F 2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008 -(.T)-.55 G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1 -F F1 -.25(fo)4.508 G -.37(r-).25 G(ward\255w)144 616.8 Q(ord)-.1 E F0(.) -A F1(yank \(C\255y\))108 628.8 Q F0 -1(Ya)144 640.8 S -(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 -E F1(yank\255pop \(M\255y\))108 652.8 Q F0 -(Rotate the kill ring, and yank the ne)144 664.8 Q 2.5(wt)-.25 G 2.5 -(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E -F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 681.6 Q -(guments)-.1 E(digit\255ar)108 693.6 Q -(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367 -(Add this digit to the ar)144 705.6 R .367 -(gument already accumulating, or start a ne)-.18 F 2.867(wa)-.25 G -.18 -(rg)-2.867 G 2.867(ument. M\255\255).18 F .366(starts a ne)2.867 F -.05 -(ga)-.15 G(-).05 E(ti)144 717.6 Q .3 -.15(ve a)-.25 H -.18(rg).15 G -(ument.).18 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(49)190.395 -E 0 Cg EP +SF(non\255incr)108 84 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H +(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .164(Search backw) +144 96 R .164(ard through the history starting at the current line usin\ +g a non-incremental search for)-.1 F 2.5(as)144 108 S +(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 120 Q +(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 +E F0 1.354(Search forw)144 132 R 1.354(ard through the history using a \ +non-incremental search for a string supplied by the)-.1 F(user)144 144 Q +(.)-.55 E F1(history\255sear)108 156 Q(ch\255f)-.18 E(orward)-.25 E F0 +.248(Search forw)144 168 R .249(ard through the history for the string \ +of characters between the start of the current line)-.1 F +(and the point.)144 180 Q(This is a non-incremental search.)5 E F1 +(history\255sear)108 192 Q(ch\255backward)-.18 E F0 .951(Search backw) +144 204 R .951(ard through the history for the string of characters bet\ +ween the start of the current)-.1 F(line and the point.)144 216 Q +(This is a non-incremental search.)5 E F1(history\255substring\255sear) +108 228 Q(ch\255backward)-.18 E F0 .95(Search backw)144 240 R .951(ard \ +through the history for the string of characters between the start of t\ +he current)-.1 F .007(line and the current cursor position \(the)144 252 +R/F2 10/Times-Italic@0 SF(point)2.507 E F0 2.507(\). The)B .007 +(search string may match an)2.507 F .006(ywhere in a history)-.15 F 2.5 +(line. This)144 264 R(is a non-incremental search.)2.5 E F1 +(history\255substring\255sear)108 276 Q(ch\255f)-.18 E(orward)-.25 E F0 +.248(Search forw)144 288 R .249(ard through the history for the string \ +of characters between the start of the current line)-.1 F .319 +(and the point.)144 300 R .319(The search string may match an)5.319 F +.319(ywhere in a history line.)-.15 F .318(This is a non-incremental) +5.318 F(search.)144 312 Q F1(yank\255nth\255ar)108 324 Q 2.5(g\()-.1 G +<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 336 R .622 +(gument to the pre)-.18 F .622(vious command \(usually the second w)-.25 +F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .773(at point.)144 +348 R -.4(Wi)5.773 G .773(th an ar).4 F(gument)-.18 E F2(n)3.633 E F0 +3.273(,i).24 G .773(nsert the)-3.273 F F2(n)3.273 E F0 .773(th w)B .773 +(ord from the pre)-.1 F .773(vious command \(the w)-.25 F .773 +(ords in the)-.1 F(pre)144 360 Q .291(vious command be)-.25 F .291 +(gin with w)-.15 F .291(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a) +-2.791 H(ti).15 E .591 -.15(ve a)-.25 H -.18(rg).15 G .291 +(ument inserts the).18 F F2(n)2.791 E F0 .291(th w)B .292 +(ord from the end of)-.1 F .282(the pre)144 372 R .282(vious command.) +-.25 F .282(Once the ar)5.282 F(gument)-.18 E F2(n)2.781 E F0 .281 +(is computed, the ar)2.781 F .281(gument is e)-.18 F .281 +(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 384 Q +(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 396 Q +2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307 +(Insert the last ar)144 408 R 1.307(gument to the pre)-.18 F 1.307 +(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308 +(vious history entry\).)-.25 F -.4(Wi)144 420 S .204(th a numeric ar).4 +F .204(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) +-.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.203(.S)C(uccessi)-5.203 +E .503 -.15(ve c)-.25 H .203(alls to).15 F F1(yank\255last\255ar)2.703 E +(g)-.1 E F0(mo)144 432 Q .806 -.15(ve b)-.15 H .507 +(ack through the history list, inserting the last w).15 F .507 +(ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E +.416(to the \214rst call\) of each line in turn.)144 444 R(An)5.416 E +2.916(yn)-.15 G .416(umeric ar)-2.916 F .416 +(gument supplied to these successi)-.18 F .715 -.15(ve c)-.25 H .415 +(alls de-).15 F 1.217(termines the direction to mo)144 456 R 1.518 -.15 +(ve t)-.15 H 1.218(hrough the history).15 F 6.218(.A)-.65 G(ne)-2.5 E +-.05(ga)-.15 G(ti).05 E 1.518 -.15(ve a)-.25 H -.18(rg).15 G 1.218 +(ument switches the direction).18 F .494 +(through the history \(back or forw)144 468 R 2.994(ard\). The)-.1 F +.494(history e)2.994 F .494(xpansion f)-.15 F .494 +(acilities are used to e)-.1 F .494(xtract the last)-.15 F -.1(wo)144 +480 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.) +-.15 E F1(shell\255expand\255line \(M\255C\255e\))108 492 Q F0 .622 +(Expand the line as the shell does.)144 504 R .622 +(This performs alias and history e)5.622 F .623 +(xpansion as well as all of the)-.15 F(shell w)144 516 Q(ord e)-.1 E 2.5 +(xpansions. See)-.15 F/F3 9/Times-Bold@0 SF(HIST)2.5 E(OR)-.162 E 2.25 +(YE)-.315 G(XP)-2.25 E(ANSION)-.666 E F0(belo)2.25 E 2.5(wf)-.25 G +(or a description of history e)-2.5 E(xpansion.)-.15 E F1 +(history\255expand\255line \(M\255^\))108 528 Q F0 .939 +(Perform history e)144 540 R .939(xpansion on the current line.)-.15 F +(See)5.939 E F3(HIST)3.439 E(OR)-.162 E 3.189(YE)-.315 G(XP)-3.189 E +(ANSION)-.666 E F0(belo)3.189 E 3.438(wf)-.25 G .938(or a descrip-) +-3.438 F(tion of history e)144 552 Q(xpansion.)-.15 E F1(magic\255space) +108 564 Q F0 .437(Perform history e)144 576 R .437 +(xpansion on the current line and insert a space.)-.15 F(See)5.438 E F3 +(HIST)2.938 E(OR)-.162 E 2.688(YE)-.315 G(XP)-2.688 E(ANSION)-.666 E F0 +(be-)2.688 E(lo)144 588 Q 2.5(wf)-.25 G(or a description of history e) +-2.5 E(xpansion.)-.15 E F1(alias\255expand\255line)108 600 Q F0 .395 +(Perform alias e)144 612 R .395(xpansion on the current line.)-.15 F +(See)5.395 E F3(ALIASES)2.895 E F0(abo)2.645 E .694 -.15(ve f)-.15 H +.394(or a description of alias e).15 F(xpan-)-.15 E(sion.)144 624 Q F1 +(history\255and\255alias\255expand\255line)108 636 Q F0 +(Perform history and alias e)144 648 Q(xpansion on the current line.) +-.15 E F1(insert\255last\255ar)108 660 Q(gument \(M\255.)-.1 E 2.5(,M) +.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 672 S(ynon)-2.5 E(ym for) +-.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1 +(edit\255and\255execute\255command \(C\255x C\255e\))108 684 Q F0(In)144 +696 Q -.2(vo)-.4 G .346 -.1(ke a).2 H 2.646(ne).1 G .146 +(ditor on the current command line, and e)-2.646 F -.15(xe)-.15 G .146 +(cute the result as shell commands.).15 F F1(Bash)5.147 E F0(at-)2.647 E +(tempts to in)144 708 Q -.2(vo)-.4 G -.1(ke).2 G F3($VISU)2.6 E(AL)-.54 +E/F4 9/Times-Roman@0 SF(,)A F3($EDIT)2.25 E(OR)-.162 E F4(,)A F0(and) +2.25 E F2(emacs)2.5 E F0(as the editor)2.5 E 2.5(,i)-.4 G 2.5(nt)-2.5 G +(hat order)-2.5 E(.)-.55 E(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(49)185.955 E 0 Cg EP %%Page: 50 50 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(uni)108 84 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778 -(This is another w)144 96 R .779(ay to specify an ar)-.1 F 3.279 -(gument. If)-.18 F .779(this command is follo)3.279 F .779 -(wed by one or more digits,)-.25 F 1.376 -(optionally with a leading minus sign, those digits de\214ne the ar)144 -108 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 -120 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) -3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 -(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) --.2 F(-)-.2 E .899(wise ignored.)144 132 R .898 -(As a special case, if this command is immediately follo)5.899 F .898 -(wed by a character that is)-.25 F 1.23 -(neither a digit nor minus sign, the ar)144 144 R 1.23 -(gument count for the ne)-.18 F 1.23(xt command is multiplied by four) --.15 F(.)-.55 E .823(The ar)144 156 R .823 -(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .823 -(cuting this function the \214rst time mak).15 F .822(es the ar)-.1 F -(gument)-.18 E(count four)144 168 Q 2.5(,as)-.4 G(econd time mak)-2.5 E -(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1(Completing) -87 184.8 Q(complete \(T)108 196.8 Q(AB\))-.9 E F0 1.137 -(Attempt to perform completion on the te)144 208.8 R 1.137 -(xt before point.)-.15 F F1(Bash)6.137 E F0 1.137 -(attempts completion treating the)3.637 F(te)144 220.8 Q .533(xt as a v) --.15 F .533(ariable \(if the te)-.25 F .533(xt be)-.15 F .533(gins with) --.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .532(xt be)-.15 F -.532(gins with)-.15 F F1(~)3.032 E F0 .532(\), hostname \(if the)B(te) -144 232.8 Q .701(xt be)-.15 F .701(gins with)-.15 F F1(@)3.201 E F0 .701 -(\), or command \(including aliases and functions\) in turn.)B .702 -(If none of these pro-)5.701 F -(duces a match, \214lename completion is attempted.)144 244.8 Q F1 -(possible\255completions \(M\255?\))108 256.8 Q F0 -(List the possible completions of the te)144 268.8 Q(xt before point.) --.15 E F1(insert\255completions \(M\255*\))108 280.8 Q F0 .783 -(Insert all completions of the te)144 292.8 R .783 -(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H -.783(een generated by).15 F F1(possible\255com-)3.282 E(pletions)144 -304.8 Q F0(.)A F1(menu\255complete)108 316.8 Q F0 .928(Similar to)144 -328.8 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 -F .929(ord to be completed with a single match from the list of)-.1 F -1.194(possible completions.)144 340.8 R 1.194(Repeated e)6.194 F -.15 -(xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193 -(steps through the list of possible)3.694 F .828 -(completions, inserting each match in turn.)144 352.8 R .828 -(At the end of the list of completions, the bell is rung)5.828 F .727 -(\(subject to the setting of)144 364.8 R F1(bell\255style)3.227 E F0 -3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F -.727(An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227 -E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.227 E F0 1.73 -(positions forw)144 376.8 R 1.73(ard in the list of matches; a ne)-.1 F --.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73 -(ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1 -E(through the list.)144 388.8 Q(This command is intended to be bound to) -5 E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E -(ault.)-.1 E F1(menu\255complete\255backward)108 400.8 Q F0 .82 -(Identical to)144 412.8 R F1(menu\255complete)3.32 E F0 3.32(,b)C .82 -(ut mo)-3.52 F -.15(ve)-.15 G 3.32(sb).15 G(ackw)-3.32 E .82 -(ard through the list of possible completions, as if)-.1 F F1 -(menu\255complete)144 424.8 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5 -(nan).15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg) -.15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E -F1(delete\255char\255or\255list)108 436.8 Q F0 .234 -(Deletes the character under the cursor if not at the be)144 448.8 R -.234(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char) -2.735 E F0(\).)A .425(If at the end of the line, beha)144 460.8 R -.15 -(ve)-.2 G 2.925(si).15 G .425(dentically to)-2.925 F F1 -(possible\255completions)2.925 E F0 5.425(.T)C .425 -(his command is unbound)-5.425 F(by def)144 472.8 Q(ault.)-.1 E F1 -(complete\255\214lename \(M\255/\))108 484.8 Q F0 -(Attempt \214lename completion on the te)144 496.8 Q(xt before point.) --.15 E F1(possible\255\214lename\255completions \(C\255x /\))108 508.8 Q -F0(List the possible completions of the te)144 520.8 Q -(xt before point, treating it as a \214lename.)-.15 E F1 -(complete\255user)108 532.8 Q(name \(M\255~\))-.15 E F0 -(Attempt completion on the te)144 544.8 Q -(xt before point, treating it as a username.)-.15 E F1(possible\255user) -108 556.8 Q(name\255completions \(C\255x ~\))-.15 E F0 -(List the possible completions of the te)144 568.8 Q -(xt before point, treating it as a username.)-.15 E F1(complete\255v)108 -580.8 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 -592.8 Q(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E -F1(possible\255v)108 604.8 Q(ariable\255completions \(C\255x $\))-.1 E -F0(List the possible completions of the te)144 616.8 Q -(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 -(complete\255hostname \(M\255@\))108 628.8 Q F0 -(Attempt completion on the te)144 640.8 Q -(xt before point, treating it as a hostname.)-.15 E F1 -(possible\255hostname\255completions \(C\255x @\))108 652.8 Q F0 -(List the possible completions of the te)144 664.8 Q -(xt before point, treating it as a hostname.)-.15 E F1 -(complete\255command \(M\255!\))108 676.8 Q F0 .58 -(Attempt completion on the te)144 688.8 R .581 -(xt before point, treating it as a command name.)-.15 F .581 -(Command comple-)5.581 F .715(tion attempts to match the te)144 700.8 R -.715(xt ag)-.15 F .715(ainst aliases, reserv)-.05 F .715(ed w)-.15 F -.715(ords, shell functions, shell b)-.1 F .715(uiltins, and)-.2 F -(\214nally e)144 712.8 Q -.15(xe)-.15 G -(cutable \214lenames, in that order).15 E(.)-.55 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(50)190.395 E 0 Cg EP +SF(Commands f)87 84 Q(or Changing T)-.25 E(ext)-.92 E/F2 10 +/Times-Italic@0 SF(end\255of\255\214le)108 96 Q F1(\(usually C\255d\)) +2.5 E F0 .799(The character indicating end-of-\214le as set, for e)144 +108 R .799(xample, by)-.15 F/F3 10/Courier@0 SF(stty)3.299 E F0 5.799 +(.I)C 3.298(ft)-5.799 G .798(his character is read when)-3.298 F .592 +(there are no characters on the line, and point is at the be)144 120 R +.593(ginning of the line, Readline interprets it)-.15 F +(as the end of input and returns)144 132 Q/F4 9/Times-Bold@0 SF(EOF)2.5 +E/F5 9/Times-Roman@0 SF(.)A F1(delete\255char \(C\255d\))108 144 Q F0 +.442(Delete the character at point.)144 156 R .442 +(If this function is bound to the same character as the tty)5.442 F F1 +(EOF)2.941 E F0(char)2.941 E(-)-.2 E(acter)144 168 Q 2.5(,a)-.4 G(s)-2.5 +E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H +(or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\)) +108 180 Q F0 .552(Delete the character behind the cursor)144 192 R 5.553 +(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 +(umeric ar)-3.053 F .553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553 +(he deleted te).15 F .553(xt on)-.15 F(the kill ring.)144 204 Q F1 -.25 +(fo)108 216 S(rward\255backward\255delete\255char).25 E F0 .474 +(Delete the character under the cursor)144 228 R 2.974(,u)-.4 G .474 +(nless the cursor is at the end of the line, in which case the)-2.974 F +(character behind the cursor is deleted.)144 240 Q F1 +(quoted\255insert \(C\255q, C\255v\))108 252 Q F0 .778(Add the ne)144 +264 R .779(xt character typed to the line v)-.15 F 3.279(erbatim. This) +-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279 G .779 +(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.279 E F0 3.279(,f)C +(or)-3.279 E -.15(ex)144 276 S(ample.).15 E F1(tab\255insert \(C\255v T) +108 288 Q(AB\))-.9 E F0(Insert a tab character)144 300 Q(.)-.55 E F1 +(self\255insert \(a, b, A, 1, !, ...\))108 312 Q F0 +(Insert the character typed.)144 324 Q F1(transpose\255chars \(C\255t\)) +108 336 Q F0 .322(Drag the character before point forw)144 348 R .321 +(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321 +(he character at point, mo)-2.821 F .321(ving point forw)-.15 F .321 +(ard as well.)-.1 F .372 +(If point is at the end of the line, then this transposes the tw)144 360 +R 2.872(oc)-.1 G .373(haracters before point.)-2.872 F(Ne)5.373 E -.05 +(ga)-.15 G(ti).05 E .673 -.15(ve a)-.25 H -.2(r-).15 G(guments ha)144 +372 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 +(transpose\255w)108 384 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 +396 R .024(ord before point past the w)-.1 F .023(ord after point, mo) +-.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.523(rt).15 G .023(hat w) +-2.523 F .023(ord as well.)-.1 F .023(If point)5.023 F +(is at the end of the line, this transposes the last tw)144 408 Q 2.5 +(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 420 Q +(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 432 +R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 1.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699 +(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 444 S(rd, b).1 E +(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 456 Q +(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 468 Q 1.648 +(wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148 +(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15 +(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre) +-.25 F(vious)-.25 E -.1(wo)144 480 S(rd, b).1 E(ut do not mo)-.2 E .3 +-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 492 Q +(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 504 +R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.975 +(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 516 S(rd, b).1 +E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 528 +S(rwrite\255mode).1 E F0 -.8(To)144 540 S .438(ggle o).8 F -.15(ve)-.15 +G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e).4 F .438 +(xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15 F .437 +(gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15 F -.4 +(Wi)144 552 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 -.15 +(ve n)-.25 H .781(umeric ar).15 F .781(gument, switches to insert mode.) +-.18 F .781(This command af)5.781 F(fects)-.25 E(only)144 564 Q F1 +(emacs)4.395 E F0(mode;)4.395 E F1(vi)4.395 E F0 1.894(mode does o)4.395 +F -.15(ve)-.15 G 1.894(rwrite dif).15 F(ferently)-.25 E 6.894(.E)-.65 G +1.894(ach call to)-6.894 F F2 -.37(re)4.394 G(adline\(\)).37 E F0 1.894 +(starts in insert)4.394 F 3.968(mode. In)144 576 R -.15(ove)3.968 G +1.468(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E +F0 1.469(replace the te)3.969 F 1.469(xt at point rather than)-.15 F +.958(pushing the te)144 588 R .958(xt to the right.)-.15 F .957 +(Characters bound to)5.958 F F1(backward\255delete\255char)3.457 E F0 +.957(replace the character)3.457 F(before point with a space.)144 600 Q +(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87 +616.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 628.8 Q F0 +(Kill the te)144 640.8 Q(xt from point to the end of the line.)-.15 E F1 +(backward\255kill\255line \(C\255x Rubout\))108 652.8 Q F0(Kill backw) +144 664.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 +(unix\255line\255discard \(C\255u\))108 676.8 Q F0(Kill backw)144 688.8 +Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E +(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) +-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 700.8 Q F0 +(Kill all characters on the current line, no matter where point is.)144 +712.8 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(50)185.955 E 0 +Cg EP %%Page: 51 51 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(possible\255command\255completions \(C\255x !\))108 84 Q F0 -(List the possible completions of the te)144 96 Q -(xt before point, treating it as a command name.)-.15 E F1 -(dynamic\255complete\255history \(M\255T)108 108 Q(AB\))-.9 E F0 .424 -(Attempt completion on the te)144 120 R .425 -(xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .425 -(ainst lines from the history list)-.05 F -(for possible completion matches.)144 132 Q F1(dab)108 144 Q(br)-.1 E --.15(ev)-.18 G(\255expand).15 E F0 .611 -(Attempt menu completion on the te)144 156 R .611 -(xt before point, comparing the te)-.15 F .61(xt ag)-.15 F .61 -(ainst lines from the his-)-.05 F -(tory list for possible completion matches.)144 168 Q F1 -(complete\255into\255braces \(M\255{\))108 180 Q F0 .4(Perform \214lena\ -me completion and insert the list of possible completions enclosed with\ -in braces so)144 192 R(the list is a)144 204 Q -.25(va)-.2 G -(ilable to the shell \(see).25 E F1(Brace Expansion)2.5 E F0(abo)2.5 E --.15(ve)-.15 G(\).).15 E F1 -.25(Ke)87 220.8 S(yboard Macr).25 E(os)-.18 -E(start\255kbd\255macr)108 232.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) -.833 E F0(Be)144 244.8 Q(gin sa)-.15 E -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro.).15 E F1(end\255kbd\255macr)108 256.8 Q 2.5(o\()-.18 G -(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 268.8 Q -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro and store the de\214nition.).15 E F1 -(call\255last\255kbd\255macr)108 280.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 -E F0(Re-e)144 292.8 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1 -G .999(board macro de\214ned, by making the characters in the macro app\ -ear as if).15 F(typed at the k)144 304.8 Q -.15(ey)-.1 G(board.).15 E F1 -(print\255last\255kbd\255macr)108 316.8 Q 2.5(o\()-.18 G(\))-2.5 E F0 -(Print the last k)144 328.8 Q -.15(ey)-.1 G -(board macro de\214ned in a format suitable for the).15 E/F2 10 -/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1 -(Miscellaneous)87 345.6 Q -.18(re)108 357.6 S.18 E -(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776 -(Read in the contents of the)144 369.6 R F2(inputr)4.276 E(c)-.37 E F0 -1.777(\214le, and incorporate an)4.276 F 4.277(yb)-.15 G 1.777 -(indings or v)-4.277 F 1.777(ariable assignments)-.25 F(found there.)144 -381.6 Q F1(abort \(C\255g\))108 393.6 Q F0 3.249 -(Abort the current editing command and ring the terminal')144 405.6 R -5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1 -(bell\255style)144 417.6 Q F0(\).)A F1(do\255lo)108 429.6 Q(wer)-.1 E -(case\255v)-.18 E(ersion \(M\255A, M\255B, M\255)-.1 E F2(x)A F1 2.5(,.) -C(..\))-2.5 E F0 1.738(If the meta\214ed character)144 441.6 R F2(x) -4.238 E F0 1.739 -(is uppercase, run the command that is bound to the corresponding)4.238 -F(meta\214ed lo)144 453.6 Q(wercase character)-.25 E 5(.T)-.55 G -(he beha)-5 E(vior is unde\214ned if)-.2 E F2(x)2.5 E F0(is already lo) -2.5 E(wercase.)-.25 E F1(pr)108 465.6 Q(e\214x\255meta \(ESC\))-.18 E F0 -(Metafy the ne)144 477.6 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0 -SF(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 -(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 489.6 Q F0 -(Incremental undo, separately remembered for each line.)144 501.6 Q F1 --2.29 -.18(re v)108 513.6 T(ert\255line \(M\255r\)).08 E F0 .231 -(Undo all changes made to this line.)144 525.6 R .231(This is lik)5.231 -F 2.731(ee)-.1 G -.15(xe)-2.881 G .23(cuting the).15 F F1(undo)2.73 E F0 -.23(command enough times to re-)2.73 F -(turn the line to its initial state.)144 537.6 Q F1 -(tilde\255expand \(M\255&\))108 549.6 Q F0(Perform tilde e)144 561.6 Q -(xpansion on the current w)-.15 E(ord.)-.1 E F1 -(set\255mark \(C\255@, M\255\))108 573.6 Q F0 -(Set the mark to the point.)144 585.6 Q(If a numeric ar)5 E -(gument is supplied, the mark is set to that position.)-.18 E F1 -(exchange\255point\255and\255mark \(C\255x C\255x\))108 597.6 Q F0(Sw) -144 609.6 Q .282(ap the point with the mark.)-.1 F .283 -(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G -2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) -144 621.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 -(character\255sear)108 633.6 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 -645.6 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G -3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 -(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 -(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) -144 657.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 669.6 Q -(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 681.6 S 1.043 -(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G -3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 -(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E --.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G -(count searches for subsequent occurrences.)144 693.6 Q F1 -(skip\255csi\255sequence)108 705.6 Q F0 1.827 -(Read enough characters to consume a multi-k)144 717.6 R 2.126 -.15 -(ey s)-.1 H 1.826(equence such as those de\214ned for k).15 F -.15(ey) --.1 G 4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 729.6 R -.791(Such sequences be)5.79 F .791 -(gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(51)190.395 E 0 Cg EP +SF(kill\255w)108 84 Q(ord \(M\255d\))-.1 E F0 .728 +(Kill from point to the end of the current w)144 96 R .729 +(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F .729 +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 108 S +(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G +(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 120 Q +(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 132 Q(ord behind point.)-.1 +E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 +(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(shell\255kill\255w)108 144 Q +(ord)-.1 E F0 .729(Kill from point to the end of the current w)144 156 R +.728(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F +.728(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 168 S +(rd boundaries are the same as those used by).8 E F1(shell\255f)2.5 E +(orward\255w)-.25 E(ord)-.1 E F0(.)A F1(shell\255backward\255kill\255w) +108 180 Q(ord)-.1 E F0 3.025(Kill the w)144 192 R 3.025 +(ord behind point.)-.1 F -.8(Wo)8.025 G 3.025 +(rd boundaries are the same as those used by).8 F F1(shell\255back-) +5.525 E(ward\255w)144 204 Q(ord)-.1 E F0(.)A F1(unix\255w)108 216 Q +(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 228 R .365 +(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1 +F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 +(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144 +240 Q F1(unix\255\214lename\255rubout)108 252 Q F0 .166(Kill the w)144 +264 R .166 +(ord behind point, using white space and the slash character as the w) +-.1 F .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 276 Q +(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) +-2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 288 Q F0 +(Delete all spaces and tabs around point.)144 300 Q F1(kill\255r)108 312 +Q(egion)-.18 E F0(Kill the te)144 324 Q(xt in the current re)-.15 E +(gion.)-.15 E F1(copy\255r)108 336 Q(egion\255as\255kill)-.18 E F0(Cop) +144 348 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E +(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 +(copy\255backward\255w)108 360 Q(ord)-.1 E F0(Cop)144 372 Q 4.801(yt)-.1 +G 2.301(he w)-4.801 F 2.301(ord before point to the kill b)-.1 F(uf)-.2 +E(fer)-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.3 +(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 384 Q +(ord)-.1 E F0(.)A F1(copy\255f)108 396 Q(orward\255w)-.25 E(ord)-.1 E F0 +(Cop)144 408 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo)-.1 F +2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008(.T)-.55 +G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1 F F1 -.25 +(fo)4.508 G -.37(r-).25 G(ward\255w)144 420 Q(ord)-.1 E F0(.)A F1 +(yank \(C\255y\))108 432 Q F0 -1(Ya)144 444 S +(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 +E F1(yank\255pop \(M\255y\))108 456 Q F0 +(Rotate the kill ring, and yank the ne)144 468 Q 2.5(wt)-.25 G 2.5 +(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E +F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 484.8 Q +(guments)-.1 E(digit\255ar)108 496.8 Q +(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367 +(Add this digit to the ar)144 508.8 R .367 +(gument already accumulating, or start a ne)-.18 F 2.867(wa)-.25 G -.18 +(rg)-2.867 G 2.867(ument. M\255\255).18 F .366(starts a ne)2.867 F -.05 +(ga)-.15 G(-).05 E(ti)144 520.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G +(ument.).18 E F1(uni)108 532.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 +E F0 .778(This is another w)144 544.8 R .779(ay to specify an ar)-.1 F +3.279(gument. If)-.18 F .779(this command is follo)3.279 F .779 +(wed by one or more digits,)-.25 F 1.376 +(optionally with a leading minus sign, those digits de\214ne the ar)144 +556.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 +568.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) +3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 +(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) +-.2 F(-)-.2 E .899(wise ignored.)144 580.8 R .898 +(As a special case, if this command is immediately follo)5.899 F .898 +(wed by a character that is)-.25 F 1.23 +(neither a digit nor minus sign, the ar)144 592.8 R 1.23 +(gument count for the ne)-.18 F 1.23(xt command is multiplied by four) +-.15 F(.)-.55 E .823(The ar)144 604.8 R .823 +(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .823 +(cuting this function the \214rst time mak).15 F .822(es the ar)-.1 F +(gument)-.18 E(count four)144 616.8 Q 2.5(,as)-.4 G(econd time mak)-2.5 +E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1(Completing) +87 633.6 Q(complete \(T)108 645.6 Q(AB\))-.9 E F0 1.137 +(Attempt to perform completion on the te)144 657.6 R 1.137 +(xt before point.)-.15 F F1(Bash)6.137 E F0 1.137 +(attempts completion treating the)3.637 F(te)144 669.6 Q .533(xt as a v) +-.15 F .533(ariable \(if the te)-.25 F .533(xt be)-.15 F .533(gins with) +-.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .532(xt be)-.15 F +.532(gins with)-.15 F F1(~)3.032 E F0 .532(\), hostname \(if the)B(te) +144 681.6 Q .701(xt be)-.15 F .701(gins with)-.15 F F1(@)3.201 E F0 .701 +(\), or command \(including aliases and functions\) in turn.)B .702 +(If none of these pro-)5.701 F +(duces a match, \214lename completion is attempted.)144 693.6 Q F1 +(possible\255completions \(M\255?\))108 705.6 Q F0 +(List the possible completions of the te)144 717.6 Q(xt before point.) +-.15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(51)185.955 E 0 +Cg EP %%Page: 52 52 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .332 -(If this sequence is bound to "\\[", k)144 84 R -.15(ey)-.1 G 2.831(sp) -.15 G .331(roducing such sequences will ha)-2.831 F .631 -.15(ve n)-.2 H -2.831(oe).15 G -.25(ff)-2.831 G .331(ect unless e).25 F(xplic-)-.15 E -.026(itly bound to a readline command, instead of inserting stray chara\ -cters into the editing b)144 96 R(uf)-.2 E(fer)-.25 E 5.026(.T)-.55 G -(his)-5.026 E(is unbound by def)144 108 Q(ault, b)-.1 E -(ut usually bound to ESC\255[.)-.2 E/F1 10/Times-Bold@0 SF -(insert\255comment \(M\255#\))108 120 Q F0 -.4(Wi)144 132 S .481 -(thout a numeric ar).4 F .481(gument, the v)-.18 F .481 -(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 -.25(va) -2.981 G .48(riable is inserted at the).25 F(be)144 144 Q .244 -(ginning of the current line.)-.15 F .245(If a numeric ar)5.244 F .245 -(gument is supplied, this command acts as a toggle: if)-.18 F .322 -(the characters at the be)144 156 R .321 -(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 -(comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is) --.25 F .831(inserted, otherwise the characters in)144 168 R F1 -(comment\255begin)3.331 E F0 .832(are deleted from the be)3.331 F .832 -(ginning of the line.)-.15 F 1.469 -(In either case, the line is accepted as if a ne)144 180 R 1.468 -(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F -1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 192 Q F0 .839 -(causes this command to mak)3.339 F 3.339(et)-.1 G .839 -(he current line a shell comment.)-3.339 F .84(If a numeric ar)5.84 F -(gu-)-.18 E(ment causes the comment character to be remo)144 204 Q -.15 -(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G -(cuted by the shell.).15 E F1(glob\255complete\255w)108 216 Q -(ord \(M\255g\))-.1 E F0 .792(The w)144 228 R .791 -(ord before point is treated as a pattern for pathname e)-.1 F .791 -(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 240 -R(pattern is used to generate a list of matching \214lenames for possib\ -le completions.)2.5 E F1(glob\255expand\255w)108 252 Q(ord \(C\255x *\)) --.1 E F0 .175(The w)144 264 R .176 -(ord before point is treated as a pattern for pathname e)-.1 F .176 -(xpansion, and the list of matching \214le-)-.15 F .516 -(names is inserted, replacing the w)144 276 R 3.016(ord. If)-.1 F 3.016 -(an)3.016 G .516(umeric ar)-3.016 F .516 -(gument is supplied, an asterisk is appended)-.18 F(before pathname e) -144 288 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\)) -108 300 Q F0 .923(The list of e)144 312 R .923(xpansions that w)-.15 F -.923(ould ha)-.1 F 1.223 -.15(ve b)-.2 H .923(een generated by).15 F F1 -(glob\255expand\255w)3.423 E(ord)-.1 E F0 .923(is displayed, and)3.423 F -.872(the line is redra)144 324 R 3.372(wn. If)-.15 F 3.372(an)3.372 G -.872(umeric ar)-3.372 F .872 -(gument is supplied, an asterisk is appended before pathname)-.18 F -.15 -(ex)144 336 S(pansion.).15 E F1(dump\255functions)108 348 Q F0 .626 -(Print all of the functions and their k)144 360 R .926 -.15(ey b)-.1 H -.627(indings to the readline output stream.).15 F .627(If a numeric ar) -5.627 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 372 Q -(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) -2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 384 Q(ariables)-.1 E F0 -.763(Print all of the settable readline v)144 396 R .762 -(ariables and their v)-.25 F .762(alues to the readline output stream.) --.25 F .762(If a nu-)5.762 F .108(meric ar)144 408 R .108 -(gument is supplied, the output is formatted in such a w)-.18 F .109 -(ay that it can be made part of an)-.1 F F2(in-)2.609 E(putr)144 420 Q -(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 432 Q(os)-.18 E F0 .593 -(Print all of the readline k)144 444 R .893 -.15(ey s)-.1 H .592 -(equences bound to macros and the strings the).15 F 3.092(yo)-.15 G -3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 456 Q -.528(gument is supplied, the output is formatted in such a w)-.18 F .528 -(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0 -(\214le.)144 468 Q F1(display\255shell\255v)108 480 Q -(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 492 Q -(ersion information about the current instance of)-.15 E F1(bash)2.5 E -F0(.)A F1(Pr)87 508.8 Q(ogrammable Completion)-.18 E F0 .147(When w)108 -520.8 R .147(ord completion is attempted for an ar)-.1 F .147 -(gument to a command for which a completion speci\214cation \(a)-.18 F -F2(compspec)108 532.8 Q F0 3.828(\)h)C 1.329 -(as been de\214ned using the)-3.828 F F1(complete)3.829 E F0 -.2(bu) -3.829 G 1.329(iltin \(see).2 F/F3 9/Times-Bold@0 SF 1.329(SHELL B)3.829 -F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F0(belo)3.579 E 1.329(w\), the) --.25 F(programmable completion f)108 544.8 Q(acilities are in)-.1 E -.2 -(vo)-.4 G -.1(ke).2 G(d.).1 E .498 -(First, the command name is identi\214ed.)108 561.6 R .498 -(If the command w)5.498 F .497 -(ord is the empty string \(completion attempted at)-.1 F .233(the be)108 -573.6 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233 -(ompspec de\214ned with the)-2.733 F F12.733 E F0 .233(option to) -2.733 F F1(complete)2.733 E F0 .233(is used.)2.733 F .234(If a comp-) -5.234 F .481(spec has been de\214ned for that command, the compspec is \ -used to generate the list of possible completions)108 585.6 R .822 -(for the w)108 597.6 R 3.322(ord. If)-.1 F .822(the command w)3.322 F -.823(ord is a full pathname, a compspec for the full pathname is search\ -ed for)-.1 F 2.867(\214rst. If)108 609.6 R .366(no compspec is found fo\ -r the full pathname, an attempt is made to \214nd a compspec for the po\ -rtion)2.867 F(follo)108 621.6 Q .298(wing the \214nal slash.)-.25 F .298 -(If those searches do not result in a compspec, an)5.298 F 2.799(yc)-.15 -G .299(ompspec de\214ned with the)-2.799 F F12.799 E F0 .057 -(option to)108 633.6 R F1(complete)2.557 E F0 .056(is used as the def) -2.556 F 2.556(ault. If)-.1 F .056(there is no def)2.556 F .056 -(ault compspec,)-.1 F F1(bash)2.556 E F0 .056(attempts alias e)2.556 F -.056(xpansion on)-.15 F .332(the command w)108 645.6 R .332(ord as a \ -\214nal resort, and attempts to \214nd a compspec for the command w)-.1 -F .332(ord from an)-.1 F 2.833(ys)-.15 G(uc-)-2.833 E(cessful e)108 -657.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\ -d to generate the list of matching w)108 674.4 R 3.317(ords. If)-.1 F -3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 686.4 Q -(ault)-.1 E F1(bash)2.5 E F0(completion as described abo)2.5 E .3 -.15 -(ve u)-.15 H(nder).15 E F1(Completing)2.5 E F0(is performed.)2.5 E .463 -(First, the actions speci\214ed by the compspec are used.)108 703.2 R -.464(Only matches which are pre\214x)5.464 F .464(ed by the w)-.15 F -.464(ord being)-.1 F .596(completed are returned.)108 715.2 R .596 -(When the)5.596 F F13.096 E F0(or)3.095 E F13.095 E F0 .595 -(option is used for \214lename or directory name completion, the)3.095 F -(shell v)108 727.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0 -(is used to \214lter the matches.)2.25 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(52)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(insert\255completions \(M\255*\))108 84 Q F0 .783 +(Insert all completions of the te)144 96 R .783(xt before point that w) +-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H .783(een generated by) +.15 F F1(possible\255com-)3.282 E(pletions)144 108 Q F0(.)A F1 +(menu\255complete)108 120 Q F0 .928(Similar to)144 132 R F1(complete) +3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 F .929 +(ord to be completed with a single match from the list of)-.1 F 1.194 +(possible completions.)144 144 R 1.194(Repeated e)6.194 F -.15(xe)-.15 G +1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193 +(steps through the list of possible)3.694 F .828 +(completions, inserting each match in turn.)144 156 R .828 +(At the end of the list of completions, the bell is rung)5.828 F .727 +(\(subject to the setting of)144 168 R F1(bell\255style)3.227 E F0 3.227 +(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F .727 +(An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227 E +F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.227 E F0 1.73 +(positions forw)144 180 R 1.73(ard in the list of matches; a ne)-.1 F +-.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73 +(ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1 +E(through the list.)144 192 Q(This command is intended to be bound to)5 +E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E(ault.) +-.1 E F1(menu\255complete\255backward)108 204 Q F0 .82(Identical to)144 +216 R F1(menu\255complete)3.32 E F0 3.32(,b)C .82(ut mo)-3.52 F -.15(ve) +-.15 G 3.32(sb).15 G(ackw)-3.32 E .82 +(ard through the list of possible completions, as if)-.1 F F1 +(menu\255complete)144 228 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5(nan) +.15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg).15 G +2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E F1 +(delete\255char\255or\255list)108 240 Q F0 .234 +(Deletes the character under the cursor if not at the be)144 252 R .234 +(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char)2.735 +E F0(\).)A .425(If at the end of the line, beha)144 264 R -.15(ve)-.2 G +2.925(si).15 G .425(dentically to)-2.925 F F1(possible\255completions) +2.925 E F0 5.425(.T)C .425(his command is unbound)-5.425 F(by def)144 +276 Q(ault.)-.1 E F1(complete\255\214lename \(M\255/\))108 288 Q F0 +(Attempt \214lename completion on the te)144 300 Q(xt before point.)-.15 +E F1(possible\255\214lename\255completions \(C\255x /\))108 312 Q F0 +(List the possible completions of the te)144 324 Q +(xt before point, treating it as a \214lename.)-.15 E F1 +(complete\255user)108 336 Q(name \(M\255~\))-.15 E F0 +(Attempt completion on the te)144 348 Q +(xt before point, treating it as a username.)-.15 E F1(possible\255user) +108 360 Q(name\255completions \(C\255x ~\))-.15 E F0 +(List the possible completions of the te)144 372 Q +(xt before point, treating it as a username.)-.15 E F1(complete\255v)108 +384 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 396 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 +(possible\255v)108 408 Q(ariable\255completions \(C\255x $\))-.1 E F0 +(List the possible completions of the te)144 420 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 +(complete\255hostname \(M\255@\))108 432 Q F0 +(Attempt completion on the te)144 444 Q +(xt before point, treating it as a hostname.)-.15 E F1 +(possible\255hostname\255completions \(C\255x @\))108 456 Q F0 +(List the possible completions of the te)144 468 Q +(xt before point, treating it as a hostname.)-.15 E F1 +(complete\255command \(M\255!\))108 480 Q F0 .58 +(Attempt completion on the te)144 492 R .581 +(xt before point, treating it as a command name.)-.15 F .581 +(Command comple-)5.581 F .715(tion attempts to match the te)144 504 R +.715(xt ag)-.15 F .715(ainst aliases, reserv)-.05 F .715(ed w)-.15 F +.715(ords, shell functions, shell b)-.1 F .715(uiltins, and)-.2 F +(\214nally e)144 516 Q -.15(xe)-.15 G +(cutable \214lenames, in that order).15 E(.)-.55 E F1 +(possible\255command\255completions \(C\255x !\))108 528 Q F0 +(List the possible completions of the te)144 540 Q +(xt before point, treating it as a command name.)-.15 E F1 +(dynamic\255complete\255history \(M\255T)108 552 Q(AB\))-.9 E F0 .424 +(Attempt completion on the te)144 564 R .425 +(xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .425 +(ainst lines from the history list)-.05 F +(for possible completion matches.)144 576 Q F1(dab)108 588 Q(br)-.1 E +-.15(ev)-.18 G(\255expand).15 E F0 .611 +(Attempt menu completion on the te)144 600 R .611 +(xt before point, comparing the te)-.15 F .61(xt ag)-.15 F .61 +(ainst lines from the his-)-.05 F +(tory list for possible completion matches.)144 612 Q F1 +(complete\255into\255braces \(M\255{\))108 624 Q F0 .4(Perform \214lena\ +me completion and insert the list of possible completions enclosed with\ +in braces so)144 636 R(the list is a)144 648 Q -.25(va)-.2 G +(ilable to the shell \(see).25 E F1(Brace Expansion)2.5 E F0(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F1 -.25(Ke)87 664.8 S(yboard Macr).25 E(os)-.18 +E(start\255kbd\255macr)108 676.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) +.833 E F0(Be)144 688.8 Q(gin sa)-.15 E +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro.).15 E F1(end\255kbd\255macr)108 700.8 Q 2.5(o\()-.18 G +(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 712.8 Q +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro and store the de\214nition.).15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(52)185.955 E 0 Cg EP %%Page: 53 53 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(An)108 84 Q 4.084 -(yc)-.15 G 1.584(ompletions speci\214ed by a pathname e)-4.084 F 1.584 -(xpansion pattern to the)-.15 F/F1 10/Times-Bold@0 SF4.084 E F0 -1.584(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 96 -S .555(rds generated by the pattern need not match the w).1 F .554 -(ord being completed.)-.1 F(The)5.554 E/F2 9/Times-Bold@0 SF(GLOBIGNORE) -3.054 E F0 .554(shell v)2.804 F(ari-)-.25 E -(able is not used to \214lter the matches, b)108 108 Q(ut the)-.2 E F2 -(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 124.8 Q -.32(xt, the string speci\214ed as the ar)-.15 F .32(gument to the)-.18 F -F12.82 E F0 .321(option is considered.)2.821 F .321 -(The string is \214rst split using the)5.321 F .413(characters in the) -108 136.8 R F2(IFS)2.913 E F0 .412(special v)2.663 F .412 -(ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F -.412(Each w)5.412 F .412(ord is then e)-.1 F(xpanded)-.15 E .091 -(using brace e)108 148.8 R .091(xpansion, tilde e)-.15 F .092 -(xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .092 -(xpansion, command substitution, and arith-)-.15 F 1.397(metic e)108 -160.8 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H -(nder).15 E F2(EXP)3.896 E(ANSION)-.666 E/F3 9/Times-Roman@0 SF(.)A F0 -1.396(The results are split using the rules described)5.896 F(abo)108 -172.8 Q .509 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.709 G .209 -(rd Splitting).75 F F0 5.209(.T)C .209(he results of the e)-5.209 F .209 -(xpansion are pre\214x-matched ag)-.15 F .21(ainst the w)-.05 F .21 -(ord being com-)-.1 F(pleted, and the matching w)108 184.8 Q -(ords become the possible completions.)-.1 E .234 -(After these matches ha)108 201.6 R .534 -.15(ve b)-.2 H .234 -(een generated, an).15 F 2.734(ys)-.15 G .233 -(hell function or command speci\214ed with the)-2.734 F F12.733 E -F0(and)2.733 E F12.733 E F0(op-)2.733 E 4.208(tions is in)108 -213.6 R -.2(vo)-.4 G -.1(ke).2 G 6.708(d. When).1 F 4.209 -(the command or function is in)6.708 F -.2(vo)-.4 G -.1(ke).2 G 4.209 -(d, the).1 F F2(COMP_LINE)6.709 E F3(,)A F2(COMP_POINT)6.459 E F3(,)A F2 -(COMP_KEY)108 225.6 Q F3(,)A F0(and)2.408 E F2(COMP_TYPE)2.658 E F0 -.25 -(va)2.408 G .157(riables are assigned v).25 F .157 -(alues as described abo)-.25 F .457 -.15(ve u)-.15 H(nder).15 E F1 .157 -(Shell V)2.657 F(ariables)-.92 E F0 5.157(.I)C(f)-5.157 E 3.485(as)108 -237.6 S .986(hell function is being in)-3.485 F -.2(vo)-.4 G -.1(ke).2 G -.986(d, the).1 F F2(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F2 -(COMP_CW)3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986 -(riables are also set.).25 F(When)5.986 E .347 -(the function or command is in)108 249.6 R -.2(vo)-.4 G -.1(ke).2 G .347 -(d, the \214rst ar).1 F .346(gument \()-.18 F F1($1)A F0 2.846(\)i)C -2.846(st)-2.846 G .346(he name of the command whose ar)-2.846 F(guments) --.18 E .263(are being completed, the second ar)108 261.6 R .263 -(gument \()-.18 F F1($2)A F0 2.763(\)i)C 2.763(st)-2.763 G .264(he w) --2.763 F .264(ord being completed, and the third ar)-.1 F .264 -(gument \()-.18 F F1($3)A F0 2.764(\)i)C(s)-2.764 E .629(the w)108 273.6 -R .629(ord preceding the w)-.1 F .629 -(ord being completed on the current command line.)-.1 F .628 -(No \214ltering of the generated)5.629 F .714(completions ag)108 285.6 R -.714(ainst the w)-.05 F .714(ord being completed is performed; the func\ -tion or command has complete free-)-.1 F(dom in generating the matches.) -108 297.6 Q(An)108 314.4 Q 2.938(yf)-.15 G .437 -(unction speci\214ed with)-2.938 F F12.937 E F0 .437(is in)2.937 F --.2(vo)-.4 G -.1(ke).2 G 2.937<648c>.1 G 2.937(rst. The)-2.937 F .437 -(function may use an)2.937 F 2.937(yo)-.15 G 2.937(ft)-2.937 G .437 -(he shell f)-2.937 F .437(acilities, including)-.1 F(the)108 326.4 Q F1 -(compgen)2.956 E F0 -.2(bu)2.956 G .456(iltin described belo).2 F 1.756 --.65(w, t)-.25 H 2.956(og).65 G .456(enerate the matches.)-2.956 F .457 -(It must put the possible completions in the)5.456 F F2(COMPREPL)108 -338.4 Q(Y)-.828 E F0(array v)2.25 E(ariable, one per array element.)-.25 -E(Ne)108 355.2 Q .081(xt, an)-.15 F 2.581(yc)-.15 G .081 -(ommand speci\214ed with the)-2.581 F F12.581 E F0 .081 -(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.58(na) --2.581 G 2.58(ne)-2.58 G -.4(nv)-2.58 G .08(ironment equi).4 F -.25(va) --.25 G .08(lent to command sub-).25 F 2.858(stitution. It)108 367.2 R -.359(should print a list of completions, one per line, to the standard \ -output.)2.858 F .359(Backslash may be used)5.359 F(to escape a ne)108 -379.2 Q(wline, if necessary)-.25 E(.)-.65 E .377 -(After all of the possible completions are generated, an)108 396 R 2.877 -<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F12.876 E F0 -.376(option is applied to the)2.876 F 3.181(list. The)108 408 R .681 -(\214lter is a pattern as used for pathname e)3.181 F .681(xpansion; a) --.15 F F1(&)3.181 E F0 .682(in the pattern is replaced with the te)3.182 -F .682(xt of)-.15 F .523(the w)108 420 R .523(ord being completed.)-.1 F -3.023(Al)5.523 G(iteral)-3.023 E F1(&)3.023 E F0 .522 -(may be escaped with a backslash; the backslash is remo)3.022 F -.15(ve) --.15 G 3.022(db).15 G(efore)-3.022 E .849(attempting a match.)108 432 R -(An)5.849 E 3.349(yc)-.15 G .849 -(ompletion that matches the pattern will be remo)-3.349 F -.15(ve)-.15 G -3.35(df).15 G .85(rom the list.)-3.35 F 3.35(Al)5.85 G(eading)-3.35 E F1 -(!)3.35 E F0(ne)108 444 Q -.05(ga)-.15 G .764 -(tes the pattern; in this case an).05 F 3.264(yc)-.15 G .764 -(ompletion not matching the pattern will be remo)-3.264 F -.15(ve)-.15 G -3.264(d. If).15 F(the)3.264 E F1(nocase-)3.264 E(match)108 456 Q F0 -(shell option is enabled, the match is performed without re)2.5 E -.05 -(ga)-.15 G(rd to the case of alphabetic characters.).05 E(Finally)108 -472.8 Q 3.086(,a)-.65 G .886 -.15(ny p)-3.086 H .586(re\214x and suf).15 -F .587(\214x speci\214ed with the)-.25 F F13.087 E F0(and)3.087 E -F13.087 E F0 .587(options are added to each member of the com-) -3.087 F(pletion list, and the result is returned to the readline comple\ -tion code as the list of possible completions.)108 484.8 Q .247 -(If the pre)108 501.6 R .247(viously-applied actions do not generate an) --.25 F 2.747(ym)-.15 G .247(atches, and the)-2.747 F F1 .247(\255o dir) -2.747 F(names)-.15 E F0 .247(option w)2.747 F .246(as supplied to)-.1 F -F1(complete)108 513.6 Q F0(when the compspec w)2.5 E -(as de\214ned, directory name completion is attempted.)-.1 E .461 -(If the)108 530.4 R F1 .462(\255o plusdirs)2.961 F F0 .462(option w) -2.962 F .462(as supplied to)-.1 F F1(complete)2.962 E F0 .462 -(when the compspec w)2.962 F .462(as de\214ned, directory name com-)-.1 -F(pletion is attempted and an)108 542.4 Q 2.5(ym)-.15 G -(atches are added to the results of the other actions.)-2.5 E .56 -(By def)108 559.2 R .56(ault, if a compspec is found, whate)-.1 F -.15 -(ve)-.25 G 3.06(ri).15 G 3.06(tg)-3.06 G .559 -(enerates is returned to the completion code as the full set)-3.06 F -.631(of possible completions.)108 571.2 R .631(The def)5.631 F(ault)-.1 -E F1(bash)3.131 E F0 .631 -(completions are not attempted, and the readline def)3.131 F .632 -(ault of \214le-)-.1 F .559(name completion is disabled.)108 583.2 R -.559(If the)5.559 F F1 .559(\255o bashdefault)3.059 F F0 .559(option w) -3.059 F .559(as supplied to)-.1 F F1(complete)3.058 E F0 .558 -(when the compspec)3.058 F -.1(wa)108 595.2 S 3.171(sd).1 G .671 -(e\214ned, the)-3.171 F F1(bash)3.171 E F0(def)3.171 E .671 -(ault completions are attempted if the compspec generates no matches.) --.1 F .672(If the)5.672 F F13.172 E(default)108 607.2 Q F0 1.207 -(option w)3.707 F 1.207(as supplied to)-.1 F F1(complete)3.707 E F0 -1.207(when the compspec w)3.707 F 1.207(as de\214ned, readline')-.1 F -3.707(sd)-.55 G(ef)-3.707 E 1.206(ault completion)-.1 F -(will be performed if the compspec \(and, if attempted, the def)108 -619.2 Q(ault)-.1 E F1(bash)2.5 E F0(completions\) generate no matches.) -2.5 E .245(When a compspec indicates that directory name completion is \ -desired, the programmable completion func-)108 636 R .633(tions force r\ -eadline to append a slash to completed names which are symbolic links t\ -o directories, subject)108 648 R 2.761(to the v)108 660 R 2.761 -(alue of the)-.25 F F1(mark\255dir)5.261 E(ectories)-.18 E F0 2.761 -(readline v)5.261 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.762 -(rdless of the setting of the).05 F F1(mark-sym-)5.262 E(link)108 672 Q -(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E -.191(There is some support for dynamically modifying completions.)108 -688.8 R .19(This is most useful when used in combina-)5.191 F 1.172 -(tion with a def)108 700.8 R 1.172(ault completion speci\214ed with)-.1 -F F1 1.172(complete \255D)3.672 F F0 6.172(.I)C(t')-6.172 E 3.672(sp) --.55 G 1.172(ossible for shell functions e)-3.672 F -.15(xe)-.15 G 1.172 -(cuted as).15 F .93(completion handlers to indicate that completion sho\ -uld be retried by returning an e)108 712.8 R .93(xit status of 124.)-.15 -F .93(If a)5.93 F .1(shell function returns 124, and changes the compsp\ -ec associated with the command on which completion is)108 724.8 R -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(53)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(call\255last\255kbd\255macr)108 84 Q 2.5(o\()-.18 G(C\255x e\))-2.5 E +F0(Re-e)144 96 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1 G +.999(board macro de\214ned, by making the characters in the macro appea\ +r as if).15 F(typed at the k)144 108 Q -.15(ey)-.1 G(board.).15 E F1 +(print\255last\255kbd\255macr)108 120 Q 2.5(o\()-.18 G(\))-2.5 E F0 +(Print the last k)144 132 Q -.15(ey)-.1 G +(board macro de\214ned in a format suitable for the).15 E/F2 10 +/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1 +(Miscellaneous)87 148.8 Q -.18(re)108 160.8 S.18 E +(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776 +(Read in the contents of the)144 172.8 R F2(inputr)4.276 E(c)-.37 E F0 +1.777(\214le, and incorporate an)4.276 F 4.277(yb)-.15 G 1.777 +(indings or v)-4.277 F 1.777(ariable assignments)-.25 F(found there.)144 +184.8 Q F1(abort \(C\255g\))108 196.8 Q F0 3.249 +(Abort the current editing command and ring the terminal')144 208.8 R +5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1 +(bell\255style)144 220.8 Q F0(\).)A F1(do\255lo)108 232.8 Q(wer)-.1 E +(case\255v)-.18 E(ersion \(M\255A, M\255B, M\255)-.1 E F2(x)A F1 2.5(,.) +C(..\))-2.5 E F0 1.738(If the meta\214ed character)144 244.8 R F2(x) +4.238 E F0 1.739 +(is uppercase, run the command that is bound to the corresponding)4.238 +F(meta\214ed lo)144 256.8 Q(wercase character)-.25 E 5(.T)-.55 G +(he beha)-5 E(vior is unde\214ned if)-.2 E F2(x)2.5 E F0(is already lo) +2.5 E(wercase.)-.25 E F1(pr)108 268.8 Q(e\214x\255meta \(ESC\))-.18 E F0 +(Metafy the ne)144 280.8 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0 +SF(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 +(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 292.8 Q F0 +(Incremental undo, separately remembered for each line.)144 304.8 Q F1 +-2.29 -.18(re v)108 316.8 T(ert\255line \(M\255r\)).08 E F0 .231 +(Undo all changes made to this line.)144 328.8 R .231(This is lik)5.231 +F 2.731(ee)-.1 G -.15(xe)-2.881 G .23(cuting the).15 F F1(undo)2.73 E F0 +.23(command enough times to re-)2.73 F +(turn the line to its initial state.)144 340.8 Q F1 +(tilde\255expand \(M\255&\))108 352.8 Q F0(Perform tilde e)144 364.8 Q +(xpansion on the current w)-.15 E(ord.)-.1 E F1 +(set\255mark \(C\255@, M\255\))108 376.8 Q F0 +(Set the mark to the point.)144 388.8 Q(If a numeric ar)5 E +(gument is supplied, the mark is set to that position.)-.18 E F1 +(exchange\255point\255and\255mark \(C\255x C\255x\))108 400.8 Q F0(Sw) +144 412.8 Q .282(ap the point with the mark.)-.1 F .283 +(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G +2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) +144 424.8 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 +(character\255sear)108 436.8 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 +448.8 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G +3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 +(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 +(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) +144 460.8 Q(vious occurrences.)-.25 E F1(character\255sear)108 472.8 Q +(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 484.8 S 1.043 +(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G +3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 +(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E +-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G +(count searches for subsequent occurrences.)144 496.8 Q F1 +(skip\255csi\255sequence)108 508.8 Q F0 1.827 +(Read enough characters to consume a multi-k)144 520.8 R 2.126 -.15 +(ey s)-.1 H 1.826(equence such as those de\214ned for k).15 F -.15(ey) +-.1 G 4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 532.8 R +.791(Such sequences be)5.79 F .791 +(gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F +.332(If this sequence is bound to "\\[", k)144 544.8 R -.15(ey)-.1 G +2.831(sp).15 G .331(roducing such sequences will ha)-2.831 F .631 -.15 +(ve n)-.2 H 2.831(oe).15 G -.25(ff)-2.831 G .331(ect unless e).25 F +(xplic-)-.15 E .026(itly bound to a readline command, instead of insert\ +ing stray characters into the editing b)144 556.8 R(uf)-.2 E(fer)-.25 E +5.026(.T)-.55 G(his)-5.026 E(is unbound by def)144 568.8 Q(ault, b)-.1 E +(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 +580.8 Q F0 -.4(Wi)144 592.8 S .481(thout a numeric ar).4 F .481 +(gument, the v)-.18 F .481(alue of the readline)-.25 F F1 +(comment\255begin)2.981 E F0 -.25(va)2.981 G .48 +(riable is inserted at the).25 F(be)144 604.8 Q .244 +(ginning of the current line.)-.15 F .245(If a numeric ar)5.244 F .245 +(gument is supplied, this command acts as a toggle: if)-.18 F .322 +(the characters at the be)144 616.8 R .321 +(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 +(comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is) +-.25 F .831(inserted, otherwise the characters in)144 628.8 R F1 +(comment\255begin)3.331 E F0 .832(are deleted from the be)3.331 F .832 +(ginning of the line.)-.15 F 1.469 +(In either case, the line is accepted as if a ne)144 640.8 R 1.468 +(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F +1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 652.8 Q F0 .839 +(causes this command to mak)3.339 F 3.339(et)-.1 G .839 +(he current line a shell comment.)-3.339 F .84(If a numeric ar)5.84 F +(gu-)-.18 E(ment causes the comment character to be remo)144 664.8 Q +-.15(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G +(cuted by the shell.).15 E F1(spell\255corr)108 676.8 Q(ect\255w)-.18 E +(ord \(C\255x s\))-.1 E F0 .421 +(Perform spelling correction on the current w)144 688.8 R .42 +(ord, treating it as a directory or \214lename, in the same)-.1 F -.1 +(wa)144 700.8 S 4.717(ya).1 G 4.717(st)-4.717 G(he)-4.717 E F1(cdspell) +4.717 E F0 2.217(shell option.)4.717 F -.8(Wo)7.217 G 2.217 +(rd boundaries are the same as those used by).8 F F1(shell\255f)4.718 E +(or)-.25 E(-)-.37 E(ward\255w)144 712.8 Q(ord)-.1 E F0(.)A(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(53)185.955 E 0 Cg EP %%Page: 54 54 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .666 -(being attempted \(supplied as the \214rst ar)108 84 R .665 -(gument when the function is e)-.18 F -.15(xe)-.15 G .665 -(cuted\), programmable completion).15 F .083(restarts from the be)108 96 -R .084(ginning, with an attempt to \214nd a ne)-.15 F 2.584(wc)-.25 G -.084(ompspec for that command.)-2.584 F .084(This allo)5.084 F .084 -(ws a set of)-.25 F(completions to be b)108 108 Q(uilt dynamically as c\ -ompletion is attempted, rather than being loaded all at once.)-.2 E -.15 -(Fo)108 124.8 S 2.637(ri).15 G .137 -(nstance, assuming that there is a library of compspecs, each k)-2.637 F -.137(ept in a \214le corresponding to the name of)-.1 F -(the command, the follo)108 136.8 Q(wing def)-.25 E -(ault completion function w)-.1 E(ould load completions dynamically:)-.1 -E/F1 10/Courier@0 SF(_completion_loader\(\))108 153.6 Q({)108 165.6 Q 6 -(.")144 177.6 S -(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 E(})108 -189.6 Q(complete -D -F _completion_loader -o bashdefault -o default)108 -201.6 Q/F2 10.95/Times-Bold@0 SF(HIST)72 230.4 Q(OR)-.197 E(Y)-.383 E F0 -.371(When the)108 242.4 R/F3 10/Times-Bold@0 SF .371(\255o history)2.871 -F F0 .371(option to the)2.871 F F3(set)2.872 E F0 -.2(bu)2.872 G .372 -(iltin is enabled, the shell pro).2 F .372(vides access to the)-.15 F/F4 -10/Times-Italic@0 SF .372(command history)2.872 F F0(,)A .305 -(the list of commands pre)108 254.4 R .305(viously typed.)-.25 F .305 -(The v)5.305 F .304(alue of the)-.25 F/F5 9/Times-Bold@0 SF(HISTSIZE) -2.804 E F0 -.25(va)2.554 G .304(riable is used as the number of com-).25 -F .429(mands to sa)108 266.4 R .729 -.15(ve i)-.2 H 2.929(nah).15 G .429 -(istory list.)-2.929 F .429(The te)5.429 F .429(xt of the last)-.15 F F5 -(HISTSIZE)2.93 E F0 .43(commands \(def)2.68 F .43(ault 500\) is sa)-.1 F --.15(ve)-.2 G 2.93(d. The).15 F(shell)2.93 E .287 -(stores each command in the history list prior to parameter and v)108 -278.4 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F5(EXP)2.787 E -(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 290.4 -S 4.065(ta).2 G 1.565(fter history e)-4.065 F 1.565 -(xpansion is performed, subject to the v)-.15 F 1.565 -(alues of the shell v)-.25 F(ariables)-.25 E F5(HISTIGNORE)4.065 E F0 -(and)3.816 E F5(HISTCONTR)108 302.4 Q(OL)-.27 E/F6 9/Times-Roman@0 SF(.) -A F0 .082 -(On startup, the history is initialized from the \214le named by the v) -108 319.2 R(ariable)-.25 E F5(HISTFILE)2.582 E F0(\(def)2.332 E(ault)-.1 -E F4(~/.bash_history)2.582 E F0(\).)A .315(The \214le named by the v)108 -331.2 R .315(alue of)-.25 F F5(HISTFILE)2.815 E F0 .315 -(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815(oc)-2.815 G -.315(ontain no more than the number of)-2.815 F .659 -(lines speci\214ed by the v)108 343.2 R .659(alue of)-.25 F F5 -(HISTFILESIZE)3.158 E F6(.)A F0(If)5.158 E F3(HISTFILESIZE)3.158 E F0 -.658(is unset, or set to null, a non-numeric)3.158 F -.25(va)108 355.2 S -.142(lue, or a numeric v).25 F .142 -(alue less than zero, the history \214le is not truncated.)-.25 F .142 -(When the history \214le is read, lines)5.142 F(be)108 367.2 Q 1.605 -(ginning with the history comment character follo)-.15 F 1.604 -(wed immediately by a digit are interpreted as time-)-.25 F .15 -(stamps for the follo)108 379.2 R .15(wing history line.)-.25 F .151 -(These timestamps are optionally displayed depending on the v)5.151 F -.151(alue of)-.25 F(the)108 391.2 Q F5(HISTTIMEFORMA)3.559 E(T)-.855 E -F0 -.25(va)3.309 G 3.559(riable. When).25 F 3.559(as)3.559 G 1.059 -(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F5 -($HISTSIZE)3.559 E F0 1.058(lines are)3.309 F .158 -(copied from the history list to)108 403.2 R F5($HISTFILE)2.658 E F6(.)A -F0 .158(If the)4.658 F F3(histappend)2.658 E F0 .159 -(shell option is enabled \(see the description of)2.659 F F3(shopt)108 -415.2 Q F0(under)2.582 E F5 .082(SHELL B)2.582 F(UIL)-.09 E .082 -(TIN COMMANDS)-.828 F F0(belo)2.332 E .082 -(w\), the lines are appended to the history \214le, otherwise the)-.25 F -.196(history \214le is o)108 427.2 R -.15(ve)-.15 G 2.696(rwritten. If) -.15 F F5(HISTFILE)2.696 E F0 .197(is unset, or if the history \214le is\ - unwritable, the history is not sa)2.446 F -.15(ve)-.2 G(d.).15 E .584 -(If the)108 439.2 R F5(HISTTIMEFORMA)3.084 E(T)-.855 E F0 -.25(va)2.834 -G .584 -(riable is set, time stamps are written to the history \214le, mark).25 -F .583(ed with the his-)-.1 F 1.147(tory comment character)108 451.2 R -3.647(,s)-.4 G 3.647(ot)-3.647 G(he)-3.647 E 3.647(ym)-.15 G 1.147 -(ay be preserv)-3.647 F 1.147(ed across shell sessions.)-.15 F 1.148 -(This uses the history comment)6.148 F 1.377 -(character to distinguish timestamps from other history lines.)108 463.2 -R 1.377(After sa)6.377 F 1.377(ving the history)-.2 F 3.876(,t)-.65 G -1.376(he history \214le is)-3.876 F .756 -(truncated to contain no more than)108 475.2 R F5(HISTFILESIZE)3.257 E -F0 3.257(lines. If)3.007 F F5(HISTFILESIZE)3.257 E F0 .757 -(is unset, or set to null, a non-)3.007 F(numeric v)108 487.2 Q -(alue, or a numeric v)-.25 E -(alue less than zero, the history \214le is not truncated.)-.25 E .299 -(The b)108 504 R .299(uiltin command)-.2 F F3(fc)2.799 E F0(\(see)2.799 -E F5 .299(SHELL B)2.799 F(UIL)-.09 E .299(TIN COMMANDS)-.828 F F0(belo) -2.549 E .298(w\) may be used to list or edit and re-e)-.25 F -.15(xe) --.15 G(-).15 E .471(cute a portion of the history list.)108 516 R(The) -5.471 E F3(history)2.971 E F0 -.2(bu)2.971 G .472 -(iltin may be used to display or modify the history list and).2 F .002 -(manipulate the history \214le.)108 528 R .001 -(When using command-line editing, search commands are a)5.002 F -.25(va) --.2 G .001(ilable in each edit-).25 F(ing mode that pro)108 540 Q -(vide access to the history list.)-.15 E 1.485(The shell allo)108 556.8 -R 1.485(ws control o)-.25 F -.15(ve)-.15 G 3.986(rw).15 G 1.486 -(hich commands are sa)-3.986 F -.15(ve)-.2 G 3.986(do).15 G 3.986(nt) --3.986 G 1.486(he history list.)-3.986 F(The)6.486 E F5(HISTCONTR)3.986 -E(OL)-.27 E F0(and)3.736 E F5(HISTIGNORE)108 568.8 Q F0 -.25(va)2.708 G -.458(riables may be set to cause the shell to sa).25 F .757 -.15(ve o) --.2 H .457(nly a subset of the commands entered.).15 F(The)5.457 E F3 -(cmdhist)108 580.8 Q F0 .75 -(shell option, if enabled, causes the shell to attempt to sa)3.25 F 1.05 --.15(ve e)-.2 H .75(ach line of a multi-line command in).15 F 1.077 -(the same history entry)108 592.8 R 3.577(,a)-.65 G 1.077 -(dding semicolons where necessary to preserv)-3.577 F 3.577(es)-.15 G -1.077(yntactic correctness.)-3.577 F(The)6.077 E F3(lithist)3.576 E F0 -.373(shell option causes the shell to sa)108 604.8 R .674 -.15(ve t)-.2 -H .374(he command with embedded ne).15 F .374 -(wlines instead of semicolons.)-.25 F .374(See the)5.374 F .319 -(description of the)108 616.8 R F3(shopt)2.819 E F0 -.2(bu)2.819 G .318 -(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F5 .318(SHELL B)2.818 F -(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .318 -(for information on setting and)2.568 F(unsetting shell options.)108 -628.8 Q F2(HIST)72 645.6 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E -(ANSION)-.81 E F0 .61(The shell supports a history e)108 657.6 R .611 -(xpansion feature that is similar to the history e)-.15 F .611 -(xpansion in)-.15 F F3(csh)3.111 E F0 5.611(.T)C .611(his section)-5.611 -F .871(describes what syntax features are a)108 669.6 R -.25(va)-.2 G -3.371(ilable. This).25 F .871(feature is enabled by def)3.371 F .87 -(ault for interacti)-.1 F 1.17 -.15(ve s)-.25 H .87(hells, and).15 F -.949(can be disabled using the)108 681.6 R F3(+H)3.449 E F0 .949 -(option to the)3.449 F F3(set)3.449 E F0 -.2(bu)3.449 G .949 -(iltin command \(see).2 F F5 .949(SHELL B)3.449 F(UIL)-.09 E .95 -(TIN COMMANDS)-.828 F F0(be-)3.2 E(lo)108 693.6 Q 2.5 -(w\). Non-interacti)-.25 F .3 -.15(ve s)-.25 H -(hells do not perform history e).15 E(xpansion by def)-.15 E(ault.)-.1 E -1.306(History e)108 710.4 R 1.306(xpansions introduce w)-.15 F 1.306(or\ -ds from the history list into the input stream, making it easy to repea\ -t)-.1 F .209(commands, insert the ar)108 722.4 R .209(guments to a pre) --.18 F .21 -(vious command into the current input line, or \214x errors in pre)-.25 -F(vious)-.25 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(54) -190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(glob\255complete\255w)108 84 Q(ord \(M\255g\))-.1 E F0 .792(The w)144 +96 R .791(ord before point is treated as a pattern for pathname e)-.1 F +.791(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 +108 R(pattern is used to generate a list of matching \214lenames for po\ +ssible completions.)2.5 E F1(glob\255expand\255w)108 120 Q +(ord \(C\255x *\))-.1 E F0 .175(The w)144 132 R .176 +(ord before point is treated as a pattern for pathname e)-.1 F .176 +(xpansion, and the list of matching \214le-)-.15 F .516 +(names is inserted, replacing the w)144 144 R 3.016(ord. If)-.1 F 3.016 +(an)3.016 G .516(umeric ar)-3.016 F .516 +(gument is supplied, an asterisk is appended)-.18 F(before pathname e) +144 156 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\)) +108 168 Q F0 .923(The list of e)144 180 R .923(xpansions that w)-.15 F +.923(ould ha)-.1 F 1.223 -.15(ve b)-.2 H .923(een generated by).15 F F1 +(glob\255expand\255w)3.423 E(ord)-.1 E F0 .923(is displayed, and)3.423 F +.872(the line is redra)144 192 R 3.372(wn. If)-.15 F 3.372(an)3.372 G +.872(umeric ar)-3.372 F .872 +(gument is supplied, an asterisk is appended before pathname)-.18 F -.15 +(ex)144 204 S(pansion.).15 E F1(dump\255functions)108 216 Q F0 .626 +(Print all of the functions and their k)144 228 R .926 -.15(ey b)-.1 H +.627(indings to the readline output stream.).15 F .627(If a numeric ar) +5.627 F(gu-)-.18 E +(ment is supplied, the output is formatted in such a w)144 240 Q +(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) +2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 252 Q(ariables)-.1 E F0 +.763(Print all of the settable readline v)144 264 R .762 +(ariables and their v)-.25 F .762(alues to the readline output stream.) +-.25 F .762(If a nu-)5.762 F .108(meric ar)144 276 R .108 +(gument is supplied, the output is formatted in such a w)-.18 F .109 +(ay that it can be made part of an)-.1 F F2(in-)2.609 E(putr)144 288 Q +(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 300 Q(os)-.18 E F0 .593 +(Print all of the readline k)144 312 R .893 -.15(ey s)-.1 H .592 +(equences bound to macros and the strings the).15 F 3.092(yo)-.15 G +3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 324 Q +.528(gument is supplied, the output is formatted in such a w)-.18 F .528 +(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0 +(\214le.)144 336 Q F1(display\255shell\255v)108 348 Q +(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 360 Q +(ersion information about the current instance of)-.15 E F1(bash)2.5 E +F0(.)A F1(Pr)87 376.8 Q(ogrammable Completion)-.18 E F0 .147(When w)108 +388.8 R .147(ord completion is attempted for an ar)-.1 F .147 +(gument to a command for which a completion speci\214cation \(a)-.18 F +F2(compspec)108 400.8 Q F0 3.828(\)h)C 1.329 +(as been de\214ned using the)-3.828 F F1(complete)3.829 E F0 -.2(bu) +3.829 G 1.329(iltin \(see).2 F/F3 9/Times-Bold@0 SF 1.329(SHELL B)3.829 +F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F0(belo)3.579 E 1.329(w\), the) +-.25 F(programmable completion f)108 412.8 Q(acilities are in)-.1 E -.2 +(vo)-.4 G -.1(ke).2 G(d.).1 E .498 +(First, the command name is identi\214ed.)108 429.6 R .498 +(If the command w)5.498 F .497 +(ord is the empty string \(completion attempted at)-.1 F .233(the be)108 +441.6 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233 +(ompspec de\214ned with the)-2.733 F F12.733 E F0 .233(option to) +2.733 F F1(complete)2.733 E F0 .233(is used.)2.733 F .234(If a comp-) +5.234 F .481(spec has been de\214ned for that command, the compspec is \ +used to generate the list of possible completions)108 453.6 R .822 +(for the w)108 465.6 R 3.322(ord. If)-.1 F .822(the command w)3.322 F +.823(ord is a full pathname, a compspec for the full pathname is search\ +ed for)-.1 F 2.867(\214rst. If)108 477.6 R .366(no compspec is found fo\ +r the full pathname, an attempt is made to \214nd a compspec for the po\ +rtion)2.867 F(follo)108 489.6 Q .298(wing the \214nal slash.)-.25 F .298 +(If those searches do not result in a compspec, an)5.298 F 2.799(yc)-.15 +G .299(ompspec de\214ned with the)-2.799 F F12.799 E F0 .057 +(option to)108 501.6 R F1(complete)2.557 E F0 .056(is used as the def) +2.556 F 2.556(ault. If)-.1 F .056(there is no def)2.556 F .056 +(ault compspec,)-.1 F F1(bash)2.556 E F0 .056(attempts alias e)2.556 F +.056(xpansion on)-.15 F .332(the command w)108 513.6 R .332(ord as a \ +\214nal resort, and attempts to \214nd a compspec for the command w)-.1 +F .332(ord from an)-.1 F 2.833(ys)-.15 G(uc-)-2.833 E(cessful e)108 +525.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\ +d to generate the list of matching w)108 542.4 R 3.317(ords. If)-.1 F +3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 554.4 Q +(ault)-.1 E F1(bash)2.5 E F0(completion as described abo)2.5 E .3 -.15 +(ve u)-.15 H(nder).15 E F1(Completing)2.5 E F0(is performed.)2.5 E .463 +(First, the actions speci\214ed by the compspec are used.)108 571.2 R +.464(Only matches which are pre\214x)5.464 F .464(ed by the w)-.15 F +.464(ord being)-.1 F .596(completed are returned.)108 583.2 R .596 +(When the)5.596 F F13.096 E F0(or)3.095 E F13.095 E F0 .595 +(option is used for \214lename or directory name completion, the)3.095 F +(shell v)108 595.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0 +(is used to \214lter the matches.)2.25 E(An)108 612 Q 4.084(yc)-.15 G +1.584(ompletions speci\214ed by a pathname e)-4.084 F 1.584 +(xpansion pattern to the)-.15 F F14.084 E F0 1.584 +(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 624 S +.555(rds generated by the pattern need not match the w).1 F .554 +(ord being completed.)-.1 F(The)5.554 E F3(GLOBIGNORE)3.054 E F0 .554 +(shell v)2.804 F(ari-)-.25 E +(able is not used to \214lter the matches, b)108 636 Q(ut the)-.2 E F3 +(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 652.8 Q +.32(xt, the string speci\214ed as the ar)-.15 F .32(gument to the)-.18 F +F12.82 E F0 .321(option is considered.)2.821 F .321 +(The string is \214rst split using the)5.321 F .413(characters in the) +108 664.8 R F3(IFS)2.913 E F0 .412(special v)2.663 F .412 +(ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F +.412(Each w)5.412 F .412(ord is then e)-.1 F(xpanded)-.15 E .091 +(using brace e)108 676.8 R .091(xpansion, tilde e)-.15 F .092 +(xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .092 +(xpansion, command substitution, and arith-)-.15 F 1.397(metic e)108 +688.8 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H +(nder).15 E F3(EXP)3.896 E(ANSION)-.666 E/F4 9/Times-Roman@0 SF(.)A F0 +1.396(The results are split using the rules described)5.896 F(abo)108 +700.8 Q .509 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.709 G .209 +(rd Splitting).75 F F0 5.209(.T)C .209(he results of the e)-5.209 F .209 +(xpansion are pre\214x-matched ag)-.15 F .21(ainst the w)-.05 F .21 +(ord being com-)-.1 F(pleted, and the matching w)108 712.8 Q +(ords become the possible completions.)-.1 E 1.238 +(After these matches ha)108 729.6 R 1.538 -.15(ve b)-.2 H 1.238 +(een generated, an).15 F 3.738(ys)-.15 G 1.237 +(hell function or command speci\214ed with the)-3.738 F F13.737 E +F0(and)3.737 E F13.737 E F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(54)185.955 E 0 Cg EP %%Page: 55 55 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(commands quickly) -108 84 Q(.)-.65 E 1.164(History e)108 100.8 R 1.163(xpansion is perform\ -ed immediately after a complete line is read, before the shell breaks i\ -t into)-.15 F -.1(wo)108 112.8 S .251 -(rds, and is performed on each line indi).1 F .251 -(vidually without taking quoting on pre)-.25 F .252 -(vious lines into account.)-.25 F(It)5.252 E(tak)108 124.8 Q .146 -(es place in tw)-.1 F 2.646(op)-.1 G 2.646(arts. The)-2.646 F .146(\214\ -rst is to determine which line from the history list to use during subs\ -titution.)2.646 F .766(The second is to select portions of that line fo\ -r inclusion into the current one.)108 136.8 R .767 -(The line selected from the)5.767 F .254(history is the)108 148.8 R/F1 -10/Times-Italic@0 SF -.15(ev)2.754 G(ent).15 E F0 2.753(,a)C .253 -(nd the portions of that line that are acted upon are)-2.753 F F1(wor) -2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F1(modi\214er)2.753 E(s) --.1 E F0 .253(are a)2.753 F -.25(va)-.2 G(il-).25 E .538 -(able to manipulate the selected w)108 160.8 R 3.038(ords. The)-.1 F -.538(line is brok)3.038 F .538(en into w)-.1 F .539(ords in the same f) --.1 F .539(ashion as when reading)-.1 F .573(input, so that se)108 172.8 -R -.15(ve)-.25 G(ral).15 E F1(metac)3.073 E(har)-.15 E(acter)-.15 E F0 -.572(-separated w)B .572(ords surrounded by quotes are considered one w) --.1 F 3.072(ord. His-)-.1 F .355(tory e)108 184.8 R .355 -(xpansions are introduced by the appearance of the history e)-.15 F .355 -(xpansion character)-.15 F 2.855(,w)-.4 G .356(hich is)-2.855 F/F2 10 -/Times-Bold@0 SF(!)3.689 E F0 .356(by def)3.689 F(ault.)-.1 E .791 -(Only backslash \()108 196.8 R F2(\\).833 E F0 3.291(\)a).833 G .79 -(nd single quotes can quote the history e)-3.291 F .79 -(xpansion character)-.15 F 3.29(,b)-.4 G .79(ut the history e)-3.49 F -(xpansion)-.15 E .789(character is also treated as quoted if it immedia\ -tely precedes the closing double quote in a double-quoted)108 208.8 R -(string.)108 220.8 Q(Se)108 237.6 Q -.15(ve)-.25 G .03 -(ral characters inhibit history e).15 F .03 -(xpansion if found immediately follo)-.15 F .03(wing the history e)-.25 -F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 249.6 T -3.162(ni).25 G 3.162(fi)-3.162 G 3.162(ti)-3.162 G 3.162(su)-3.162 G -.662(nquoted: space, tab, ne)-3.162 F .662(wline, carriage return, and) --.25 F F2(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F2 -(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F F2(\()3.163 E -F0(will also inhibit e)108 261.6 Q(xpansion.)-.15 E(Se)108 278.4 Q -.15 -(ve)-.25 G .11(ral shell options settable with the).15 F F2(shopt)2.61 E -F0 -.2(bu)2.61 G .109(iltin may be used to tailor the beha).2 F .109 -(vior of history e)-.2 F(xpansion.)-.15 E .231(If the)108 290.4 R F2 -(histv)2.731 E(erify)-.1 E F0 .231 -(shell option is enabled \(see the description of the)2.731 F F2(shopt) -2.731 E F0 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 F F2 --.18(re)2.731 G(adline).18 E F0 .232(is be-)2.732 F .449(ing used, hist\ -ory substitutions are not immediately passed to the shell parser)108 -302.4 R 5.449(.I)-.55 G .448(nstead, the e)-5.449 F .448 -(xpanded line is)-.15 F 2.228(reloaded into the)108 314.4 R F2 -.18(re) -4.728 G(adline).18 E F0 2.228(editing b)4.728 F(uf)-.2 E 2.228 -(fer for further modi\214cation.)-.25 F(If)7.228 E F2 -.18(re)4.728 G -(adline).18 E F0 2.228(is being used, and the)4.728 F F2(histr)108 326.4 -Q(eedit)-.18 E F0 1.202(shell option is enabled, a f)3.702 F 1.202 -(ailed history substitution will be reloaded into the)-.1 F F2 -.18(re) -3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 338.4 S -.25(ff).2 G -.303(er for correction.).25 F(The)5.303 E F22.803 E F0 .303 -(option to the)2.803 F F2(history)2.804 E F0 -.2(bu)2.804 G .304 -(iltin command may be used to see what a history e).2 F(x-)-.15 E .52 -(pansion will do before using it.)108 350.4 R(The)5.52 E F23.02 E -F0 .52(option to the)3.02 F F2(history)3.02 E F0 -.2(bu)3.02 G .52 -(iltin may be used to add commands to the).2 F -(end of the history list without actually e)108 362.4 Q -.15(xe)-.15 G -(cuting them, so that the).15 E 2.5(ya)-.15 G(re a)-2.5 E -.25(va)-.2 G -(ilable for subsequent recall.).25 E 1.108(The shell allo)108 379.2 R -1.108(ws control of the v)-.25 F 1.108 -(arious characters used by the history e)-.25 F 1.108 -(xpansion mechanism \(see the de-)-.15 F .163(scription of)108 391.2 R -F2(histchars)2.663 E F0(abo)2.663 E .463 -.15(ve u)-.15 H(nder).15 E F2 -.163(Shell V)2.663 F(ariables)-.92 E F0 2.663(\). The)B .162 -(shell uses the history comment character to mark)2.663 F -(history timestamps when writing the history \214le.)108 403.2 Q F2(Ev) -87 420 Q(ent Designators)-.1 E F0 .204(An e)108 432 R -.15(ve)-.25 G -.204(nt designator is a reference to a command line entry in the histor\ -y list.).15 F .205(Unless the reference is abso-)5.204 F(lute, e)108 444 -Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot).15 G -(he current position in the history list.)-2.5 E F2(!)108 460.8 Q F0 -1.608(Start a history substitution, e)144 460.8 R 1.608 -(xcept when follo)-.15 F 1.607(wed by a)-.25 F F2(blank)4.107 E F0 4.107 -(,n)C -.25(ew)-4.107 G 1.607(line, carriage return, = or \().25 F -(\(when the)144 472.8 Q F2(extglob)2.5 E F0 -(shell option is enabled using the)2.5 E F2(shopt)2.5 E F0 -.2(bu)2.5 G -(iltin\).).2 E F2(!)108 484.8 Q F1(n)A F0(Refer to command line)144 -484.8 Q F1(n)2.86 E F0(.).24 E F2<21ad>108 496.8 Q F1(n)A F0 -(Refer to the current command minus)144 496.8 Q F1(n)2.86 E F0(.).24 E -F2(!!)108 508.8 Q F0(Refer to the pre)144 508.8 Q(vious command.)-.25 E -(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 520.8 Q F1(string) -A F0 .865(Refer to the most recent command preceding the current positi\ -on in the history list starting with)144 520.8 R F1(string)144.34 532.8 -Q F0(.).22 E F2(!?)108 544.8 Q F1(string)A F2([?])A F0 1.503(Refer to t\ -he most recent command preceding the current position in the history li\ -st containing)144 556.8 R F1(string)144.34 568.8 Q F0 5.496(.T).22 G -.496(he trailing)-5.496 F F2(?)2.996 E F0 .496(may be omitted if)2.996 F -F1(string)3.336 E F0 .497(is follo)3.216 F .497(wed immediately by a ne) --.25 F 2.997(wline. If)-.25 F F1(string)2.997 E F0(is)2.997 E .391(miss\ -ing, the string from the most recent search is used; it is an error if \ -there is no pre)144 580.8 R .39(vious search)-.25 F(string.)144 592.8 Q -/F3 12/Times-Bold@0 SF(^)108 609.8 Q F1(string1)-5 I F3(^)5 I F1 -(string2)-5 I F3(^)5 I F0 .752(Quick substitution.)144 616.8 R .752 -(Repeat the pre)5.752 F .753(vious command, replacing)-.25 F F1(string1) -3.593 E F0(with)3.253 E F1(string2)3.593 E F0 5.753(.E).02 G(qui)-5.753 -E -.25(va)-.25 G .753(lent to).25 F -.74(``)144 628.8 S(!!:s).74 E/F4 12 -/Times-Roman@0 SF(^)5 I F1(string1)-5 I F4(^)5 I F1(string2)-5 I F4(^)5 -I F0 1.48 -.74('' \()-5 L(see).74 E F2(Modi\214ers)2.5 E F0(belo)2.5 E -(w\).)-.25 E F2(!#)108 640.8 Q F0(The entire command line typed so f)144 -640.8 Q(ar)-.1 E(.)-.55 E F2 -.75(Wo)87 657.6 S(rd Designators).75 E F0 --.8(Wo)108 669.6 S 1.314(rd designators are used to select desired w).8 -F 1.314(ords from the e)-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:) -3.814 E F0 1.313(separates the e)3.813 F -.15(ve)-.25 G 1.313 -(nt speci\214cation).15 F .529(from the w)108 681.6 R .529 -(ord designator)-.1 F 5.529(.I)-.55 G 3.029(tm)-5.529 G .529 -(ay be omitted if the w)-3.029 F .529(ord designator be)-.1 F .529 -(gins with a)-.15 F F2(^)3.029 E F0(,)A F2($)3.029 E F0(,)A F2(*)3.029 E -F0(,)A F23.029 E F0 3.029(,o)C(r)-3.029 E F2(%)3.029 E F0 5.53(.W)C -(ords)-6.33 E .516(are numbered from the be)108 693.6 R .516 -(ginning of the line, with the \214rst w)-.15 F .516 -(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)5.515 G .515(rds are in-) -.8 F(serted into the current line separated by single spaces.)108 705.6 -Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(55)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 3.375 +(options is in)108 84 R -.2(vo)-.4 G -.1(ke).2 G 5.875(d. When).1 F +3.375(the command or function is in)5.875 F -.2(vo)-.4 G -.1(ke).2 G +3.375(d, the).1 F/F1 9/Times-Bold@0 SF(COMP_LINE)5.876 E/F2 9 +/Times-Roman@0 SF(,)A F1(COMP_POINT)5.626 E F2(,)A F1(COMP_KEY)108 96 Q +F2(,)A F0(and)2.408 E F1(COMP_TYPE)2.658 E F0 -.25(va)2.408 G .157 +(riables are assigned v).25 F .157(alues as described abo)-.25 F .457 +-.15(ve u)-.15 H(nder).15 E/F3 10/Times-Bold@0 SF .157(Shell V)2.657 F +(ariables)-.92 E F0 5.157(.I)C(f)-5.157 E 3.485(as)108 108 S .986 +(hell function is being in)-3.485 F -.2(vo)-.4 G -.1(ke).2 G .986 +(d, the).1 F F1(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F1(COMP_CW) +3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986(riables are also set.).25 F +(When)5.986 E .347(the function or command is in)108 120 R -.2(vo)-.4 G +-.1(ke).2 G .347(d, the \214rst ar).1 F .346(gument \()-.18 F F3($1)A F0 +2.846(\)i)C 2.846(st)-2.846 G .346(he name of the command whose ar) +-2.846 F(guments)-.18 E .263(are being completed, the second ar)108 132 +R .263(gument \()-.18 F F3($2)A F0 2.763(\)i)C 2.763(st)-2.763 G .264 +(he w)-2.763 F .264(ord being completed, and the third ar)-.1 F .264 +(gument \()-.18 F F3($3)A F0 2.764(\)i)C(s)-2.764 E .629(the w)108 144 R +.629(ord preceding the w)-.1 F .629 +(ord being completed on the current command line.)-.1 F .628 +(No \214ltering of the generated)5.629 F .714(completions ag)108 156 R +.714(ainst the w)-.05 F .714(ord being completed is performed; the func\ +tion or command has complete free-)-.1 F(dom in generating the matches.) +108 168 Q(An)108 184.8 Q 2.938(yf)-.15 G .437(unction speci\214ed with) +-2.938 F F32.937 E F0 .437(is in)2.937 F -.2(vo)-.4 G -.1(ke).2 G +2.937<648c>.1 G 2.937(rst. The)-2.937 F .437(function may use an)2.937 F +2.937(yo)-.15 G 2.937(ft)-2.937 G .437(he shell f)-2.937 F .437 +(acilities, including)-.1 F(the)108 196.8 Q F3(compgen)2.956 E F0 -.2 +(bu)2.956 G .456(iltin described belo).2 F 1.756 -.65(w, t)-.25 H 2.956 +(og).65 G .456(enerate the matches.)-2.956 F .457 +(It must put the possible completions in the)5.456 F F1(COMPREPL)108 +208.8 Q(Y)-.828 E F0(array v)2.25 E(ariable, one per array element.)-.25 +E(Ne)108 225.6 Q .081(xt, an)-.15 F 2.581(yc)-.15 G .081 +(ommand speci\214ed with the)-2.581 F F32.581 E F0 .081 +(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.58(na) +-2.581 G 2.58(ne)-2.58 G -.4(nv)-2.58 G .08(ironment equi).4 F -.25(va) +-.25 G .08(lent to command sub-).25 F 2.858(stitution. It)108 237.6 R +.359(should print a list of completions, one per line, to the standard \ +output.)2.858 F .359(Backslash may be used)5.359 F(to escape a ne)108 +249.6 Q(wline, if necessary)-.25 E(.)-.65 E .377 +(After all of the possible completions are generated, an)108 266.4 R +2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F32.876 +E F0 .376(option is applied to the)2.876 F 3.181(list. The)108 278.4 R +.681(\214lter is a pattern as used for pathname e)3.181 F .681 +(xpansion; a)-.15 F F3(&)3.181 E F0 .682 +(in the pattern is replaced with the te)3.182 F .682(xt of)-.15 F .523 +(the w)108 290.4 R .523(ord being completed.)-.1 F 3.023(Al)5.523 G +(iteral)-3.023 E F3(&)3.023 E F0 .522 +(may be escaped with a backslash; the backslash is remo)3.022 F -.15(ve) +-.15 G 3.022(db).15 G(efore)-3.022 E .849(attempting a match.)108 302.4 +R(An)5.849 E 3.349(yc)-.15 G .849 +(ompletion that matches the pattern will be remo)-3.349 F -.15(ve)-.15 G +3.35(df).15 G .85(rom the list.)-3.35 F 3.35(Al)5.85 G(eading)-3.35 E F3 +(!)3.35 E F0(ne)108 314.4 Q -.05(ga)-.15 G .764 +(tes the pattern; in this case an).05 F 3.264(yc)-.15 G .764 +(ompletion not matching the pattern will be remo)-3.264 F -.15(ve)-.15 G +3.264(d. If).15 F(the)3.264 E F3(nocase-)3.264 E(match)108 326.4 Q F0 +(shell option is enabled, the match is performed without re)2.5 E -.05 +(ga)-.15 G(rd to the case of alphabetic characters.).05 E(Finally)108 +343.2 Q 3.086(,a)-.65 G .886 -.15(ny p)-3.086 H .586(re\214x and suf).15 +F .587(\214x speci\214ed with the)-.25 F F33.087 E F0(and)3.087 E +F33.087 E F0 .587(options are added to each member of the com-) +3.087 F(pletion list, and the result is returned to the readline comple\ +tion code as the list of possible completions.)108 355.2 Q .247 +(If the pre)108 372 R .247(viously-applied actions do not generate an) +-.25 F 2.747(ym)-.15 G .247(atches, and the)-2.747 F F3 .247(\255o dir) +2.747 F(names)-.15 E F0 .247(option w)2.747 F .246(as supplied to)-.1 F +F3(complete)108 384 Q F0(when the compspec w)2.5 E +(as de\214ned, directory name completion is attempted.)-.1 E .461 +(If the)108 400.8 R F3 .462(\255o plusdirs)2.961 F F0 .462(option w) +2.962 F .462(as supplied to)-.1 F F3(complete)2.962 E F0 .462 +(when the compspec w)2.962 F .462(as de\214ned, directory name com-)-.1 +F(pletion is attempted and an)108 412.8 Q 2.5(ym)-.15 G +(atches are added to the results of the other actions.)-2.5 E .56 +(By def)108 429.6 R .56(ault, if a compspec is found, whate)-.1 F -.15 +(ve)-.25 G 3.06(ri).15 G 3.06(tg)-3.06 G .559 +(enerates is returned to the completion code as the full set)-3.06 F +.631(of possible completions.)108 441.6 R .631(The def)5.631 F(ault)-.1 +E F3(bash)3.131 E F0 .631 +(completions are not attempted, and the readline def)3.131 F .632 +(ault of \214le-)-.1 F .559(name completion is disabled.)108 453.6 R +.559(If the)5.559 F F3 .559(\255o bashdefault)3.059 F F0 .559(option w) +3.059 F .559(as supplied to)-.1 F F3(complete)3.058 E F0 .558 +(when the compspec)3.058 F -.1(wa)108 465.6 S 3.171(sd).1 G .671 +(e\214ned, the)-3.171 F F3(bash)3.171 E F0(def)3.171 E .671 +(ault completions are attempted if the compspec generates no matches.) +-.1 F .672(If the)5.672 F F33.172 E(default)108 477.6 Q F0 1.207 +(option w)3.707 F 1.207(as supplied to)-.1 F F3(complete)3.707 E F0 +1.207(when the compspec w)3.707 F 1.207(as de\214ned, readline')-.1 F +3.707(sd)-.55 G(ef)-3.707 E 1.206(ault completion)-.1 F +(will be performed if the compspec \(and, if attempted, the def)108 +489.6 Q(ault)-.1 E F3(bash)2.5 E F0(completions\) generate no matches.) +2.5 E .245(When a compspec indicates that directory name completion is \ +desired, the programmable completion func-)108 506.4 R .633(tions force\ + readline to append a slash to completed names which are symbolic links\ + to directories, subject)108 518.4 R 2.761(to the v)108 530.4 R 2.761 +(alue of the)-.25 F F3(mark\255dir)5.261 E(ectories)-.18 E F0 2.761 +(readline v)5.261 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.762 +(rdless of the setting of the).05 F F3(mark-sym-)5.262 E(link)108 542.4 +Q(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E +.191(There is some support for dynamically modifying completions.)108 +559.2 R .19(This is most useful when used in combina-)5.191 F 1.172 +(tion with a def)108 571.2 R 1.172(ault completion speci\214ed with)-.1 +F F3 1.172(complete \255D)3.672 F F0 6.172(.I)C(t')-6.172 E 3.672(sp) +-.55 G 1.172(ossible for shell functions e)-3.672 F -.15(xe)-.15 G 1.172 +(cuted as).15 F .93(completion handlers to indicate that completion sho\ +uld be retried by returning an e)108 583.2 R .93(xit status of 124.)-.15 +F .93(If a)5.93 F .1(shell function returns 124, and changes the compsp\ +ec associated with the command on which completion is)108 595.2 R .666 +(being attempted \(supplied as the \214rst ar)108 607.2 R .665 +(gument when the function is e)-.18 F -.15(xe)-.15 G .665 +(cuted\), programmable completion).15 F .083(restarts from the be)108 +619.2 R .084(ginning, with an attempt to \214nd a ne)-.15 F 2.584(wc) +-.25 G .084(ompspec for that command.)-2.584 F .084(This allo)5.084 F +.084(ws a set of)-.25 F(completions to be b)108 631.2 Q(uilt dynamicall\ +y as completion is attempted, rather than being loaded all at once.)-.2 +E -.15(Fo)108 648 S 2.637(ri).15 G .137 +(nstance, assuming that there is a library of compspecs, each k)-2.637 F +.137(ept in a \214le corresponding to the name of)-.1 F +(the command, the follo)108 660 Q(wing def)-.25 E +(ault completion function w)-.1 E(ould load completions dynamically:)-.1 +E/F4 10/Courier@0 SF(_completion_loader\(\))108 676.8 Q({)108 688.8 Q 6 +(.")144 700.8 S +(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 E(})108 +712.8 Q(complete -D -F _completion_loader -o bashdefault -o default)108 +724.8 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(55)185.955 E +0 Cg EP %%Page: 56 56 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF 2.5(0\()108 84 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 96 Q 2.5 -(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E/F2 -10/Times-Italic@0 SF(n)108.36 108 Q F0(The)144 108 Q F2(n)2.5 E F0(th w) -A(ord.)-.1 E F1(^)108 120 Q F0(The \214rst ar)144 120 Q 2.5 -(gument. That)-.18 F(is, w)2.5 E(ord 1.)-.1 E F1($)108 132 Q F0 .063 -(The last w)144 132 R 2.563(ord. This)-.1 F .063(is usually the last ar) -2.563 F .064(gument, b)-.18 F .064(ut will e)-.2 F .064 -(xpand to the zeroth w)-.15 F .064(ord if there is only)-.1 F(one w)144 -144 Q(ord in the line.)-.1 E F1(%)108 156 Q F0 1.42(The \214rst w)144 -156 R 1.42(ord matched by the most recent `?)-.1 F F2(string)A F0 1.419 -(?' search, if the search string be)B 1.419(gins with a)-.15 F -(character that is part of a w)144 168 Q(ord.)-.1 E F2(x)108.77 180 Q F1 -A F2(y)A F0 2.5(Ar)144 180 S(ange of w)-2.5 E(ords; `\255)-.1 E F2 -(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)-.25 E F2(y)A F0('.)A F1(*) -108 192 Q F0 .315(All of the w)144 192 R .315(ords b)-.1 F .315 -(ut the zeroth.)-.2 F .315(This is a synon)5.315 F .315(ym for `)-.15 F -F2(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*) -2.816 E F0 .316(if there is)2.816 F(just one w)144 204 Q(ord in the e) --.1 E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 -E F1(x*)108 216 Q F0(Abbre)144 216 Q(viates)-.25 E F2(x\255$)2.5 E F0(.) -A F1<78ad>108 228 Q F0(Abbre)144 228 Q(viates)-.25 E F2(x\255$)2.5 E F0 -(lik)2.5 E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E -2.5(ord. If)-.1 F F1(x)2.5 E F0(is missing, it def)2.5 E(aults to 0.)-.1 -E(If a w)108 244.8 Q(ord designator is supplied without an e)-.1 E -.15 -(ve)-.25 G(nt speci\214cation, the pre).15 E -(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1 -(Modi\214ers)87 261.6 Q F0 .184(After the optional w)108 273.6 R .184 -(ord designator)-.1 F 2.684(,t)-.4 G .183 -(here may appear a sequence of one or more of the follo)-2.684 F .183 -(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 285.6 Q -(These modify)5 E 2.5(,o)-.65 G 2.5(re)-2.5 G(dit, the w)-2.5 E -(ord or w)-.1 E(ords selected from the history e)-.1 E -.15(ve)-.25 G -(nt.).15 E F1(h)108 302.4 Q F0(Remo)144 302.4 Q .3 -.15(ve a t)-.15 H -(railing \214lename component, lea).15 E(ving only the head.)-.2 E F1(t) -108 314.4 Q F0(Remo)144 314.4 Q .3 -.15(ve a)-.15 H -(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F1(r) -108 326.4 Q F0(Remo)144 326.4 Q .3 -.15(ve a t)-.15 H(railing suf).15 E -(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E -(ving the basename.)-.2 E F1(e)108 338.4 Q F0(Remo)144 338.4 Q .3 -.15 -(ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 -350.4 Q F0(Print the ne)144 350.4 Q 2.5(wc)-.25 G(ommand b)-2.5 E -(ut do not e)-.2 E -.15(xe)-.15 G(cute it.).15 E F1(q)108 362.4 Q F0 -(Quote the substituted w)144 362.4 Q -(ords, escaping further substitutions.)-.1 E F1(x)108 374.4 Q F0 .385 -(Quote the substituted w)144 374.4 R .385(ords as with)-.1 F F1(q)2.885 -E F0 2.885(,b)C .386(ut break into w)-3.085 F .386(ords at)-.1 F F1 -(blanks)2.886 E F0 .386(and ne)2.886 F 2.886(wlines. The)-.25 F F1(q) -2.886 E F0(and)2.886 E F1(x)2.886 E F0(modi\214ers are mutually e)144 -386.4 Q(xclusi)-.15 E -.15(ve)-.25 G 2.5(;t).15 G -(he last one supplied is used.)-2.5 E F1(s/)108 398.4 Q F2(old)A F1(/)A -F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 410.4 Q F2(ne)3.329 E(w)-.15 E -F0 .469(for the \214rst occurrence of)3.279 F F2(old)3.199 E F0 .469 -(in the e)3.739 F -.15(ve)-.25 G .469(nt line.).15 F(An)5.469 E 2.969 -(yc)-.15 G .469(haracter may be used as the)-2.969 F .953 -(delimiter in place of /.)144 422.4 R .953 -(The \214nal delimiter is optional if it is the last character of the e) -5.953 F -.15(ve)-.25 G .954(nt line.).15 F .131 -(The delimiter may be quoted in)144 434.4 R F2(old)2.861 E F0(and)3.401 -E F2(ne)2.991 E(w)-.15 E F0 .131(with a single backslash.)2.941 F .131 -(If & appears in)5.131 F F2(ne)2.991 E(w)-.15 E F0 2.631(,i).31 G 2.631 -(ti)-2.631 G 2.631(sr)-2.631 G(e-)-2.631 E .619(placed by)144 446.4 R F2 -(old)3.349 E F0 5.619(.A).77 G .619(single backslash will quote the &.) --2.5 F(If)5.619 E F2(old)3.349 E F0 .619(is null, it is set to the last) -3.889 F F2(old)3.349 E F0(substi-)3.89 E .487(tuted, or)144 458.4 R -2.987(,i)-.4 G 2.987(fn)-2.987 G 2.987(op)-2.987 G(re)-2.987 E .486 -(vious history substitutions took place, the last)-.25 F F2(string)3.326 -E F0 .486(in a)3.206 F F1(!?)2.986 E F2(string)A F1([?])A F0 2.986 -(search. If)5.486 F F2(ne)144.36 470.4 Q(w)-.15 E F0 -(is null, each matching)2.81 E F2(old)2.73 E F0(is deleted.)3.27 E F1(&) -108 482.4 Q F0(Repeat the pre)144 482.4 Q(vious substitution.)-.25 E F1 -(g)108 494.4 Q F0 .397(Cause changes to be applied o)144 494.4 R -.15 -(ve)-.15 G 2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398 -(nt line.).15 F .398(This is used in conjunction with `)5.398 F F1(:s)A -F0 2.898('\()C(e.g.,)-2.898 E(`)144 506.4 Q F1(:gs/)A F2(old)A F1(/)A F2 -(ne)A(w)-.15 E F1(/)A F0 .351('\) or `)B F1(:&)A F0 2.851('. If)B .351 -(used with `)2.851 F F1(:s)A F0 .351(', an)B 2.851(yd)-.15 G .35 -(elimiter can be used in place of /, and the \214nal de-)-2.851 F -(limiter is optional if it is the last character of the e)144 518.4 Q --.15(ve)-.25 G(nt line.).15 E(An)5 E F1(a)2.5 E F0 -(may be used as a synon)2.5 E(ym for)-.15 E F1(g)2.5 E F0(.)A F1(G)108 -530.4 Q F0(Apply the follo)144 530.4 Q(wing `)-.25 E F1(s)A F0 2.5('o)C -2.5(r`)-2.5 G F1(&)-2.5 E F0 2.5('m)C(odi\214er once to each w)-2.5 E -(ord in the e)-.1 E -.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 -SF(SHELL B)72 547.2 Q(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .062 -(Unless otherwise noted, each b)108 559.2 R .062(uiltin command documen\ -ted in this section as accepting options preceded by)-.2 F F1108 -571.2 Q F0(accepts)3.077 E F13.077 E F0 .577 -(to signify the end of the options.)3.077 F(The)5.577 E F1(:)3.077 E F0 -(,)A F1(true)3.077 E F0(,)A F1(false)3.077 E F0 3.077(,a)C(nd)-3.077 E -F1(test)3.077 E F0(/)A F1([)A F0 -.2(bu)3.077 G .577 -(iltins do not accept options).2 F .461(and do not treat)108 583.2 R F1 -2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F1(exit) -2.961 E F0(,)A F1(logout)2.961 E F0(,)A F1 -.18(re)2.961 G(tur).18 E(n) --.15 E F0(,)A F1(br)2.961 E(eak)-.18 E F0(,)A F1(continue)2.961 E F0(,)A -F1(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F1(shift)2.961 E F0 -.2(bu) -2.962 G .462(iltins accept and).2 F .261(process ar)108 595.2 R .261 -(guments be)-.18 F .261(ginning with)-.15 F F12.761 E F0 .261 -(without requiring)2.761 F F12.761 E F0 5.261(.O)C .261(ther b) --5.261 F .26(uiltins that accept ar)-.2 F .26(guments b)-.18 F .26 -(ut are not)-.2 F 1.154(speci\214ed as accepting options interpret ar) -108 607.2 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1 -3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154 -(lid options and require).25 F F13.654 E F0(to)3.654 E(pre)108 -619.2 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 637.2 Q F0 -([)2.5 E F2(ar)A(guments)-.37 E F0(])A .452(No ef)144 649.2 R .452 -(fect; the command does nothing be)-.25 F .452(yond e)-.15 F(xpanding) --.15 E F2(ar)3.282 E(guments)-.37 E F0 .451(and performing an)3.221 F -2.951(ys)-.15 G(peci\214ed)-2.951 E 2.5(redirections. The)144 661.2 R -(return status is zero.)2.5 E F1(.)110.5 678 Q F2(\214lename)6.666 E F0 -([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 690 Q(ce)-.18 E F2 -(\214lename)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.02 -(Read and e)144 702 R -.15(xe)-.15 G 1.02(cute commands from).15 F F2 -(\214lename)5.43 E F0 1.02(in the current shell en)3.7 F 1.02 -(vironment and return the e)-.4 F(xit)-.15 E 1.331 -(status of the last command e)144 714 R -.15(xe)-.15 G 1.331(cuted from) -.15 F F2(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331 E F2(\214lename) -5.741 E F0 1.33(does not contain a slash, \214le-)4.011 F .488(names in) -144 726 R/F4 9/Times-Bold@0 SF -.666(PA)2.988 G(TH)-.189 E F0 .488 -(are used to \214nd the directory containing)2.738 F F2(\214lename)4.899 -E F0 5.489(.T).18 G .489(he \214le searched for in)-5.489 F F4 -.666(PA) -2.989 G(TH)-.189 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E -(56)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95 +/Times-Bold@0 SF(HIST)72 100.8 Q(OR)-.197 E(Y)-.383 E F0 .371(When the) +108 112.8 R/F2 10/Times-Bold@0 SF .371(\255o history)2.871 F F0 .371 +(option to the)2.871 F F2(set)2.872 E F0 -.2(bu)2.872 G .372 +(iltin is enabled, the shell pro).2 F .372(vides access to the)-.15 F/F3 +10/Times-Italic@0 SF .372(command history)2.872 F F0(,)A .305 +(the list of commands pre)108 124.8 R .305(viously typed.)-.25 F .305 +(The v)5.305 F .304(alue of the)-.25 F/F4 9/Times-Bold@0 SF(HISTSIZE) +2.804 E F0 -.25(va)2.554 G .304(riable is used as the number of com-).25 +F .429(mands to sa)108 136.8 R .729 -.15(ve i)-.2 H 2.929(nah).15 G .429 +(istory list.)-2.929 F .429(The te)5.429 F .429(xt of the last)-.15 F F4 +(HISTSIZE)2.93 E F0 .43(commands \(def)2.68 F .43(ault 500\) is sa)-.1 F +-.15(ve)-.2 G 2.93(d. The).15 F(shell)2.93 E .287 +(stores each command in the history list prior to parameter and v)108 +148.8 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F4(EXP)2.787 E +(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 160.8 +S 4.065(ta).2 G 1.565(fter history e)-4.065 F 1.565 +(xpansion is performed, subject to the v)-.15 F 1.565 +(alues of the shell v)-.25 F(ariables)-.25 E F4(HISTIGNORE)4.065 E F0 +(and)3.816 E F4(HISTCONTR)108 172.8 Q(OL)-.27 E/F5 9/Times-Roman@0 SF(.) +A F0 .082 +(On startup, the history is initialized from the \214le named by the v) +108 189.6 R(ariable)-.25 E F4(HISTFILE)2.582 E F0(\(def)2.332 E(ault)-.1 +E F3(~/.bash_history)2.582 E F0(\).)A .315(The \214le named by the v)108 +201.6 R .315(alue of)-.25 F F4(HISTFILE)2.815 E F0 .315 +(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815(oc)-2.815 G +.315(ontain no more than the number of)-2.815 F .659 +(lines speci\214ed by the v)108 213.6 R .659(alue of)-.25 F F4 +(HISTFILESIZE)3.158 E F5(.)A F0(If)5.158 E F2(HISTFILESIZE)3.158 E F0 +.658(is unset, or set to null, a non-numeric)3.158 F -.25(va)108 225.6 S +.142(lue, or a numeric v).25 F .142 +(alue less than zero, the history \214le is not truncated.)-.25 F .142 +(When the history \214le is read, lines)5.142 F(be)108 237.6 Q 1.605 +(ginning with the history comment character follo)-.15 F 1.604 +(wed immediately by a digit are interpreted as time-)-.25 F .15 +(stamps for the follo)108 249.6 R .15(wing history line.)-.25 F .151 +(These timestamps are optionally displayed depending on the v)5.151 F +.151(alue of)-.25 F(the)108 261.6 Q F4(HISTTIMEFORMA)3.559 E(T)-.855 E +F0 -.25(va)3.309 G 3.559(riable. When).25 F 3.559(as)3.559 G 1.059 +(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F4 +($HISTSIZE)3.559 E F0 1.058(lines are)3.309 F .158 +(copied from the history list to)108 273.6 R F4($HISTFILE)2.658 E F5(.)A +F0 .158(If the)4.658 F F2(histappend)2.658 E F0 .159 +(shell option is enabled \(see the description of)2.659 F F2(shopt)108 +285.6 Q F0(under)2.582 E F4 .082(SHELL B)2.582 F(UIL)-.09 E .082 +(TIN COMMANDS)-.828 F F0(belo)2.332 E .082 +(w\), the lines are appended to the history \214le, otherwise the)-.25 F +.196(history \214le is o)108 297.6 R -.15(ve)-.15 G 2.696(rwritten. If) +.15 F F4(HISTFILE)2.696 E F0 .197(is unset, or if the history \214le is\ + unwritable, the history is not sa)2.446 F -.15(ve)-.2 G(d.).15 E .584 +(If the)108 309.6 R F4(HISTTIMEFORMA)3.084 E(T)-.855 E F0 -.25(va)2.834 +G .584 +(riable is set, time stamps are written to the history \214le, mark).25 +F .583(ed with the his-)-.1 F 1.147(tory comment character)108 321.6 R +3.647(,s)-.4 G 3.647(ot)-3.647 G(he)-3.647 E 3.647(ym)-.15 G 1.147 +(ay be preserv)-3.647 F 1.147(ed across shell sessions.)-.15 F 1.148 +(This uses the history comment)6.148 F 1.377 +(character to distinguish timestamps from other history lines.)108 333.6 +R 1.377(After sa)6.377 F 1.377(ving the history)-.2 F 3.876(,t)-.65 G +1.376(he history \214le is)-3.876 F .756 +(truncated to contain no more than)108 345.6 R F4(HISTFILESIZE)3.257 E +F0 3.257(lines. If)3.007 F F4(HISTFILESIZE)3.257 E F0 .757 +(is unset, or set to null, a non-)3.007 F(numeric v)108 357.6 Q +(alue, or a numeric v)-.25 E +(alue less than zero, the history \214le is not truncated.)-.25 E .299 +(The b)108 374.4 R .299(uiltin command)-.2 F F2(fc)2.799 E F0(\(see) +2.799 E F4 .299(SHELL B)2.799 F(UIL)-.09 E .299(TIN COMMANDS)-.828 F F0 +(belo)2.549 E .298(w\) may be used to list or edit and re-e)-.25 F -.15 +(xe)-.15 G(-).15 E .471(cute a portion of the history list.)108 386.4 R +(The)5.471 E F2(history)2.971 E F0 -.2(bu)2.971 G .472 +(iltin may be used to display or modify the history list and).2 F .002 +(manipulate the history \214le.)108 398.4 R .001 +(When using command-line editing, search commands are a)5.002 F -.25(va) +-.2 G .001(ilable in each edit-).25 F(ing mode that pro)108 410.4 Q +(vide access to the history list.)-.15 E 1.485(The shell allo)108 427.2 +R 1.485(ws control o)-.25 F -.15(ve)-.15 G 3.986(rw).15 G 1.486 +(hich commands are sa)-3.986 F -.15(ve)-.2 G 3.986(do).15 G 3.986(nt) +-3.986 G 1.486(he history list.)-3.986 F(The)6.486 E F4(HISTCONTR)3.986 +E(OL)-.27 E F0(and)3.736 E F4(HISTIGNORE)108 439.2 Q F0 -.25(va)2.708 G +.458(riables may be set to cause the shell to sa).25 F .757 -.15(ve o) +-.2 H .457(nly a subset of the commands entered.).15 F(The)5.457 E F2 +(cmdhist)108 451.2 Q F0 .75 +(shell option, if enabled, causes the shell to attempt to sa)3.25 F 1.05 +-.15(ve e)-.2 H .75(ach line of a multi-line command in).15 F 1.077 +(the same history entry)108 463.2 R 3.577(,a)-.65 G 1.077 +(dding semicolons where necessary to preserv)-3.577 F 3.577(es)-.15 G +1.077(yntactic correctness.)-3.577 F(The)6.077 E F2(lithist)3.576 E F0 +.373(shell option causes the shell to sa)108 475.2 R .674 -.15(ve t)-.2 +H .374(he command with embedded ne).15 F .374 +(wlines instead of semicolons.)-.25 F .374(See the)5.374 F .319 +(description of the)108 487.2 R F2(shopt)2.819 E F0 -.2(bu)2.819 G .318 +(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F4 .318(SHELL B)2.818 F +(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .318 +(for information on setting and)2.568 F(unsetting shell options.)108 +499.2 Q F1(HIST)72 516 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION) +-.81 E F0 .61(The shell supports a history e)108 528 R .611 +(xpansion feature that is similar to the history e)-.15 F .611 +(xpansion in)-.15 F F2(csh)3.111 E F0 5.611(.T)C .611(his section)-5.611 +F .871(describes what syntax features are a)108 540 R -.25(va)-.2 G +3.371(ilable. This).25 F .871(feature is enabled by def)3.371 F .87 +(ault for interacti)-.1 F 1.17 -.15(ve s)-.25 H .87(hells, and).15 F +.949(can be disabled using the)108 552 R F2(+H)3.449 E F0 .949 +(option to the)3.449 F F2(set)3.449 E F0 -.2(bu)3.449 G .949 +(iltin command \(see).2 F F4 .949(SHELL B)3.449 F(UIL)-.09 E .95 +(TIN COMMANDS)-.828 F F0(be-)3.2 E(lo)108 564 Q 2.5(w\). Non-interacti) +-.25 F .3 -.15(ve s)-.25 H(hells do not perform history e).15 E +(xpansion by def)-.15 E(ault.)-.1 E 1.306(History e)108 580.8 R 1.306 +(xpansions introduce w)-.15 F 1.306(ords from the history list into the\ + input stream, making it easy to repeat)-.1 F .209 +(commands, insert the ar)108 592.8 R .209(guments to a pre)-.18 F .21 +(vious command into the current input line, or \214x errors in pre)-.25 +F(vious)-.25 E(commands quickly)108 604.8 Q(.)-.65 E 1.164(History e)108 +621.6 R 1.163(xpansion is performed immediately after a complete line i\ +s read, before the shell breaks it into)-.15 F -.1(wo)108 633.6 S .251 +(rds, and is performed on each line indi).1 F .251 +(vidually without taking quoting on pre)-.25 F .252 +(vious lines into account.)-.25 F(It)5.252 E(tak)108 645.6 Q .146 +(es place in tw)-.1 F 2.646(op)-.1 G 2.646(arts. The)-2.646 F .146(\214\ +rst is to determine which line from the history list to use during subs\ +titution.)2.646 F .766(The second is to select portions of that line fo\ +r inclusion into the current one.)108 657.6 R .767 +(The line selected from the)5.767 F .254(history is the)108 669.6 R F3 +-.15(ev)2.754 G(ent).15 E F0 2.753(,a)C .253 +(nd the portions of that line that are acted upon are)-2.753 F F3(wor) +2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F3(modi\214er)2.753 E(s) +-.1 E F0 .253(are a)2.753 F -.25(va)-.2 G(il-).25 E .538 +(able to manipulate the selected w)108 681.6 R 3.038(ords. The)-.1 F +.538(line is brok)3.038 F .538(en into w)-.1 F .539(ords in the same f) +-.1 F .539(ashion as when reading)-.1 F .573(input, so that se)108 693.6 +R -.15(ve)-.25 G(ral).15 E F3(metac)3.073 E(har)-.15 E(acter)-.15 E F0 +.572(-separated w)B .572(ords surrounded by quotes are considered one w) +-.1 F 3.072(ord. His-)-.1 F .355(tory e)108 705.6 R .355 +(xpansions are introduced by the appearance of the history e)-.15 F .355 +(xpansion character)-.15 F 2.855(,w)-.4 G .356(hich is)-2.855 F F2(!) +3.689 E F0 .356(by def)3.689 F(ault.)-.1 E .791(Only backslash \()108 +717.6 R F2(\\).833 E F0 3.291(\)a).833 G .79 +(nd single quotes can quote the history e)-3.291 F .79 +(xpansion character)-.15 F 3.29(,b)-.4 G .79(ut the history e)-3.49 F +(xpansion)-.15 E .789(character is also treated as quoted if it immedia\ +tely precedes the closing double quote in a double-quoted)108 729.6 R +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(56)185.955 E 0 Cg EP %%Page: 57 57 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .833 -(need not be e)144 84 R -.15(xe)-.15 G 3.333(cutable. When).15 F/F1 10 -/Times-Bold@0 SF(bash)3.333 E F0 .832(is not in)3.333 F/F2 10 -/Times-Italic@0 SF .832(posix mode)3.332 F F0 3.332(,t)C .832 -(he current directory is searched if no)-3.332 F .981 -(\214le is found in)144 96 R/F3 9/Times-Bold@0 SF -.666(PA)3.481 G(TH) --.189 E/F4 9/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F1(sour)3.481 E -(cepath)-.18 E F0 .981(option to the)3.481 F F1(shopt)3.481 E F0 -.2(bu) -3.481 G .981(iltin command is turned of).2 F .982(f, the)-.25 F F3 -.666 -(PA)144 108 S(TH)-.189 E F0 .112(is not searched.)2.363 F .112(If an) -5.112 F(y)-.15 E F2(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the) -2.612 F 2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612 -F F2(\214lename)144 120 Q F0 .485(is e)2.985 F -.15(xe)-.15 G 2.985 -(cuted. Otherwise).15 F .485(the positional parameters are unchanged.) -2.985 F .485(If the)5.485 F F12.985 E F0 .485(option is en-)2.985 -F(abled,)144 132 Q F1(sour)3.325 E(ce)-.18 E F0 .825(inherits an)3.325 F -3.325(yt)-.15 G .825(rap on)-3.325 F F1(DEB)3.325 E(UG)-.1 E F0 3.325 -(;i)C 3.325(fi)-3.325 G 3.324(ti)-3.325 G 3.324(sn)-3.324 G .824(ot, an) --3.324 F(y)-.15 E F1(DEB)3.324 E(UG)-.1 E F0 .824(trap string is sa) -3.324 F -.15(ve)-.2 G 3.324(da).15 G .824(nd re-)-3.324 F .817 -(stored around the call to)144 144 R F1(sour)3.317 E(ce)-.18 E F0 3.317 -(,a)C(nd)-3.317 E F1(sour)3.317 E(ce)-.18 E F0 .817(unsets the)3.317 F -F1(DEB)3.317 E(UG)-.1 E F0 .817(trap while it e)3.317 F -.15(xe)-.15 G -3.317(cutes. If).15 F F13.317 E F0(is)3.318 E 1.435 -(not set, and the sourced \214le changes the)144 156 R F1(DEB)3.935 E -(UG)-.1 E F0 1.435(trap, the ne)3.935 F 3.935(wv)-.25 G 1.435 -(alue is retained when)-4.185 F F1(sour)3.935 E(ce)-.18 E F0 3.762 -(completes. The)144 168 R 1.262 -(return status is the status of the last command e)3.762 F 1.263 -(xited within the script \(0 if no)-.15 F(commands are e)144 180 Q -.15 -(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F2(\214lename)4.41 E F0 -(is not found or cannot be read.)2.68 E F1(alias)108 196.8 Q F0([)2.5 E -F1A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..]) --2.5 E F1(Alias)144 208.8 Q F0 2.725(with no ar)5.225 F 2.724 -(guments or with the)-.18 F F15.224 E F0 2.724 -(option prints the list of aliases in the form)5.224 F F1(alias)5.224 E -F2(name)144 220.8 Q F0(=)A F2(value)A F0 .58(on standard output.)3.08 F -.58(When ar)5.58 F .58 -(guments are supplied, an alias is de\214ned for each)-.18 F F2(name) -3.08 E F0(whose)144 232.8 Q F2(value)2.509 E F0 .009(is gi)2.509 F -.15 -(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F2(value) -2.509 E F0 .009(causes the ne)2.509 F .009(xt w)-.15 F .009 -(ord to be check)-.1 F .008(ed for alias substi-)-.1 F .579 -(tution when the alias is e)144 244.8 R 3.079(xpanded. F)-.15 F .579 -(or each)-.15 F F2(name)3.079 E F0 .579(in the ar)3.079 F .579 -(gument list for which no)-.18 F F2(value)3.079 E F0 .579(is sup-)3.079 -F 1.314(plied, the name and v)144 256.8 R 1.314 -(alue of the alias is printed.)-.25 F F1(Alias)6.314 E F0 1.314 -(returns true unless a)3.814 F F2(name)3.814 E F0 1.313(is gi)3.814 F --.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E -(which no alias has been de\214ned.)144 268.8 Q F1(bg)108 285.6 Q F0([) -2.5 E F2(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144 -297.6 R F2(jobspec)3.244 E F0 .745 -(in the background, as if it had been started with)3.244 F F1(&)3.245 E -F0 5.745(.I)C(f)-5.745 E F2(job-)4.985 E(spec)144 309.6 Q F0 .672 -(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the) --3.172 F F2(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F1 -(bg)5.671 E F2(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418 -(when job control is disabled or)144 321.6 R 2.919(,w)-.4 G .419 -(hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G -(peci\214ed)-2.919 E F2(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G -(ot)-2.919 E(found or w)144 333.6 Q(as started without job control.)-.1 -E F1(bind)108 350.4 Q F0([)2.5 E F1A F2 -.1(ke)2.5 G(ymap)-.2 E F0 -2.5(][)C F1(\255lpsvPSVX)-2.5 E F0(])A F1(bind)108 362.4 Q F0([)2.5 E F1 -A F2 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F1-2.5 E F2 -(function)2.5 E F0 2.5(][)C F1-2.5 E F2(function)2.5 E F0 2.5(][)C -F1-2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(])A F1(bind)108 374.4 Q F0 -([)2.5 E F1A F2 -.1(ke)2.5 G(ymap)-.2 E F0(])A F12.5 E F2 -(\214lename)2.5 E F1(bind)108 386.4 Q F0([)2.5 E F1A F2 -.1(ke)2.5 -G(ymap)-.2 E F0(])A F12.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -(shell\255command)A F1(bind)108 398.4 Q F0([)2.5 E F1A F2 -.1(ke) -2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -(function\255name)A F1(bind)108 410.4 Q F0([)2.5 E F1A F2 -.1(ke) -2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -.37(re)C -(adline\255command).37 E F0 .239(Display current)144 422.4 R F1 -.18(re) -2.739 G(adline).18 E F0 -.1(ke)2.739 G 2.739(ya)-.05 G .239 -(nd function bindings, bind a k)-2.739 F .539 -.15(ey s)-.1 H .238 -(equence to a).15 F F1 -.18(re)2.738 G(adline).18 E F0 .238(function or) -2.738 F .475(macro, or set a)144 434.4 R F1 -.18(re)2.975 G(adline).18 E -F0 -.25(va)2.975 G 2.975(riable. Each).25 F .476(non-option ar)2.976 F -.476(gument is a command as it w)-.18 F .476(ould appear in)-.1 F F2 -(.inputr)144.23 446.4 Q(c)-.37 E F0 2.968(,b).31 G .467 -(ut each binding or command must be passed as a separate ar)-3.168 F -.467(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5 -(re\255read\255init\255\214le'. Options,)144 458.4 R(if supplied, ha)2.5 -E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1144 -470.4 Q F2 -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 482.4 Q F2 -.1(ke)5.158 G -(ymap)-.2 E F0 2.658(as the k)5.348 F -.15(ey)-.1 G 2.658(map to be af) -.15 F 2.659(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E -F2 -.1(ke)180 494.4 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193 -(emacs, emacs\255standar)5.693 F 3.192 -(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E -(vi\255command)180 506.4 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert) -4.379 E F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G -1.589(lent to).25 F F2(vi\255command)4.089 E F0(\()4.089 E F2(vi\255mo)A -(ve)-.1 E F0 1.59(is also a syn-)4.089 F(on)180 518.4 Q(ym\);)-.15 E F2 -(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2 -(emacs\255standar)2.5 E(d)-.37 E F0(.)A F1144 530.4 Q F0 -(List the names of all)180 530.4 Q F1 -.18(re)2.5 G(adline).18 E F0 -(functions.)2.5 E F1144 542.4 Q F0(Display)180 542.4 Q F1 -.18(re) -2.5 G(adline).18 E F0(function names and bindings in such a w)2.5 E -(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1144 554.4 -Q F0(List current)180 554.4 Q F1 -.18(re)2.5 G(adline).18 E F0 -(function names and bindings.)2.5 E F1144 566.4 Q F0(Display)180 -566.4 Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 -G 1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo) --.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 578.4 S 2.5(yt).1 G -(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1144 590.4 Q -F0(Display)180 590.4 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5 -(ys)-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo) --.15 G(utput.)-2.5 E F1144 602.4 Q F0(Display)180 602.4 Q F1 -.18 -(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E -(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G -(an be re-read.)-2.5 E F1144 614.4 Q F0(List current)180 614.4 Q -F1 -.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E -(alues.)-.25 E F1144 626.4 Q F2(\214lename)2.5 E F0(Read k)180 -638.4 Q .3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A -F1144 650.4 Q F2(function)2.5 E F0(Query about which k)180 662.4 Q --.15(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H -(he named).1 E F2(function)2.5 E F0(.)A F1144 674.4 Q F2(function) -2.5 E F0(Unbind all k)180 686.4 Q -.15(ey)-.1 G 2.5(sb).15 G -(ound to the named)-2.5 E F2(function)2.5 E F0(.)A F1144 698.4 Q -F2 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 710.4 Q .3 -.15(ve a)-.15 H .3 --.15(ny c).15 H(urrent binding for).15 E F2 -.1(ke)2.5 G(yseq)-.2 E F0 -(.)A(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(57)190.395 E 0 Cg -EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(string.)108 84 Q +(Se)108 100.8 Q -.15(ve)-.25 G .03(ral characters inhibit history e).15 +F .03(xpansion if found immediately follo)-.15 F .03(wing the history e) +-.25 F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 112.8 T +3.162(ni).25 G 3.162(fi)-3.162 G 3.162(ti)-3.162 G 3.162(su)-3.162 G +.662(nquoted: space, tab, ne)-3.162 F .662(wline, carriage return, and) +-.25 F/F1 10/Times-Bold@0 SF(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G +(he)-3.162 E F1(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F +F1(\()3.163 E F0(will also inhibit e)108 124.8 Q(xpansion.)-.15 E(Se)108 +141.6 Q -.15(ve)-.25 G .11(ral shell options settable with the).15 F F1 +(shopt)2.61 E F0 -.2(bu)2.61 G .109 +(iltin may be used to tailor the beha).2 F .109(vior of history e)-.2 F +(xpansion.)-.15 E .231(If the)108 153.6 R F1(histv)2.731 E(erify)-.1 E +F0 .231(shell option is enabled \(see the description of the)2.731 F F1 +(shopt)2.731 E F0 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 +F F1 -.18(re)2.731 G(adline).18 E F0 .232(is be-)2.732 F .449(ing used,\ + history substitutions are not immediately passed to the shell parser) +108 165.6 R 5.449(.I)-.55 G .448(nstead, the e)-5.449 F .448 +(xpanded line is)-.15 F 2.228(reloaded into the)108 177.6 R F1 -.18(re) +4.728 G(adline).18 E F0 2.228(editing b)4.728 F(uf)-.2 E 2.228 +(fer for further modi\214cation.)-.25 F(If)7.228 E F1 -.18(re)4.728 G +(adline).18 E F0 2.228(is being used, and the)4.728 F F1(histr)108 189.6 +Q(eedit)-.18 E F0 1.202(shell option is enabled, a f)3.702 F 1.202 +(ailed history substitution will be reloaded into the)-.1 F F1 -.18(re) +3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 201.6 S -.25(ff).2 G +.303(er for correction.).25 F(The)5.303 E F12.803 E F0 .303 +(option to the)2.803 F F1(history)2.804 E F0 -.2(bu)2.804 G .304 +(iltin command may be used to see what a history e).2 F(x-)-.15 E .52 +(pansion will do before using it.)108 213.6 R(The)5.52 E F13.02 E +F0 .52(option to the)3.02 F F1(history)3.02 E F0 -.2(bu)3.02 G .52 +(iltin may be used to add commands to the).2 F +(end of the history list without actually e)108 225.6 Q -.15(xe)-.15 G +(cuting them, so that the).15 E 2.5(ya)-.15 G(re a)-2.5 E -.25(va)-.2 G +(ilable for subsequent recall.).25 E 1.108(The shell allo)108 242.4 R +1.108(ws control of the v)-.25 F 1.108 +(arious characters used by the history e)-.25 F 1.108 +(xpansion mechanism \(see the de-)-.15 F .163(scription of)108 254.4 R +F1(histchars)2.663 E F0(abo)2.663 E .463 -.15(ve u)-.15 H(nder).15 E F1 +.163(Shell V)2.663 F(ariables)-.92 E F0 2.663(\). The)B .162 +(shell uses the history comment character to mark)2.663 F +(history timestamps when writing the history \214le.)108 266.4 Q F1(Ev) +87 283.2 Q(ent Designators)-.1 E F0 .204(An e)108 295.2 R -.15(ve)-.25 G +.204(nt designator is a reference to a command line entry in the histor\ +y list.).15 F .205(Unless the reference is abso-)5.204 F(lute, e)108 +307.2 Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot) +.15 G(he current position in the history list.)-2.5 E F1(!)108 324 Q F0 +1.608(Start a history substitution, e)144 324 R 1.608(xcept when follo) +-.15 F 1.607(wed by a)-.25 F F1(blank)4.107 E F0 4.107(,n)C -.25(ew) +-4.107 G 1.607(line, carriage return, = or \().25 F(\(when the)144 336 Q +F1(extglob)2.5 E F0(shell option is enabled using the)2.5 E F1(shopt)2.5 +E F0 -.2(bu)2.5 G(iltin\).).2 E F1(!)108 348 Q/F2 10/Times-Italic@0 SF +(n)A F0(Refer to command line)144 348 Q F2(n)2.86 E F0(.).24 E F1<21ad> +108 360 Q F2(n)A F0(Refer to the current command minus)144 360 Q F2(n) +2.86 E F0(.).24 E F1(!!)108 372 Q F0(Refer to the pre)144 372 Q +(vious command.)-.25 E(This is a synon)5 E(ym for `!\2551'.)-.15 E F1(!) +108 384 Q F2(string)A F0 .865(Refer to the most recent command precedin\ +g the current position in the history list starting with)144 384 R F2 +(string)144.34 396 Q F0(.).22 E F1(!?)108 408 Q F2(string)A F1([?])A F0 +1.503(Refer to the most recent command preceding the current position i\ +n the history list containing)144 420 R F2(string)144.34 432 Q F0 5.496 +(.T).22 G .496(he trailing)-5.496 F F1(?)2.996 E F0 .496 +(may be omitted if)2.996 F F2(string)3.336 E F0 .497(is follo)3.216 F +.497(wed immediately by a ne)-.25 F 2.997(wline. If)-.25 F F2(string) +2.997 E F0(is)2.997 E .391(missing, the string from the most recent sea\ +rch is used; it is an error if there is no pre)144 444 R .39 +(vious search)-.25 F(string.)144 456 Q/F3 12/Times-Bold@0 SF(^)108 473 Q +F2(string1)-5 I F3(^)5 I F2(string2)-5 I F3(^)5 I F0 .752 +(Quick substitution.)144 480 R .752(Repeat the pre)5.752 F .753 +(vious command, replacing)-.25 F F2(string1)3.593 E F0(with)3.253 E F2 +(string2)3.593 E F0 5.753(.E).02 G(qui)-5.753 E -.25(va)-.25 G .753 +(lent to).25 F -.74(``)144 492 S(!!:s).74 E/F4 12/Times-Roman@0 SF(^)5 I +F2(string1)-5 I F4(^)5 I F2(string2)-5 I F4(^)5 I F0 1.48 -.74('' \()-5 +L(see).74 E F1(Modi\214ers)2.5 E F0(belo)2.5 E(w\).)-.25 E F1(!#)108 504 +Q F0(The entire command line typed so f)144 504 Q(ar)-.1 E(.)-.55 E F1 +-.75(Wo)87 520.8 S(rd Designators).75 E F0 -.8(Wo)108 532.8 S 1.314 +(rd designators are used to select desired w).8 F 1.314(ords from the e) +-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F1(:)3.814 E F0 1.313 +(separates the e)3.813 F -.15(ve)-.25 G 1.313(nt speci\214cation).15 F +.529(from the w)108 544.8 R .529(ord designator)-.1 F 5.529(.I)-.55 G +3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 +(ord designator be)-.1 F .529(gins with a)-.15 F F1(^)3.029 E F0(,)A F1 +($)3.029 E F0(,)A F1(*)3.029 E F0(,)A F13.029 E F0 3.029(,o)C(r) +-3.029 E F1(%)3.029 E F0 5.53(.W)C(ords)-6.33 E .516 +(are numbered from the be)108 556.8 R .516 +(ginning of the line, with the \214rst w)-.15 F .516 +(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)5.515 G .515(rds are in-) +.8 F(serted into the current line separated by single spaces.)108 568.8 +Q F1 2.5(0\()108 585.6 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 597.6 +Q 2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E +F2(n)108.36 609.6 Q F0(The)144 609.6 Q F2(n)2.5 E F0(th w)A(ord.)-.1 E +F1(^)108 621.6 Q F0(The \214rst ar)144 621.6 Q 2.5(gument. That)-.18 F +(is, w)2.5 E(ord 1.)-.1 E F1($)108 633.6 Q F0 .063(The last w)144 633.6 +R 2.563(ord. This)-.1 F .063(is usually the last ar)2.563 F .064 +(gument, b)-.18 F .064(ut will e)-.2 F .064(xpand to the zeroth w)-.15 F +.064(ord if there is only)-.1 F(one w)144 645.6 Q(ord in the line.)-.1 E +F1(%)108 657.6 Q F0 1.42(The \214rst w)144 657.6 R 1.42 +(ord matched by the most recent `?)-.1 F F2(string)A F0 1.419 +(?' search, if the search string be)B 1.419(gins with a)-.15 F +(character that is part of a w)144 669.6 Q(ord.)-.1 E F2(x)108.77 681.6 +Q F1A F2(y)A F0 2.5(Ar)144 681.6 S(ange of w)-2.5 E(ords; `\255)-.1 +E F2(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)-.25 E F2(y)A F0('.)A F1 +(*)108 693.6 Q F0 .315(All of the w)144 693.6 R .315(ords b)-.1 F .315 +(ut the zeroth.)-.2 F .315(This is a synon)5.315 F .315(ym for `)-.15 F +F2(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*) +2.816 E F0 .316(if there is)2.816 F(just one w)144 705.6 Q(ord in the e) +-.1 E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 +E F1(x*)108 717.6 Q F0(Abbre)144 717.6 Q(viates)-.25 E F2(x\255$)2.5 E +F0(.)A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(57)185.955 E 0 +Cg EP %%Page: 58 58 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF144 84 Q/F2 10/Times-Italic@0 SF -.1(ke)2.5 G(yseq)-.2 E F1(:)A -F2(shell\255command)A F0(Cause)180 96 Q F2(shell\255command)4.325 E F0 -1.825(to be e)4.325 F -.15(xe)-.15 G 1.825(cuted whene).15 F -.15(ve) --.25 G(r).15 E F2 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F -(When)6.825 E F2(shell\255com-)4.325 E(mand)180 108 Q F0 1.765(is e) -4.265 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 -/Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765 -(riable to the contents of the).25 F F1 -.18(re)180 120 S(adline).18 E -F0 .375(line b)2.874 F(uf)-.2 E .375(fer and the)-.25 F F3 -(READLINE_POINT)2.875 E F0(and)2.625 E F3(READLINE_MARK)2.875 E F0 -.25 -(va)2.625 G .375(riables to the).25 F 1.186 -(current location of the insertion point and the sa)180 132 R -.15(ve) --.2 G 3.685(di).15 G 1.185(nsertion point \(the mark\), respec-)-3.685 F -(ti)180 144 Q -.15(ve)-.25 G(ly).15 E 5.701(.I)-.65 G 3.201(ft)-5.701 G -.701(he e)-3.201 F -.15(xe)-.15 G .701(cuted command changes the v).15 F -.702(alue of an)-.25 F 3.202(yo)-.15 G(f)-3.202 E F3(READLINE_LINE)3.202 -E/F4 9/Times-Roman@0 SF(,)A F3(READ-)2.952 E(LINE_POINT)180 156 Q F4(,)A -F0(or)3.581 E F3(READLINE_MARK)3.831 E F4(,)A F0 1.331(those ne)3.581 F -3.831(wv)-.25 G 1.33(alues will be re\215ected in the editing)-4.081 F -(state.)180 168 Q F1144 180 Q F0 .829(List all k)180 180 R 1.129 --.15(ey s)-.1 H .829 -(equences bound to shell commands and the associated commands in a for) -.15 F(-)-.2 E(mat that can be reused as input.)180 192 Q(The return v) -144 208.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 -(ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 -E F1(br)108 225.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .055 -(Exit from within a)144 237.6 R F1 -.25(fo)2.555 G(r).25 E F0(,)A F1 -(while)2.555 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1 -(select)2.555 E F0 2.555(loop. If)2.555 F F2(n)2.555 E F0 .055 -(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G -(ls.).15 E F2(n)5.414 E F0 .054(must be)2.794 F/F5 10/Symbol SF2.554 -E F0(1.)2.554 E(If)144 249.6 Q F2(n)3.074 E F0 .215(is greater than the\ - number of enclosing loops, all enclosing loops are e)2.954 F 2.715 -(xited. The)-.15 F .215(return v)2.715 F(alue)-.25 E(is 0 unless)144 -261.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2 -(bu)108 278.4 S(iltin).2 E F2(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E -F2(ar)A(guments)-.37 E F0(])A(Ex)144 290.4 Q .771 -(ecute the speci\214ed shell b)-.15 F .771(uiltin, passing it)-.2 F F2 -(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G .771(nd return its e)-3.271 -F .77(xit status.)-.15 F .77(This is useful)5.77 F .615 -(when de\214ning a function whose name is the same as a shell b)144 -302.4 R .616(uiltin, retaining the functionality of)-.2 F .57(the b)144 -314.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0 --.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E -5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 326.4 Q(alse if)-.1 -E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E -(uiltin command.)-.2 E F1(caller)108 343.2 Q F0([)2.5 E F2 -.2(ex)C(pr) -.2 E F0(])A .253(Returns the conte)144 355.2 R .254(xt of an)-.15 F -2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 -(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G -.254(cuted with the).15 F F1(.)2.754 E F0(or)2.754 E F1(sour)144 367.2 Q -(ce)-.18 E F0 -.2(bu)2.825 G 2.825(iltins\). W).2 F(ithout)-.4 E F2 -.2 -(ex)2.825 G(pr).2 E F0(,)A F1(caller)2.825 E F0 .324 -(displays the line number and source \214lename of the current)2.824 F -.253(subroutine call.)144 379.2 R .253(If a non-ne)5.253 F -.05(ga)-.15 -G(ti).05 E .553 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 -F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .254 -(displays the line number)2.754 F 2.754(,s)-.4 G(ub-)-2.754 E 1.327(rou\ -tine name, and source \214le corresponding to that position in the curr\ -ent e)144 391.2 R -.15(xe)-.15 G 1.327(cution call stack.).15 F(This e) -144 403.2 Q(xtra information may be used, for e)-.15 E .001 -(xample, to print a stack trace.)-.15 F .001(The current frame is frame) -5.001 F 3.02(0. The)144 415.2 R .52(return v)3.02 F .52 -(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .519 -(cuting a subroutine call or).15 F F2 -.2(ex)3.019 G(pr).2 E F0 .519 -(does not corre-)3.019 F(spond to a v)144 427.2 Q -(alid position in the call stack.)-.25 E F1(cd)108 444 Q F0([)2.5 E F1 -A F0(|[)A F1A F0([)2.5 E F1A F0(]] [\255@]] [)A F2 -(dir)A F0(])A .321(Change the current directory to)144 456 R F2(dir) -2.821 E F0 5.321(.i)C(f)-5.321 E F2(dir)2.821 E F0 .322 -(is not supplied, the v)2.821 F .322(alue of the)-.25 F F3(HOME)2.822 E -F0 .322(shell v)2.572 F .322(ariable is)-.25 F 1.036(the def)144 468 R -3.536(ault. An)-.1 F 3.536(ya)-.15 G 1.035(dditional ar)-3.536 F 1.035 -(guments follo)-.18 F(wing)-.25 E F2(dir)3.535 E F0 1.035(are ignored.) -3.535 F 1.035(The v)6.035 F(ariable)-.25 E F3(CDP)3.535 E -.855(AT)-.666 -G(H).855 E F0(de\214nes)3.285 E .826 -(the search path for the directory containing)144 480 R F2(dir)3.676 E -F0 3.326(:e).73 G .826(ach directory name in)-3.326 F F3(CDP)3.326 E --.855(AT)-.666 G(H).855 E F0 .827(is searched for)3.077 F F2(dir)144 492 -Q F0 5.665(.A)C(lternati)-5.665 E .965 -.15(ve d)-.25 H .665 -(irectory names in).15 F F3(CDP)3.165 E -.855(AT)-.666 G(H).855 E F0 -.665(are separated by a colon \(:\).)2.915 F 3.165(An)5.665 G .664 -(ull directory name)-3.165 F(in)144 504 Q F3(CDP)3.101 E -.855(AT)-.666 -G(H).855 E F0 .601(is the same as the current directory)2.851 F 3.102 -(,i)-.65 G .602(.e., `)-3.102 F(`)-.74 E F1(.)A F0 -.74('')C 5.602(.I) -.74 G(f)-5.602 E F2(dir)3.452 E F0(be)3.832 E .602 -(gins with a slash \(/\), then)-.15 F F3(CD-)3.102 E -.666(PA)144 516 S -(TH)-.189 E F0 1.003(is not used.)3.254 F(The)6.003 E F13.503 E F0 -1.003(option causes)3.503 F F1(cd)3.503 E F0 1.003(to use the ph)3.503 F -1.003(ysical directory structure by resolving)-.05 F .123 -(symbolic links while tra)144 528 R -.15(ve)-.2 G(rsing).15 E F2(dir) -2.623 E F0 .123(and before processing instances of)2.623 F F2(..)2.623 E -F0(in)2.623 E F2(dir)2.623 E F0 .123(\(see also the)2.623 F F1 -2.623 E F0(op-)2.623 E .43(tion to the)144 540 R F1(set)2.93 E F0 -.2 -(bu)2.93 G .43(iltin command\); the).2 F F12.929 E F0 .429 -(option forces symbolic links to be follo)2.929 F .429(wed by resolving) --.25 F .472(the link after processing instances of)144 552 R F2(..)2.972 -E F0(in)2.972 E F2(dir)2.973 E F0 5.473(.I)C(f)-5.473 E F2(..)2.973 E F0 -.473(appears in)2.973 F F2(dir)2.973 E F0 2.973(,i)C 2.973(ti)-2.973 G -2.973(sp)-2.973 G .473(rocessed by remo)-2.973 F .473(ving the)-.15 F -.948(immediately pre)144 564 R .948(vious pathname component from)-.25 F -F2(dir)3.448 E F0 3.448(,b)C .948(ack to a slash or the be)-3.448 F .948 -(ginning of)-.15 F F2(dir)3.448 E F0 5.948(.I)C(f)-5.948 E(the)144 576 Q -F12.868 E F0 .368(option is supplied with)2.868 F F12.868 E -F0 2.868(,a)C .368(nd the current w)-2.868 F .368 -(orking directory cannot be successfully deter)-.1 F(-)-.2 E .612 -(mined after a successful directory change,)144 588 R F1(cd)3.112 E F0 -.612(will return an unsuccessful status.)3.112 F .612(On systems that) -5.612 F .353(support it, the)144 600 R F12.853 E F0 .354 -(option presents the e)2.853 F .354(xtended attrib)-.15 F .354 -(utes associated with a \214le as a directory)-.2 F 5.354(.A)-.65 G(n) --5.354 E(ar)144 612 Q .072(gument of)-.18 F F12.572 E F0 .072 -(is con)2.572 F -.15(ve)-.4 G .072(rted to).15 F F3($OLDPWD)2.572 E F0 -.072(before the directory change is attempted.)2.322 F .072 -(If a non-empty)5.072 F .054(directory name from)144 624 R F3(CDP)2.554 -E -.855(AT)-.666 G(H).855 E F0 .054(is used, or if)2.304 F F12.555 E -F0 .055(is the \214rst ar)2.555 F .055 -(gument, and the directory change is suc-)-.18 F .168 -(cessful, the absolute pathname of the ne)144 636 R 2.668(ww)-.25 G .168 -(orking directory is written to the standard output.)-2.768 F(The)5.168 -E(return v)144 648 Q(alue is true if the directory w)-.25 E -(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F1(command)108 -664.8 Q F0([)2.5 E F1(\255pVv)A F0(])A F2(command)2.5 E F0([)2.5 E F2 -(ar)A(g)-.37 E F0(...])2.5 E(Run)144 676.8 Q F2(command)2.764 E F0(with) -3.334 E F2(ar)2.894 E(gs)-.37 E F0 .065 -(suppressing the normal shell function lookup.)2.834 F .065(Only b)5.065 -F .065(uiltin commands or)-.2 F .502(commands found in the)144 688.8 R -F3 -.666(PA)3.002 G(TH)-.189 E F0 .502(are e)2.752 F -.15(xe)-.15 G -3.002(cuted. If).15 F(the)3.002 E F13.002 E F0 .502(option is gi) -3.002 F -.15(ve)-.25 G .501(n, the search for).15 F F2(command)3.201 E -F0(is)3.771 E .399(performed using a def)144 700.8 R .399(ault v)-.1 F -.399(alue for)-.25 F F3 -.666(PA)2.899 G(TH)-.189 E F0 .4 -(that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) -5.4 E .175(either the)144 712.8 R F12.675 E F0(or)2.675 E F1 -2.675 E F0 .175(option is supplied, a description of)2.675 F F2(command) -2.875 E F0 .174(is printed.)3.445 F(The)5.174 E F12.674 E F0 .174 -(option causes)2.674 F 3.317(as)144 724.8 S .817(ingle w)-3.317 F .817 -(ord indicating the command or \214lename used to in)-.1 F -.2(vo)-.4 G --.1(ke).2 G F2(command)3.618 E F0 .818(to be displayed; the)4.088 F -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(58)190.395 E 0 Cg EP +SF<78ad>108 84 Q F0(Abbre)144 84 Q(viates)-.25 E/F2 10/Times-Italic@0 SF +(x\255$)2.5 E F0(lik)2.5 E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C +(ut omits the last w)-2.7 E 2.5(ord. If)-.1 F F1(x)2.5 E F0 +(is missing, it def)2.5 E(aults to 0.)-.1 E(If a w)108 100.8 Q +(ord designator is supplied without an e)-.1 E -.15(ve)-.25 G +(nt speci\214cation, the pre).15 E(vious command is used as the e)-.25 E +-.15(ve)-.25 G(nt.).15 E F1(Modi\214ers)87 117.6 Q F0 .184 +(After the optional w)108 129.6 R .184(ord designator)-.1 F 2.684(,t)-.4 +G .183(here may appear a sequence of one or more of the follo)-2.684 F +.183(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 141.6 Q +(These modify)5 E 2.5(,o)-.65 G 2.5(re)-2.5 G(dit, the w)-2.5 E +(ord or w)-.1 E(ords selected from the history e)-.1 E -.15(ve)-.25 G +(nt.).15 E F1(h)108 158.4 Q F0(Remo)144 158.4 Q .3 -.15(ve a t)-.15 H +(railing \214lename component, lea).15 E(ving only the head.)-.2 E F1(t) +108 170.4 Q F0(Remo)144 170.4 Q .3 -.15(ve a)-.15 H +(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F1(r) +108 182.4 Q F0(Remo)144 182.4 Q .3 -.15(ve a t)-.15 H(railing suf).15 E +(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E +(ving the basename.)-.2 E F1(e)108 194.4 Q F0(Remo)144 194.4 Q .3 -.15 +(ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 +206.4 Q F0(Print the ne)144 206.4 Q 2.5(wc)-.25 G(ommand b)-2.5 E +(ut do not e)-.2 E -.15(xe)-.15 G(cute it.).15 E F1(q)108 218.4 Q F0 +(Quote the substituted w)144 218.4 Q +(ords, escaping further substitutions.)-.1 E F1(x)108 230.4 Q F0 .385 +(Quote the substituted w)144 230.4 R .385(ords as with)-.1 F F1(q)2.885 +E F0 2.885(,b)C .386(ut break into w)-3.085 F .386(ords at)-.1 F F1 +(blanks)2.886 E F0 .386(and ne)2.886 F 2.886(wlines. The)-.25 F F1(q) +2.886 E F0(and)2.886 E F1(x)2.886 E F0(modi\214ers are mutually e)144 +242.4 Q(xclusi)-.15 E -.15(ve)-.25 G 2.5(;t).15 G +(he last one supplied is used.)-2.5 E F1(s/)108 254.4 Q F2(old)A F1(/)A +F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 266.4 Q F2(ne)3.329 E(w)-.15 E +F0 .469(for the \214rst occurrence of)3.279 F F2(old)3.199 E F0 .469 +(in the e)3.739 F -.15(ve)-.25 G .469(nt line.).15 F(An)5.469 E 2.969 +(yc)-.15 G .469(haracter may be used as the)-2.969 F .953 +(delimiter in place of /.)144 278.4 R .953 +(The \214nal delimiter is optional if it is the last character of the e) +5.953 F -.15(ve)-.25 G .954(nt line.).15 F .131 +(The delimiter may be quoted in)144 290.4 R F2(old)2.861 E F0(and)3.401 +E F2(ne)2.991 E(w)-.15 E F0 .131(with a single backslash.)2.941 F .131 +(If & appears in)5.131 F F2(ne)2.991 E(w)-.15 E F0 2.631(,i).31 G 2.631 +(ti)-2.631 G 2.631(sr)-2.631 G(e-)-2.631 E .619(placed by)144 302.4 R F2 +(old)3.349 E F0 5.619(.A).77 G .619(single backslash will quote the &.) +-2.5 F(If)5.619 E F2(old)3.349 E F0 .619(is null, it is set to the last) +3.889 F F2(old)3.349 E F0(substi-)3.89 E .487(tuted, or)144 314.4 R +2.987(,i)-.4 G 2.987(fn)-2.987 G 2.987(op)-2.987 G(re)-2.987 E .486 +(vious history substitutions took place, the last)-.25 F F2(string)3.326 +E F0 .486(in a)3.206 F F1(!?)2.986 E F2(string)A F1([?])A F0 2.986 +(search. If)5.486 F F2(ne)144.36 326.4 Q(w)-.15 E F0 +(is null, each matching)2.81 E F2(old)2.73 E F0(is deleted.)3.27 E F1(&) +108 338.4 Q F0(Repeat the pre)144 338.4 Q(vious substitution.)-.25 E F1 +(g)108 350.4 Q F0 .397(Cause changes to be applied o)144 350.4 R -.15 +(ve)-.15 G 2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398 +(nt line.).15 F .398(This is used in conjunction with `)5.398 F F1(:s)A +F0 2.898('\()C(e.g.,)-2.898 E(`)144 362.4 Q F1(:gs/)A F2(old)A F1(/)A F2 +(ne)A(w)-.15 E F1(/)A F0 .351('\) or `)B F1(:&)A F0 2.851('. If)B .351 +(used with `)2.851 F F1(:s)A F0 .351(', an)B 2.851(yd)-.15 G .35 +(elimiter can be used in place of /, and the \214nal de-)-2.851 F +(limiter is optional if it is the last character of the e)144 374.4 Q +-.15(ve)-.25 G(nt line.).15 E(An)5 E F1(a)2.5 E F0 +(may be used as a synon)2.5 E(ym for)-.15 E F1(g)2.5 E F0(.)A F1(G)108 +386.4 Q F0(Apply the follo)144 386.4 Q(wing `)-.25 E F1(s)A F0 2.5('o)C +2.5(r`)-2.5 G F1(&)-2.5 E F0 2.5('m)C(odi\214er once to each w)-2.5 E +(ord in the e)-.1 E -.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 +SF(SHELL B)72 403.2 Q(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .062 +(Unless otherwise noted, each b)108 415.2 R .062(uiltin command documen\ +ted in this section as accepting options preceded by)-.2 F F1108 +427.2 Q F0(accepts)3.077 E F13.077 E F0 .577 +(to signify the end of the options.)3.077 F(The)5.577 E F1(:)3.077 E F0 +(,)A F1(true)3.077 E F0(,)A F1(false)3.077 E F0 3.077(,a)C(nd)-3.077 E +F1(test)3.077 E F0(/)A F1([)A F0 -.2(bu)3.077 G .577 +(iltins do not accept options).2 F .461(and do not treat)108 439.2 R F1 +2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F1(exit) +2.961 E F0(,)A F1(logout)2.961 E F0(,)A F1 -.18(re)2.961 G(tur).18 E(n) +-.15 E F0(,)A F1(br)2.961 E(eak)-.18 E F0(,)A F1(continue)2.961 E F0(,)A +F1(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F1(shift)2.961 E F0 -.2(bu) +2.962 G .462(iltins accept and).2 F .261(process ar)108 451.2 R .261 +(guments be)-.18 F .261(ginning with)-.15 F F12.761 E F0 .261 +(without requiring)2.761 F F12.761 E F0 5.261(.O)C .261(ther b) +-5.261 F .26(uiltins that accept ar)-.2 F .26(guments b)-.18 F .26 +(ut are not)-.2 F 1.154(speci\214ed as accepting options interpret ar) +108 463.2 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1 +3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154 +(lid options and require).25 F F13.654 E F0(to)3.654 E(pre)108 +475.2 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 493.2 Q F0 +([)2.5 E F2(ar)A(guments)-.37 E F0(])A .452(No ef)144 505.2 R .452 +(fect; the command does nothing be)-.25 F .452(yond e)-.15 F(xpanding) +-.15 E F2(ar)3.282 E(guments)-.37 E F0 .451(and performing an)3.221 F +2.951(ys)-.15 G(peci\214ed)-2.951 E 2.5(redirections. The)144 517.2 R +(return status is zero.)2.5 E F1(.)110.5 534 Q F2(\214lename)6.666 E F0 +([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 546 Q(ce)-.18 E F2 +(\214lename)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.02 +(Read and e)144 558 R -.15(xe)-.15 G 1.02(cute commands from).15 F F2 +(\214lename)5.43 E F0 1.02(in the current shell en)3.7 F 1.02 +(vironment and return the e)-.4 F(xit)-.15 E 1.331 +(status of the last command e)144 570 R -.15(xe)-.15 G 1.331(cuted from) +.15 F F2(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331 E F2(\214lename) +5.741 E F0 1.33(does not contain a slash, \214le-)4.011 F .022(names in) +144 582 R/F4 9/Times-Bold@0 SF -.666(PA)2.522 G(TH)-.189 E F0 .022 +(are used to \214nd the directory containing)2.272 F F2(\214lename)4.432 +E F0 2.522(,b).18 G(ut)-2.722 E F2(\214lename)2.522 E F0 .023 +(does not need to be)2.523 F -.15(exe)144 594 S 3.861(cutable. The).15 F +1.361(\214le searched for in)3.861 F F4 -.666(PA)3.861 G(TH)-.189 E F0 +1.361(need not be e)3.611 F -.15(xe)-.15 G 3.86(cutable. When).15 F F1 +(bash)3.86 E F0 1.36(is not in)3.86 F F2(posix)3.86 E(mode)144 606 Q F0 +2.648(,t)C .148 +(he current directory is searched if no \214le is found in)-2.648 F F4 +-.666(PA)2.648 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .149(If the) +4.648 F F1(sour)2.649 E(cepath)-.18 E F0 .149(option to the)2.649 F F1 +(shopt)144 618 Q F0 -.2(bu)3.66 G 1.16(iltin command is turned of).2 F +1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F0 1.159 +(is not searched.)3.409 F 1.159(If an)6.159 F(y)-.15 E F2(ar)3.659 E +(guments)-.37 E F0 1.159(are supplied,)3.659 F(the)144 630 Q 3.691(yb) +-.15 G 1.191(ecome the positional parameters when)-3.691 F F2 +(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.692 +(cuted. Otherwise).15 F 1.192(the positional pa-)3.692 F .82 +(rameters are unchanged.)144 642 R .82(If the)5.82 F F13.32 E F0 +.82(option is enabled,)3.32 F F1(.)3.32 E F0 .82(inherits an)3.32 F 3.32 +(yt)-.15 G .82(rap on)-3.32 F F1(DEB)3.32 E(UG)-.1 E F0 3.32(;i)C 3.32 +(fi)-3.32 G 3.32(ti)-3.32 G 3.32(sn)-3.32 G(ot,)-3.32 E(an)144 654 Q(y) +-.15 E F1(DEB)3.322 E(UG)-.1 E F0 .822(trap string is sa)3.322 F -.15 +(ve)-.2 G 3.322(da).15 G .822(nd restored around the call to)-3.322 F F1 +(.)3.322 E F0 3.322(,a)C(nd)-3.322 E F1(.)3.322 E F0 .823(unsets the) +3.323 F F1(DEB)3.323 E(UG)-.1 E F0(trap)3.323 E .227(while it e)144 666 +R -.15(xe)-.15 G 2.727(cutes. If).15 F F12.727 E F0 .227 +(is not set, and the sourced \214le changes the)2.727 F F1(DEB)2.727 E +(UG)-.1 E F0 .227(trap, the ne)2.727 F 2.726(wv)-.25 G .226(alue is) +-2.976 F .89(retained when)144 678 R F1(.)3.39 E F0 3.39(completes. The) +3.39 F .891(return status is the status of the last command e)3.39 F +.891(xited within the)-.15 F(script \(0 if no commands are e)144 690 Q +-.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F2(\214lename)4.41 E +F0(is not found or cannot be read.)2.68 E F1(alias)108 706.8 Q F0([)2.5 +E F1A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C +(..])-2.5 E F1(Alias)144 718.8 Q F0 2.725(with no ar)5.225 F 2.724 +(guments or with the)-.18 F F15.224 E F0 2.724 +(option prints the list of aliases in the form)5.224 F F1(alias)5.224 E +F2(name)144 730.8 Q F0(=)A F2(value)A F0 .58(on standard output.)3.08 F +.58(When ar)5.58 F .58 +(guments are supplied, an alias is de\214ned for each)-.18 F F2(name) +3.08 E F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(58)185.955 E +0 Cg EP %%Page: 59 59 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF144 84 Q F0 .25(option produces a more v)2.75 F .25 -(erbose description.)-.15 F .249(If the)5.25 F F12.749 E F0(or) -2.749 E F12.749 E F0 .249(option is supplied, the e)2.749 F .249 -(xit status)-.15 F 1.004(is 0 if)144 96 R/F2 10/Times-Italic@0 SF -(command)3.704 E F0 -.1(wa)4.274 G 3.504(sf).1 G 1.005 -(ound, and 1 if not.)-3.504 F 1.005 -(If neither option is supplied and an error occurred or)6.005 F F2 -(command)144.2 108 Q F0 1.599(cannot be found, the e)4.869 F 1.599 -(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.598 -(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 120 S -(iltin is the e).2 E(xit status of)-.15 E F2(command)2.7 E F0(.).77 E F1 -(compgen)108 136.8 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d) --.37 E F0(])A .012(Generate possible completion matches for)144 148.8 R -F2(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(option)2.513 -E F0 .013(s, which may be an)B 2.513(yo)-.15 G(ption)-2.513 E .982 -(accepted by the)144 160.8 R F1(complete)3.482 E F0 -.2(bu)3.481 G .981 -(iltin with the e).2 F .981(xception of)-.15 F F13.481 E F0(and) -3.481 E F13.481 E F0 3.481(,a)C .981(nd write the matches to the) --3.481 F .13(standard output.)144 172.8 R .13(When using the)5.13 F F1 -2.63 E F0(or)2.63 E F12.631 E F0 .131(options, the v)2.631 F -.131(arious shell v)-.25 F .131(ariables set by the program-)-.25 F -(mable completion f)144 184.8 Q(acilities, while a)-.1 E -.25(va)-.2 G -(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25 -E .352(The matches will be generated in the same w)144 208.8 R .352 -(ay as if the programmable completion code had gen-)-.1 F .02(erated th\ -em directly from a completion speci\214cation with the same \215ags.)144 -220.8 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only) -2.52 F(those completions matching)144 232.8 Q F2(wor)2.5 E(d)-.37 E F0 -(will be displayed.)2.5 E(The return v)144 256.8 Q -(alue is true unless an in)-.25 E -.25(va)-.4 G -(lid option is supplied, or no matches were generated.).25 E F1 -(complete)108 273.6 Q F0([)2.5 E F1(\255abcdefgjksuv)A F0 2.5(][)C F1 --2.5 E F2(comp-option)2.5 E F0 2.5(][)C F1(\255DEI)-2.5 E F0 2.5 -(][)C F1-2.5 E F2(action)2.5 E F0 2.5(][)C F1-2.5 E F2 -(globpat)2.5 E F0 2.5(][)C F1-2.5 E F2(wor)2.5 E(dlist)-.37 E F0 -(])A([)144 285.6 Q F1A F2(function)2.5 E F0 2.5(][)C F1-2.5 -E F2(command)2.5 E F0 2.5(][)C F1-2.5 E F2(\214lterpat)2.5 E F0 -2.5(][)C F1-2.5 E F2(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F1 --2.5 E F2(suf)2.5 E<8c78>-.18 E F0(])A F2(name)2.5 E F0([)2.5 E F2 -(name ...)A F0(])A F1(complete \255pr)108 297.6 Q F0([)2.5 E F1(\255DEI) -A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 309.6 R -3.134(wa)-.25 G -.18(rg)-3.134 G .634(uments to each).18 F F2(name)3.134 -E F0 .634(should be completed.)3.134 F .633(If the)5.634 F F13.133 -E F0 .633(option is supplied, or if no)3.133 F .139 -(options are supplied, e)144 321.6 R .139 -(xisting completion speci\214cations are printed in a w)-.15 F .14 -(ay that allo)-.1 F .14(ws them to be)-.25 F .31(reused as input.)144 -333.6 R(The)5.31 E F12.81 E F0 .31(option remo)2.81 F -.15(ve)-.15 -G 2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F2(name) -2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F2 -(name)2.81 E F0(s)A 1.207 -(are supplied, all completion speci\214cations.)144 345.6 R(The)6.207 E -F13.707 E F0 1.208(option indicates that other supplied options) -3.708 F .5(and actions should apply to the `)144 357.6 R(`def)-.74 E -(ault')-.1 E 3('c)-.74 G .5 -(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144 -369.6 S .955(ommand for which no completion has pre)-3.455 F .955 -(viously been de\214ned.)-.25 F(The)5.955 E F13.455 E F0 .955 -(option indicates that)3.455 F .876 -(other supplied options and actions should apply to `)144 381.6 R -(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-) --3.376 F .447(pletion attempted on a blank line.)144 393.6 R(The)5.447 E -F12.947 E F0 .448 -(option indicates that other supplied options and actions)2.947 F .123 -(should apply to completion on the initial non-assignment w)144 405.6 R -.123(ord on the line, or after a command de-)-.1 F 1.02(limiter such as) -144 417.6 R F1(;)3.52 E F0(or)3.52 E F1(|)3.52 E F0 3.52(,w)C 1.021 -(hich is usually command name completion.)-3.52 F 1.021 -(If multiple options are sup-)6.021 F .708(plied, the)144 429.6 R F1 -3.208 E F0 .708(option tak)3.208 F .708(es precedence o)-.1 F -.15 -(ve)-.15 G(r).15 E F13.208 E F0 3.208(,a)C .708(nd both tak)-3.208 -F 3.208(ep)-.1 G .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F1 -3.207 E F0 5.707(.I)C 3.207(fa)-5.707 G 1.007 -.15(ny o)-3.207 H -(f).15 E F13.207 E F0(,)A F1144 441.6 Q F0 2.603(,o)C(r) --2.603 E F12.603 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15 -G(ther)-2.603 E F2(name)2.603 E F0(ar)2.603 E .103 -(guments are ignored; these completions only apply to the)-.18 F -(case speci\214ed by the option.)144 453.6 Q .153 -(The process of applying these completion speci\214cations when w)144 -477.6 R .152(ord completion is attempted is de-)-.1 F(scribed abo)144 -489.6 Q .3 -.15(ve u)-.15 H(nder).15 E F1(Pr)2.5 E -(ogrammable Completion)-.18 E F0(.)A .555 -(Other options, if speci\214ed, ha)144 513.6 R .855 -.15(ve t)-.2 H .555 -(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 -(guments to the)-.18 F F13.056 E F0(,)A F13.056 E F0 3.056 -(,a)C(nd)-3.056 E F13.056 E F0 .723(options \(and, if necessary) -144 525.6 R 3.223(,t)-.65 G(he)-3.223 E F13.223 E F0(and)3.223 E -F13.223 E F0 .722 -(options\) should be quoted to protect them from e)3.223 F(xpan-)-.15 E -(sion before the)144 537.6 Q F1(complete)2.5 E F0 -.2(bu)2.5 G -(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1144 549.6 Q -F2(comp-option)2.5 E F0(The)184 561.6 Q F2(comp-option)2.79 E F0 .291 -(controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') -.15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 -(yond the simple)-.15 F(generation of completions.)184 573.6 Q F2 -(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 585.6 Q F0 -.281(Perform the rest of the def)224 597.6 R(ault)-.1 E F1(bash)2.781 E -F0 .281(completions if the compspec generates no)2.781 F(matches.)224 -609.6 Q F1(default)184 621.6 Q F0 2.875(Use readline')224 621.6 R 5.375 -(sd)-.55 G(ef)-5.375 E 2.876 -(ault \214lename completion if the compspec generates no)-.1 F(matches.) -224 633.6 Q F1(dir)184 645.6 Q(names)-.15 E F0(Perform directory name c\ -ompletion if the compspec generates no matches.)224 657.6 Q F1 -(\214lenames)184 669.6 Q F0 -.7(Te)224 681.6 S .137(ll readline that th\ -e compspec generates \214lenames, so it can perform an).7 F 2.636<798c> --.15 G(le-)-2.636 E .134(name\255speci\214c processing \(lik)224 693.6 R -2.634(ea)-.1 G .134(dding a slash to directory names, quoting spe-) --2.634 F .45(cial characters, or suppressing trailing spaces\).)224 -705.6 R .45(Intended to be used with shell)5.45 F(functions.)224 717.6 Q -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(59)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(whose)144 84 Q/F1 +10/Times-Italic@0 SF(value)2.509 E F0 .009(is gi)2.509 F -.15(ve)-.25 G +2.509(n. A).15 F .009(trailing space in)2.509 F F1(value)2.509 E F0 .009 +(causes the ne)2.509 F .009(xt w)-.15 F .009(ord to be check)-.1 F .008 +(ed for alias substi-)-.1 F .579(tution when the alias is e)144 96 R +3.079(xpanded. F)-.15 F .579(or each)-.15 F F1(name)3.079 E F0 .579 +(in the ar)3.079 F .579(gument list for which no)-.18 F F1(value)3.079 E +F0 .579(is sup-)3.079 F 1.314(plied, the name and v)144 108 R 1.314 +(alue of the alias is printed.)-.25 F/F2 10/Times-Bold@0 SF(Alias)6.314 +E F0 1.314(returns true unless a)3.814 F F1(name)3.814 E F0 1.313(is gi) +3.814 F -.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E +(which no alias has been de\214ned.)144 120 Q F2(bg)108 136.8 Q F0([)2.5 +E F1(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144 148.8 R +F1(jobspec)3.244 E F0 .745 +(in the background, as if it had been started with)3.244 F F2(&)3.245 E +F0 5.745(.I)C(f)-5.745 E F1(job-)4.985 E(spec)144 160.8 Q F0 .672 +(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the) +-3.172 F F1(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2 +(bg)5.671 E F1(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418 +(when job control is disabled or)144 172.8 R 2.919(,w)-.4 G .419 +(hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G +(peci\214ed)-2.919 E F1(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G +(ot)-2.919 E(found or w)144 184.8 Q(as started without job control.)-.1 +E F2(bind)108 201.6 Q F0([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0 +2.5(][)C F2(\255lpsvPSVX)-2.5 E F0(])A F2(bind)108 213.6 Q F0([)2.5 E F2 +A F1 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2-2.5 E F1 +(function)2.5 E F0 2.5(][)C F2-2.5 E F1(function)2.5 E F0 2.5(][)C +F2-2.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 225.6 Q F0 +([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0(])A F22.5 E F1 +(\214lename)2.5 E F2(bind)108 237.6 Q F0([)2.5 E F2A F1 -.1(ke)2.5 +G(ymap)-.2 E F0(])A F22.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(shell\255command)A F2(bind)108 249.6 Q F0([)2.5 E F2A F1 -.1(ke) +2.5 G(ymap)-.2 E F0(])A F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(function\255name)A F2(bind)108 261.6 Q F0([)2.5 E F2A F1 -.1(ke) +2.5 G(ymap)-.2 E F0(])A F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 -.37(re)C +(adline\255command).37 E F2(bind)108 273.6 Q F1 -.37(re)2.5 G +(adline-command-line).37 E F0 .239(Display current)144 285.6 R F2 -.18 +(re)2.739 G(adline).18 E F0 -.1(ke)2.739 G 2.739(ya)-.05 G .239 +(nd function bindings, bind a k)-2.739 F .539 -.15(ey s)-.1 H .238 +(equence to a).15 F F2 -.18(re)2.738 G(adline).18 E F0 .238(function or) +2.738 F .039(macro, or set a)144 297.6 R F2 -.18(re)2.539 G(adline).18 E +F0 -.25(va)2.539 G 2.539(riable. Each).25 F .039(non-option ar)2.539 F +.04(gument is a command as it w)-.18 F .04(ould appear in a)-.1 F F2 +-.18(re)144 309.6 S(adline).18 E F0 .182(initialization \214le such as) +2.682 F F1(.inputr)2.912 E(c)-.37 E F0 2.682(,b).31 G .182 +(ut each binding or command must be passed as a sep-)-2.882 F 1.907 +(arate ar)144 321.6 R 1.907 +(gument; e.g., '"\\C\255x\\C\255r": re\255read\255init\255\214le'.)-.18 +F 1.907(Options, if supplied, ha)6.907 F 2.207 -.15(ve t)-.2 H 1.907 +(he follo).15 F(wing)-.25 E(meanings:)144 333.6 Q F2144 345.6 Q F1 +-.1(ke)2.5 G(ymap)-.2 E F0(Use)180 357.6 Q F1 -.1(ke)5.159 G(ymap)-.2 E +F0 2.659(as the k)5.349 F -.15(ey)-.1 G 2.658(map to be af).15 F 2.658 +(fected by the subsequent bindings.)-.25 F(Acceptable)7.658 E F1 -.1(ke) +180 369.6 S(ymap)-.2 E F0 3.192(names are)5.882 F F1 3.192 +(emacs, emacs\255standar)5.692 F 3.193 +(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E +(vi\255command)180 381.6 Q F0 4.09(,a)C(nd)-4.09 E F1(vi\255insert)4.38 +E F0(.).68 E F1(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G 1.589 +(lent to).25 F F1(vi\255command)4.089 E F0(\()4.089 E F1(vi\255mo)A(ve) +-.1 E F0 1.589(is also a syn-)4.089 F(on)180 393.6 Q(ym\);)-.15 E F1 +(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 +(emacs\255standar)2.5 E(d)-.37 E F0(.)A F2144 405.6 Q F0 +(List the names of all)180 405.6 Q F2 -.18(re)2.5 G(adline).18 E F0 +(functions.)2.5 E F2144 417.6 Q F0(Display)180 417.6 Q F2 -.18(re) +2.5 G(adline).18 E F0(function names and bindings in such a w)2.5 E +(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 429.6 +Q F0(List current)180 429.6 Q F2 -.18(re)2.5 G(adline).18 E F0 +(function names and bindings.)2.5 E F2144 441.6 Q F0(Display)180 +441.6 Q F2 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 +G 1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo) +-.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 453.6 S 2.5(yt).1 G +(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 465.6 Q +F0(Display)180 465.6 Q F2 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5 +(ys)-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo) +-.15 G(utput.)-2.5 E F2144 477.6 Q F0(Display)180 477.6 Q F2 -.18 +(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G +(an be re-read.)-2.5 E F2144 489.6 Q F0(List current)180 489.6 Q +F2 -.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues.)-.25 E F2144 501.6 Q F1(\214lename)2.5 E F0(Read k)180 +513.6 Q .3 -.15(ey b)-.1 H(indings from).15 E F1(\214lename)2.5 E F0(.)A +F2144 525.6 Q F1(function)2.5 E F0(Query about which k)180 537.6 Q +-.15(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H +(he named).1 E F1(function)2.5 E F0(.)A F2144 549.6 Q F1(function) +2.5 E F0(Unbind all k)180 561.6 Q -.15(ey)-.1 G 2.5(sb).15 G +(ound to the named)-2.5 E F1(function)2.5 E F0(.)A F2144 573.6 Q +F1 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 585.6 Q .3 -.15(ve a)-.15 H .3 +-.15(ny c).15 H(urrent binding for).15 E F1 -.1(ke)2.5 G(yseq)-.2 E F0 +(.)A F2144 597.6 Q F1 -.1(ke)2.5 G(yseq)-.2 E F2(:)A F1 +(shell\255command)A F0(Cause)180 609.6 Q F1(shell\255command)4.325 E F0 +1.825(to be e)4.325 F -.15(xe)-.15 G 1.825(cuted whene).15 F -.15(ve) +-.25 G(r).15 E F1 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F +(When)6.825 E F1(shell\255com-)4.325 E(mand)180 621.6 Q F0 1.764(is e) +4.264 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 +/Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765 +(riable to the contents of the).25 F F2 -.18(re)180 633.6 S(adline).18 E +F0 .375(line b)2.875 F(uf)-.2 E .375(fer and the)-.25 F F3 +(READLINE_POINT)2.875 E F0(and)2.625 E F3(READLINE_MARK)2.875 E F0 -.25 +(va)2.625 G .375(riables to the).25 F 1.185 +(current location of the insertion point and the sa)180 645.6 R -.15(ve) +-.2 G 3.686(di).15 G 1.186(nsertion point \(the mark\), respec-)-3.686 F +(ti)180 657.6 Q -.15(ve)-.25 G(ly).15 E 5.378(.T)-.65 G .377 +(he shell assigns an)-5.378 F 2.877(yn)-.15 G .377(umeric ar)-2.877 F +.377(gument the user supplied to the)-.18 F F3(READLINE_AR-)2.877 E +(GUMENT)180 669.6 Q F0 -.25(va)3.604 G 3.854(riable. If).25 F 1.354 +(there w)3.854 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354 +(ariable is not set.)-.25 F 1.355(If the e)6.355 F -.15(xe)-.15 G(cuted) +.15 E .344(command changes the v)180 681.6 R .344(alue of an)-.25 F +2.843(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.843 E/F4 9/Times-Roman@0 +SF(,)A F3(READLINE_POINT)2.593 E F4(,)A F0(or)2.593 E F3(READ-)2.843 E +(LINE_MARK)180 693.6 Q F4(,)A F0(those ne)2.25 E 2.5(wv)-.25 G +(alues will be re\215ected in the editing state.)-2.75 E F2144 +705.6 Q F0 .829(List all k)180 705.6 R 1.129 -.15(ey s)-.1 H .829 +(equences bound to shell commands and the associated commands in a for) +.15 F(-)-.2 E(mat that can be reused as input.)180 717.6 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(59)185.955 E 0 Cg EP %%Page: 60 60 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(noquote)184 84 Q F0 -.7(Te)224 84 S .814 -(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F -3.314(ya)-.15 G .815(re \214lenames \(quoting)-3.314 F -(\214lenames is the def)224 96 Q(ault\).)-.1 E F1(nosort)184 108 Q F0 --.7(Te)224 108 S(ll readline not to sort the list of possible completio\ -ns alphabetically).7 E(.)-.65 E F1(nospace)184 120 Q F0 -.7(Te)224 120 S -.22(ll readline not to append a space \(the def).7 F .22(ault\) to w)-.1 -F .22(ords completed at the end)-.1 F(of the line.)224 132 Q F1 -(plusdirs)184 144 Q F0 1.985(After an)224 144 R 4.485(ym)-.15 G 1.985 -(atches de\214ned by the compspec are generated, directory name)-4.485 F -.584(completion is attempted and an)224 156 R 3.084(ym)-.15 G .584 -(atches are added to the results of the other)-3.084 F(actions.)224 168 -Q F1144 180 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 192 -Q F2(action)2.5 E F0(may be one of the follo)2.5 E -(wing to generate a list of possible completions:)-.25 E F1(alias)184 -204 Q F0(Alias names.)224 204 Q(May also be speci\214ed as)5 E F1 -2.5 E F0(.)A F1(arrayv)184 216 Q(ar)-.1 E F0(Array v)224 228 Q -(ariable names.)-.25 E F1(binding)184 240 Q(Readline)224 240 Q F0 -.1 -(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 252 S(iltin) -.2 E F0(Names of shell b)224 252 Q(uiltin commands.)-.2 E -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 264 -Q F0(Command names.)224 276 Q(May also be speci\214ed as)5 E F12.5 -E F0(.)A F1(dir)184 288 Q(ectory)-.18 E F0(Directory names.)224 300 Q -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(disabled)184 312 -Q F0(Names of disabled shell b)224 324 Q(uiltins.)-.2 E F1(enabled)184 -336 Q F0(Names of enabled shell b)224 336 Q(uiltins.)-.2 E F1(export)184 -348 Q F0(Names of e)224 348 Q(xported shell v)-.15 E 2.5(ariables. May) --.25 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 -360 Q F0(File names.)224 360 Q(May also be speci\214ed as)5 E F1 -2.5 E F0(.)A F1(function)184 372 Q F0(Names of shell functions.)224 384 -Q F1(gr)184 396 Q(oup)-.18 E F0(Group names.)224 396 Q -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(helptopic)184 -408 Q F0(Help topics as accepted by the)224 420 Q F1(help)2.5 E F0 -.2 -(bu)2.5 G(iltin.).2 E F1(hostname)184 432 Q F0(Hostnames, as tak)224 444 -Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF -(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 456 Q F0 -(Job names, if job control is acti)224 456 Q -.15(ve)-.25 G 5(.M).15 G -(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 468 S -(yw).1 E(ord)-.1 E F0(Shell reserv)224 480 Q(ed w)-.15 E 2.5(ords. May) --.1 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(running)184 -492 Q F0(Names of running jobs, if job control is acti)224 492 Q -.15 -(ve)-.25 G(.).15 E F1(ser)184 504 Q(vice)-.1 E F0(Service names.)224 504 -Q(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 516 -Q F0 -1.11(Va)224 516 S(lid ar)1.11 E(guments for the)-.18 E F12.5 -E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1 -(shopt)184 528 Q F0(Shell option names as accepted by the)224 528 Q F1 -(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 540 Q F0 -(Signal names.)224 540 Q F1(stopped)184 552 Q F0 -(Names of stopped jobs, if job control is acti)224 552 Q -.15(ve)-.25 G -(.).15 E F1(user)184 564 Q F0(User names.)224 564 Q -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 576 S -(riable).1 E F0(Names of all shell v)224 576 Q 2.5(ariables. May)-.25 F -(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 588 Q F2 -(command)2.5 E(command)184 600 Q F0 1.055(is e)3.555 F -.15(xe)-.15 G -1.055(cuted in a subshell en).15 F 1.056 -(vironment, and its output is used as the possible)-.4 F(completions.) -184 612 Q F1144 624 Q F2(function)2.5 E F0 .114 -(The shell function)184 636 R F2(function)2.614 E F0 .114(is e)2.614 F --.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614 -(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 648 R --.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1 -($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817 -(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407 -(are being completed, the second ar)184 660 R 1.407(gument \()-.18 F F1 -($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 -(ord being completed, and the)-.1 F .103(third ar)184 672 R .103 -(gument \()-.18 F F1($3)A F0 2.603(\)i)C 2.603(st)-2.603 G .103(he w) --2.603 F .104(ord preceding the w)-.1 F .104 -(ord being completed on the current com-)-.1 F .102(mand line.)184 684 R -.102(When it \214nishes, the possible completions are retrie)5.102 F --.15(ve)-.25 G 2.601(df).15 G .101(rom the v)-2.601 F .101(alue of the) --.25 F F3(COMPREPL)184 696 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(60)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(The return v)144 +84 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15(ve)-.25 G +2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 E/F1 10 +/Times-Bold@0 SF(br)108 100.8 Q(eak)-.18 E F0([)2.5 E/F2 10 +/Times-Italic@0 SF(n)A F0(])A .055(Exit from within a)144 112.8 R F1 +-.25(fo)2.555 G(r).25 E F0(,)A F1(while)2.555 E F0(,)A F1(until)2.555 E +F0 2.555(,o)C(r)-2.555 E F1(select)2.555 E F0 2.555(loop. If)2.555 F F2 +(n)2.555 E F0 .055(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le) +2.555 E -.15(ve)-.25 G(ls.).15 E F2(n)5.414 E F0 .054(must be)2.794 F/F3 +10/Symbol SF2.554 E F0(1.)2.554 E(If)144 124.8 Q F2(n)3.074 E F0 +.215(is greater than the number of enclosing loops, all enclosing loops\ + are e)2.954 F 2.715(xited. The)-.15 F .215(return v)2.715 F(alue)-.25 E +(is 0 unless)144 136.8 Q F2(n)2.5 E F0 +(is not greater than or equal to 1.)2.5 E F1 -.2(bu)108 153.6 S(iltin).2 +E F2(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E F2(ar)A(guments)-.37 E F0 +(])A(Ex)144 165.6 Q .771(ecute the speci\214ed shell b)-.15 F .771 +(uiltin, passing it)-.2 F F2(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G +.771(nd return its e)-3.271 F .77(xit status.)-.15 F .77(This is useful) +5.77 F .615 +(when de\214ning a function whose name is the same as a shell b)144 +177.6 R .616(uiltin, retaining the functionality of)-.2 F .57(the b)144 +189.6 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0 +-.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 201.6 Q(alse if)-.1 +E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E +(uiltin command.)-.2 E F1(caller)108 218.4 Q F0([)2.5 E F2 -.2(ex)C(pr) +.2 E F0(])A .253(Returns the conte)144 230.4 R .254(xt of an)-.15 F +2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 +(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G +.254(cuted with the).15 F F1(.)2.754 E F0(or)2.754 E F1(sour)144 242.4 Q +(ce)-.18 E F0 -.2(bu)2.825 G 2.825(iltins\). W).2 F(ithout)-.4 E F2 -.2 +(ex)2.825 G(pr).2 E F0(,)A F1(caller)2.825 E F0 .324 +(displays the line number and source \214lename of the current)2.824 F +.253(subroutine call.)144 254.4 R .253(If a non-ne)5.253 F -.05(ga)-.15 +G(ti).05 E .553 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 +F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .254 +(displays the line number)2.754 F 2.754(,s)-.4 G(ub-)-2.754 E 1.327(rou\ +tine name, and source \214le corresponding to that position in the curr\ +ent e)144 266.4 R -.15(xe)-.15 G 1.327(cution call stack.).15 F(This e) +144 278.4 Q(xtra information may be used, for e)-.15 E .001 +(xample, to print a stack trace.)-.15 F .001(The current frame is frame) +5.001 F 3.02(0. The)144 290.4 R .52(return v)3.02 F .52 +(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .519 +(cuting a subroutine call or).15 F F2 -.2(ex)3.019 G(pr).2 E F0 .519 +(does not corre-)3.019 F(spond to a v)144 302.4 Q +(alid position in the call stack.)-.25 E F1(cd)108 319.2 Q F0([)2.5 E F1 +A F0(|[)A F1A F0([)2.5 E F1A F0(]] [\255@]] [)A F2 +(dir)A F0(])A .321(Change the current directory to)144 331.2 R F2(dir) +2.821 E F0 5.321(.i)C(f)-5.321 E F2(dir)2.821 E F0 .322 +(is not supplied, the v)2.821 F .322(alue of the)-.25 F/F4 9 +/Times-Bold@0 SF(HOME)2.822 E F0 .322(shell v)2.572 F .322(ariable is) +-.25 F .93(the def)144 343.2 R 3.43(ault. The)-.1 F -.25(va)3.43 G +(riable).25 E F4(CDP)3.43 E -.855(AT)-.666 G(H).855 E F0 .929 +(de\214nes the search path for the directory containing)3.18 F F2(dir) +3.779 E F0 3.429(:e).73 G(ach)-3.429 E .406(directory name in)144 355.2 +R F4(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 .407(is searched for)2.657 +F F2(dir)2.907 E F0 5.407(.A)C(lternati)-5.407 E .707 -.15(ve d)-.25 H +.407(irectory names in).15 F F4(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 +.407(are sepa-)2.657 F .799(rated by a colon \(:\).)144 367.2 R 3.299 +(An)5.799 G .799(ull directory name in)-3.299 F F4(CDP)3.299 E -.855(AT) +-.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F +3.299(,i)-.65 G(.e.,)-3.299 E -.74(``)144 379.2 S F1(.).74 E F0 -.74('') +C 5.427(.I).74 G(f)-5.427 E F2(dir)3.277 E F0(be)3.657 E .427 +(gins with a slash \(/\), then)-.15 F F4(CDP)2.928 E -.855(AT)-.666 G(H) +.855 E F0 .428(is not used.)2.678 F(The)5.428 E F12.928 E F0 .428 +(option causes)2.928 F F1(cd)2.928 E F0 .428(to use the)2.928 F(ph)144 +391.2 Q .168 +(ysical directory structure by resolving symbolic links while tra)-.05 F +-.15(ve)-.2 G(rsing).15 E F2(dir)2.667 E F0 .167(and before processing) +2.667 F 1.225(instances of)144 403.2 R F2(..)3.725 E F0(in)3.725 E F2 +(dir)3.725 E F0 1.225(\(see also the)3.725 F F13.725 E F0 1.225 +(option to the)3.725 F F1(set)3.725 E F0 -.2(bu)3.725 G 1.225 +(iltin command\); the).2 F F13.725 E F0 1.225(option forces)3.725 +F .412(symbolic links to be follo)144 415.2 R .411 +(wed by resolving the link after processing instances of)-.25 F F2(..) +2.911 E F0(in)2.911 E F2(dir)2.911 E F0 5.411(.I)C(f)-5.411 E F2(..) +2.911 E F0(ap-)2.911 E .34(pears in)144 427.2 R F2(dir)2.84 E F0 2.84 +(,i)C 2.84(ti)-2.84 G 2.841(sp)-2.84 G .341(rocessed by remo)-2.841 F +.341(ving the immediately pre)-.15 F .341(vious pathname component from) +-.25 F F2(dir)2.841 E F0(,)A .176(back to a slash or the be)144 439.2 R +.176(ginning of)-.15 F F2(dir)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F12.675 E F0 .175(option is supplied with)2.675 F F1 +2.675 E F0 2.675(,a)C .175(nd the current w)-2.675 F(ork-)-.1 E +.341(ing directory cannot be successfully determined after a successful\ + directory change,)144 451.2 R F1(cd)2.841 E F0 .341(will return)2.841 F +.357(an unsuccessful status.)144 463.2 R .357 +(On systems that support it, the)5.357 F F12.856 E F0 .356 +(option presents the e)2.856 F .356(xtended attrib)-.15 F(utes)-.2 E +.069(associated with a \214le as a directory)144 475.2 R 5.069(.A)-.65 G +2.569(na)-5.069 G -.18(rg)-2.569 G .069(ument of).18 F F12.569 E F0 +.07(is con)2.57 F -.15(ve)-.4 G .07(rted to).15 F F4($OLDPWD)2.57 E F0 +.07(before the direc-)2.32 F .307(tory change is attempted.)144 487.2 R +.306(If a non-empty directory name from)5.307 F F4(CDP)2.806 E -.855(AT) +-.666 G(H).855 E F0 .306(is used, or if)2.556 F F12.806 E F0 .306 +(is the \214rst)2.806 F(ar)144 499.2 Q .116(gument, and the directory c\ +hange is successful, the absolute pathname of the ne)-.18 F 2.616(ww) +-.25 G .116(orking direc-)-2.716 F .15 +(tory is written to the standard output.)144 511.2 R .15 +(If the directory change is successful,)5.15 F F1(cd)2.65 E F0 .15 +(sets the v)2.65 F .15(alue of the)-.25 F F1(PWD)144 523.2 Q F0(en)2.957 +E .457(vironment v)-.4 F .457(ariable to the ne)-.25 F 2.958(wd)-.25 G +.458(irectory name, and sets the)-2.958 F F1(OLDPWD)2.958 E F0(en)2.958 +E .458(vironment v)-.4 F(ari-)-.25 E .126(able to the v)144 535.2 R .126 +(alue of the current w)-.25 F .126(orking directory before the change.) +-.1 F .125(The return v)5.125 F .125(alue is true if the)-.25 F +(directory w)144 547.2 Q(as successfully changed; f)-.1 E +(alse otherwise.)-.1 E F1(command)108 564 Q F0([)2.5 E F1(\255pVv)A F0 +(])A F2(command)2.5 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Run)144 +576 Q F2(command)2.764 E F0(with)3.334 E F2(ar)2.894 E(gs)-.37 E F0 .065 +(suppressing the normal shell function lookup.)2.834 F .065(Only b)5.065 +F .065(uiltin commands or)-.2 F .502(commands found in the)144 588 R F4 +-.666(PA)3.002 G(TH)-.189 E F0 .502(are e)2.752 F -.15(xe)-.15 G 3.002 +(cuted. If).15 F(the)3.002 E F13.002 E F0 .502(option is gi)3.002 +F -.15(ve)-.25 G .501(n, the search for).15 F F2(command)3.201 E F0(is) +3.771 E .399(performed using a def)144 600 R .399(ault v)-.1 F .399 +(alue for)-.25 F F4 -.666(PA)2.899 G(TH)-.189 E F0 .4 +(that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) +5.4 E .175(either the)144 612 R F12.675 E F0(or)2.675 E F1 +2.675 E F0 .175(option is supplied, a description of)2.675 F F2(command) +2.875 E F0 .174(is printed.)3.445 F(The)5.174 E F12.674 E F0 .174 +(option causes)2.674 F 3.317(as)144 624 S .817(ingle w)-3.317 F .817 +(ord indicating the command or \214lename used to in)-.1 F -.2(vo)-.4 G +-.1(ke).2 G F2(command)3.618 E F0 .818(to be displayed; the)4.088 F F1 +144 636 Q F0 .25(option produces a more v)2.75 F .25 +(erbose description.)-.15 F .249(If the)5.25 F F12.749 E F0(or) +2.749 E F12.749 E F0 .249(option is supplied, the e)2.749 F .249 +(xit status)-.15 F 1.004(is 0 if)144 648 R F2(command)3.704 E F0 -.1(wa) +4.274 G 3.504(sf).1 G 1.005(ound, and 1 if not.)-3.504 F 1.005 +(If neither option is supplied and an error occurred or)6.005 F F2 +(command)144.2 660 Q F0 1.599(cannot be found, the e)4.869 F 1.599 +(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.598 +(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 672 S +(iltin is the e).2 E(xit status of)-.15 E F2(command)2.7 E F0(.).77 E F1 +(compgen)108 688.8 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d) +-.37 E F0(])A .012(Generate possible completion matches for)144 700.8 R +F2(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(option)2.513 +E F0 .013(s, which may be an)B 2.513(yo)-.15 G(ption)-2.513 E .982 +(accepted by the)144 712.8 R F1(complete)3.482 E F0 -.2(bu)3.481 G .981 +(iltin with the e).2 F .981(xception of)-.15 F F13.481 E F0(and) +3.481 E F13.481 E F0 3.481(,a)C .981(nd write the matches to the) +-3.481 F 2.786(standard output.)144 724.8 R 2.786(When using the)7.786 F +F15.286 E F0(or)5.287 E F15.287 E F0 2.787(options, the v) +5.287 F 2.787(arious shell v)-.25 F 2.787(ariables set by the)-.25 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(60)185.955 E 0 Cg EP %%Page: 61 61 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF144 84 Q/F2 10/Times-Italic@0 SF(globpat)2.5 E F0 1.007 -(The pathname e)184 96 R 1.007(xpansion pattern)-.15 F F2(globpat)3.507 -E F0 1.007(is e)3.507 F 1.008(xpanded to generate the possible comple-) --.15 F(tions.)184 108 Q F1144 120 Q F2(pr)2.5 E(e\214x)-.37 E(pr) -184 132 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534 -(ginning of each possible completion after all other options ha)-.15 F --.15(ve)-.2 G(been applied.)184 144 Q F1144 156 Q F2(suf)2.5 E -<8c78>-.18 E(suf)184 156 Q<8c78>-.18 E F0 -(is appended to each possible completion after all other options ha)2.5 -E .3 -.15(ve b)-.2 H(een applied.).15 E F1144 168 Q F2(wor)2.5 E -(dlist)-.37 E F0(The)184 180 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14 -(is split using the characters in the)3.639 F/F3 9/Times-Bold@0 SF(IFS) -3.64 E F0 1.14(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F -.981(each resultant w)184 192 R .981(ord is e)-.1 F 3.481 -(xpanded. Shell)-.15 F .981(quoting is honored within)3.481 F F2(wor) -3.481 E(dlist)-.37 E F0 3.48(,i)C 3.48(no)-3.48 G .98(rder to)-3.48 F -(pro)184 204 Q .765(vide a mechanism for the w)-.15 F .766 -(ords to contain shell metacharacters or characters in the)-.1 F -.25 -(va)184 216 S 1.965(lue of).25 F F3(IFS)4.465 E/F4 9/Times-Roman@0 SF(.) -A F0 1.964 -(The possible completions are the members of the resultant list which) -6.465 F(match the w)184 228 Q(ord being completed.)-.1 E F1144 240 -Q F2(\214lterpat)2.5 E(\214lterpat)184 252 Q F0 .455 -(is a pattern as used for pathname e)2.955 F 2.956(xpansion. It)-.15 F -.456(is applied to the list of possible)2.956 F 1.596 -(completions generated by the preceding options and ar)184 264 R 1.596 -(guments, and each completion)-.18 F(matching)184 276 Q F2(\214lterpat) -3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704 -(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0 -(in)3.204 E F2(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705 -(tes the pattern;).05 F(in this case, an)184 288 Q 2.5(yc)-.15 G -(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E --.15(ve)-.15 G(d.).15 E .467(The return v)144 304.8 R .467 -(alue is true unless an in)-.25 F -.25(va)-.4 G .466 -(lid option is supplied, an option other than).25 F F12.966 E F0 -(or)2.966 E F12.966 E F0 .466(is sup-)2.966 F 1.361 -(plied without a)144 316.8 R F2(name)3.861 E F0(ar)3.861 E 1.361 -(gument, an attempt is made to remo)-.18 F 1.662 -.15(ve a c)-.15 H -1.362(ompletion speci\214cation for a).15 F F2(name)144 328.8 Q F0 -(for which no speci\214cation e)2.5 E -(xists, or an error occurs adding a completion speci\214cation.)-.15 E -F1(compopt)108 345.6 Q F0([)2.5 E F1A F2(option)2.5 E F0 2.5(][)C -F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C -F2(name)-2.5 E F0(])A .447(Modify completion options for each)144 357.6 -R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0 -.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725 -(completion if no)144 369.6 R F2(name)3.225 E F0 3.225(sa)C .725 -(re supplied.)-3.225 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa) -C .725(re gi)-3.225 F -.15(ve)-.25 G .726 -(n, display the completion options for).15 F(each)144 381.6 Q F2(name) -3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v) -5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224 -F .723(alid for the)-.25 F F1(com-)3.223 E(plete)144 393.6 Q F0 -.2(bu) -2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) --5.178 E F12.678 E F0 .178 -(option indicates that other supplied options should apply to)2.678 F -1.228(the `)144 405.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\ -mmand completion; that is, completion attempted on a command for which \ -no)-3.728 F 2.038(completion has pre)144 417.6 R 2.038 -(viously been de\214ned.)-.25 F(The)7.038 E F14.538 E F0 2.039 -(option indicates that other supplied options)4.538 F 1.539 -(should apply to `)144 429.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538 -(ommand completion; that is, completion attempted on a blank line.) --4.039 F(The)144 441.6 Q F13.02 E F0 .52(option indicates that ot\ -her supplied options should apply to completion on the initial non-)3.02 -F .868(assignment w)144 453.6 R .868 -(ord on the line, or after a command delimiter such as)-.1 F F1(;)3.368 -E F0(or)3.368 E F1(|)3.368 E F0 3.367(,w)C .867(hich is usually com-) --3.367 F(mand name completion.)144 465.6 Q .431(The return v)144 489.6 R -.431(alue is true unless an in)-.25 F -.25(va)-.4 G .431 -(lid option is supplied, an attempt is made to modify the op-).25 F -(tions for a)144 501.6 Q F2(name)2.5 E F0 -(for which no completion speci\214cation e)2.5 E -(xists, or an output error occurs.)-.15 E F1(continue)108 518.4 Q F0([) -2.5 E F2(n)A F0(])A .851(Resume the ne)144 530.4 R .851 -(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.351 G(r).25 E F0(,)A -F1(while)3.351 E F0(,)A F1(until)3.351 E F0 3.351(,o)C(r)-3.351 E F1 -(select)3.35 E F0 3.35(loop. If)3.35 F F2(n)3.71 E F0 .85 -(is speci\214ed, re-)3.59 F .203(sume at the)144 542.4 R F2(n)2.703 E F0 -.203(th enclosing loop.)B F2(n)5.563 E F0 .203(must be)2.943 F/F5 10 -/Symbol SF2.703 E F0 2.704(1. If)2.703 F F2(n)3.064 E F0 .204 -(is greater than the number of enclosing loops,)2.944 F 1.184 -(the last enclosing loop \(the `)144 554.4 R(`top-le)-.74 E -.15(ve)-.25 -G(l').15 E 3.684('l)-.74 G 1.184(oop\) is resumed.)-3.684 F 1.183 -(The return v)6.184 F 1.183(alue is 0 unless)-.25 F F2(n)3.683 E F0 -1.183(is not)3.683 F(greater than or equal to 1.)144 566.4 Q F1(declar) -108 583.2 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 2.5(][)C F1 --2.5 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C -(..])-2.5 E F1(typeset)108 595.2 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 -2.5(][)C F1-2.5 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 -2.5(].)C(..])-2.5 E 1.264(Declare v)144 607.2 R 1.264 -(ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F -3.765(utes. If)-.2 F(no)3.765 E F2(name)3.765 E F0 3.765(sa)C 1.265 -(re gi)-3.765 F -.15(ve)-.25 G 3.765(nt).15 G 1.265(hen display the v) --3.765 F 1.265(alues of)-.25 F -.25(va)144 619.2 S 3.46(riables. The).25 -F F13.46 E F0 .96(option will display the attrib)3.46 F .96 -(utes and v)-.2 F .96(alues of each)-.25 F F2(name)3.82 E F0 5.96(.W).18 -G(hen)-5.96 E F13.46 E F0 .96(is used)3.46 F(with)144 631.2 Q F2 -(name)2.774 E F0(ar)2.774 E .274 -(guments, additional options, other than)-.18 F F12.775 E F0(and) -2.775 E F12.775 E F0 2.775(,a)C .275(re ignored.)-2.775 F(When) -5.275 E F12.775 E F0 .275(is supplied)2.775 F(without)144 643.2 Q -F2(name)3.79 E F0(ar)3.79 E 1.29(guments, it will display the attrib) --.18 F 1.289(utes and v)-.2 F 1.289(alues of all v)-.25 F 1.289 -(ariables ha)-.25 F 1.289(ving the at-)-.2 F(trib)144 655.2 Q .38 -(utes speci\214ed by the additional options.)-.2 F .38 -(If no other options are supplied with)5.38 F F12.88 E F0(,)A F1 -(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.107(display the attrib)144 -667.2 R 1.107(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606 -(ariables. The)-.25 F F13.606 E F0 1.106 -(option will restrict the display to)3.606 F .299(shell functions.)144 -679.2 R(The)5.299 E F12.799 E F0 .299(option inhibits the display\ - of function de\214nitions; only the function name)2.799 F 1.54 -(and attrib)144 691.2 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F -F1(extdeb)4.04 E(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F -F1(shopt)4.04 E F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648 -(name and line number where each)144 703.2 R F2(name)3.148 E F0 .648 -(is de\214ned are displayed as well.)3.148 F(The)5.648 E F13.148 E -F0 .649(option implies)3.149 F F1144 715.2 Q F0 5.837(.T)C(he) --5.837 E F13.337 E F0 .837(option forces v)3.337 F .836 -(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15 -(ve)-.25 G 3.336(nw).15 G(hen)-3.336 E F1(de-)3.336 E(clar)144 727.2 Q -(e)-.18 E F0 .818(is e)3.318 F -.15(xe)-.15 G .818 -(cuted in a shell function.).15 F .818 -(It is ignored in all other cases.)5.818 F(The)5.819 E F13.319 E -F0 .819(option causes local)3.319 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(61)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(programmable completion f)144 84 Q(acilities, while a)-.1 E -.25(va)-.2 +G(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25 +E .352(The matches will be generated in the same w)144 108 R .352 +(ay as if the programmable completion code had gen-)-.1 F .02(erated th\ +em directly from a completion speci\214cation with the same \215ags.)144 +120 R(If)5.02 E/F1 10/Times-Italic@0 SF(wor)2.52 E(d)-.37 E F0 .02 +(is speci\214ed, only)2.52 F(those completions matching)144 132 Q F1 +(wor)2.5 E(d)-.37 E F0(will be displayed.)2.5 E(The return v)144 156 Q +(alue is true unless an in)-.25 E -.25(va)-.4 G +(lid option is supplied, or no matches were generated.).25 E/F2 10 +/Times-Bold@0 SF(complete)108 172.8 Q F0([)2.5 E F2(\255abcdefgjksuv)A +F0 2.5(][)C F2-2.5 E F1(comp-option)2.5 E F0 2.5(][)C F2(\255DEI) +-2.5 E F0 2.5(][)C F2-2.5 E F1(action)2.5 E F0 2.5(][)C F2 +-2.5 E F1(globpat)2.5 E F0 2.5(][)C F2-2.5 E F1(wor)2.5 E(dlist) +-.37 E F0(])A([)144 184.8 Q F2A F1(function)2.5 E F0 2.5(][)C F2 +-2.5 E F1(command)2.5 E F0 2.5(][)C F2-2.5 E F1(\214lterpat) +2.5 E F0 2.5(][)C F2-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C +F2-2.5 E F1(suf)2.5 E<8c78>-.18 E F0(])A F1(name)2.5 E F0([)2.5 E +F1(name ...)A F0(])A F2(complete \255pr)108 196.8 Q F0([)2.5 E F2 +(\255DEI)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 +208.8 R 3.134(wa)-.25 G -.18(rg)-3.134 G .634(uments to each).18 F F1 +(name)3.134 E F0 .634(should be completed.)3.134 F .633(If the)5.634 F +F23.133 E F0 .633(option is supplied, or if no)3.133 F .139 +(options are supplied, e)144 220.8 R .139 +(xisting completion speci\214cations are printed in a w)-.15 F .14 +(ay that allo)-.1 F .14(ws them to be)-.25 F .31(reused as input.)144 +232.8 R(The)5.31 E F22.81 E F0 .31(option remo)2.81 F -.15(ve)-.15 +G 2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F1(name) +2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F1 +(name)2.81 E F0(s)A 1.207 +(are supplied, all completion speci\214cations.)144 244.8 R(The)6.207 E +F23.707 E F0 1.208(option indicates that other supplied options) +3.708 F .5(and actions should apply to the `)144 256.8 R(`def)-.74 E +(ault')-.1 E 3('c)-.74 G .5 +(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144 +268.8 S .955(ommand for which no completion has pre)-3.455 F .955 +(viously been de\214ned.)-.25 F(The)5.955 E F23.455 E F0 .955 +(option indicates that)3.455 F .876 +(other supplied options and actions should apply to `)144 280.8 R +(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-) +-3.376 F .447(pletion attempted on a blank line.)144 292.8 R(The)5.447 E +F22.947 E F0 .448 +(option indicates that other supplied options and actions)2.947 F .123 +(should apply to completion on the initial non-assignment w)144 304.8 R +.123(ord on the line, or after a command de-)-.1 F 1.02(limiter such as) +144 316.8 R F2(;)3.52 E F0(or)3.52 E F2(|)3.52 E F0 3.52(,w)C 1.021 +(hich is usually command name completion.)-3.52 F 1.021 +(If multiple options are sup-)6.021 F .708(plied, the)144 328.8 R F2 +3.208 E F0 .708(option tak)3.208 F .708(es precedence o)-.1 F -.15 +(ve)-.15 G(r).15 E F23.208 E F0 3.208(,a)C .708(nd both tak)-3.208 +F 3.208(ep)-.1 G .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2 +3.207 E F0 5.707(.I)C 3.207(fa)-5.707 G 1.007 -.15(ny o)-3.207 H +(f).15 E F23.207 E F0(,)A F2144 340.8 Q F0 2.603(,o)C(r) +-2.603 E F22.603 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15 +G(ther)-2.603 E F1(name)2.603 E F0(ar)2.603 E .103 +(guments are ignored; these completions only apply to the)-.18 F +(case speci\214ed by the option.)144 352.8 Q .153 +(The process of applying these completion speci\214cations when w)144 +376.8 R .152(ord completion is attempted is de-)-.1 F(scribed abo)144 +388.8 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E +(ogrammable Completion)-.18 E F0(.)A .555 +(Other options, if speci\214ed, ha)144 412.8 R .855 -.15(ve t)-.2 H .555 +(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 +(guments to the)-.18 F F23.056 E F0(,)A F23.056 E F0 3.056 +(,a)C(nd)-3.056 E F23.056 E F0 .723(options \(and, if necessary) +144 424.8 R 3.223(,t)-.65 G(he)-3.223 E F23.223 E F0(and)3.223 E +F23.223 E F0 .722 +(options\) should be quoted to protect them from e)3.223 F(xpan-)-.15 E +(sion before the)144 436.8 Q F2(complete)2.5 E F0 -.2(bu)2.5 G +(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2144 448.8 Q +F1(comp-option)2.5 E F0(The)184 460.8 Q F1(comp-option)2.79 E F0 .291 +(controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') +.15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 +(yond the simple)-.15 F(generation of completions.)184 472.8 Q F1 +(comp-option)5 E F0(may be one of:)2.5 E F2(bashdefault)184 484.8 Q F0 +.281(Perform the rest of the def)224 496.8 R(ault)-.1 E F2(bash)2.781 E +F0 .281(completions if the compspec generates no)2.781 F(matches.)224 +508.8 Q F2(default)184 520.8 Q F0 2.875(Use readline')224 520.8 R 5.375 +(sd)-.55 G(ef)-5.375 E 2.876 +(ault \214lename completion if the compspec generates no)-.1 F(matches.) +224 532.8 Q F2(dir)184 544.8 Q(names)-.15 E F0(Perform directory name c\ +ompletion if the compspec generates no matches.)224 556.8 Q F2 +(\214lenames)184 568.8 Q F0 -.7(Te)224 580.8 S .137(ll readline that th\ +e compspec generates \214lenames, so it can perform an).7 F 2.636<798c> +-.15 G(le-)-2.636 E .134(name\255speci\214c processing \(lik)224 592.8 R +2.634(ea)-.1 G .134(dding a slash to directory names, quoting spe-) +-2.634 F .45(cial characters, or suppressing trailing spaces\).)224 +604.8 R .45(Intended to be used with shell)5.45 F(functions.)224 616.8 Q +F2(noquote)184 628.8 Q F0 -.7(Te)224 628.8 S .814 +(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F +3.314(ya)-.15 G .815(re \214lenames \(quoting)-3.314 F +(\214lenames is the def)224 640.8 Q(ault\).)-.1 E F2(nosort)184 652.8 Q +F0 -.7(Te)224 652.8 S(ll readline not to sort the list of possible comp\ +letions alphabetically).7 E(.)-.65 E F2(nospace)184 664.8 Q F0 -.7(Te) +224 664.8 S .22(ll readline not to append a space \(the def).7 F .22 +(ault\) to w)-.1 F .22(ords completed at the end)-.1 F(of the line.)224 +676.8 Q F2(plusdirs)184 688.8 Q F0 1.985(After an)224 688.8 R 4.485(ym) +-.15 G 1.985 +(atches de\214ned by the compspec are generated, directory name)-4.485 F +.584(completion is attempted and an)224 700.8 R 3.084(ym)-.15 G .584 +(atches are added to the results of the other)-3.084 F(actions.)224 +712.8 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(61)185.955 E 0 +Cg EP %%Page: 62 62 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)144 84 S -.694(riables to inherit the attrib).25 F .694(utes \(e)-.2 F .694 -(xcept the)-.15 F/F1 10/Times-Italic@0 SF(namer)3.194 E(ef)-.37 E F0 -(attrib)3.194 E .693(ute\) and v)-.2 F .693(alue of an)-.25 F 3.193(ye) --.15 G .693(xisting v)-3.343 F(ariable)-.25 E .82(with the same)144 96 R -F1(name)3.32 E F0 .82(at a surrounding scope.)3.32 F .82 -(If there is no e)5.82 F .82(xisting v)-.15 F .82(ariable, the local v) --.25 F .82(ariable is)-.25 F .38(initially unset.)144 108 R .38 -(The follo)5.38 F .379(wing options can be used to restrict output to v) --.25 F .379(ariables with the speci\214ed)-.25 F(attrib)144 120 Q -(ute or to gi)-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 -E/F2 10/Times-Bold@0 SF144 132 Q F0(Each)180 132 Q F1(name)2.5 E -F0(is an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E -(ariable \(see)-.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).) -.15 E F2144 144 Q F0(Each)180 144 Q F1(name)2.5 E F0 -(is an associati)2.5 E .3 -.15(ve a)-.25 H(rray v).15 E(ariable \(see) --.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2144 -156 Q F0(Use function names only)180 156 Q(.)-.65 E F2144 168 Q F0 -.557(The v)180 168 R .558(ariable is treated as an inte)-.25 F .558 -(ger; arithmetic e)-.15 F -.25(va)-.25 G .558(luation \(see).25 F/F3 9 -/Times-Bold@0 SF .558(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION) -180 180 Q F0(abo)2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G -(erformed when the v)-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E -F2144 192 Q F0 .91(When the v)180 192 R .909 -(ariable is assigned a v)-.25 F .909(alue, all upper)-.25 F .909 -(-case characters are con)-.2 F -.15(ve)-.4 G .909(rted to lo).15 F(wer) --.25 E(-)-.2 E 2.5(case. The)180 204 R(upper)2.5 E(-case attrib)-.2 E -(ute is disabled.)-.2 E F2144 216 Q F0(Gi)180 216 Q 1.619 -.15 -(ve e)-.25 H(ach).15 E F1(name)3.819 E F0(the)3.819 E F1(namer)3.819 E -(ef)-.37 E F0(attrib)3.819 E 1.319 -(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .478 -(That other v)180 228 R .478(ariable is de\214ned by the v)-.25 F .478 -(alue of)-.25 F F1(name)2.978 E F0 5.478(.A)C .478 -(ll references, assignments, and at-)-5.478 F(trib)180 240 Q .781 -(ute modi\214cations to)-.2 F F1(name)3.281 E F0 3.281(,e)C .782 -(xcept those using or changing the)-3.431 F F23.282 E F0(attrib) -3.282 E .782(ute itself, are)-.2 F .809(performed on the v)180 252 R -.809(ariable referenced by)-.25 F F1(name)3.308 E F0 1.908 -.55('s v)D -3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2 -F(applied to array v)180 264 Q(ariables.)-.25 E F2144 276 Q F0 -(Mak)180 276 Q(e)-.1 E F1(name)3.654 E F0 3.654(sr)C(eadonly)-3.654 E -6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F -1.155(alues by subsequent as-)-.25 F(signment statements or unset.)180 -288 Q F2144 300 Q F0(Gi)180 300 Q .73 -.15(ve e)-.25 H(ach).15 E -F1(name)2.93 E F0(the)2.929 E F1(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E -2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2(DEB)2.929 -E(UG)-.1 E F0(and)2.929 E F2(RETURN)2.929 E F0 -(traps from the calling shell.)180 312 Q(The trace attrib)5 E -(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2144 324 -Q F0 .909(When the v)180 324 R .909(ariable is assigned a v)-.25 F .909 -(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F -.15 -(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 336 R(lo)2.5 -E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2144 348 Q -F0(Mark)180 348 Q F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E -(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144 -(Using `+' instead of `\255' turns of)144 364.8 R 2.643(ft)-.25 G .143 -(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .143 -(xceptions that)-.15 F F2(+a)2.643 E F0(and)2.643 E F2(+A)2.643 E F0 -.143(may not)2.643 F .578(be used to destro)144 376.8 R 3.079(ya)-.1 G -.579(rray v)-3.079 F .579(ariables and)-.25 F F2(+r)3.079 E F0 .579 -(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15 -F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 388.8 Q F2 -(declar)3.544 E(e)-.18 E F0(and)3.544 E F2(typeset)3.544 E F0(mak)3.544 -E 3.544(ee)-.1 G(ach)-3.544 E F1(name)3.543 E F0 1.043 -(local, as with the)3.543 F F2(local)3.543 E F0 1.043 -(command, unless the)3.543 F F23.543 E F0 1.205 -(option is supplied.)144 400.8 R 1.205(If a v)6.205 F 1.205 -(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F1(value)A F0 3.705 -(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 -(ariable is set to)-.25 F F1(value)144 412.8 Q F0 5.218(.W)C .218 -(hen using)-5.218 F F22.718 E F0(or)2.718 E F22.718 E F0 -.217(and the compound assignment syntax to create array v)2.717 F .217 -(ariables, addi-)-.25 F .882(tional attrib)144 424.8 R .882 -(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882 -(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882 -(alue is 0 unless an)-.25 F(in)144 436.8 Q -.25(va)-.4 G .366(lid optio\ -n is encountered, an attempt is made to de\214ne a function using).25 F -/F4 10/Courier@0 SF .365(\255f foo=bar)2.865 F F0 2.865(,a)C 2.865(na) --2.865 G(t-)-2.865 E .548(tempt is made to assign a v)144 448.8 R .548 -(alue to a readonly v)-.25 F .549 -(ariable, an attempt is made to assign a v)-.25 F .549(alue to an)-.25 F -1.749(array v)144 460.8 R 1.749 -(ariable without using the compound assignment syntax \(see)-.25 F F2 -(Arrays)4.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F -F1(names)144 472.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F -.359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G -.359(eadonly status for a read-)-2.859 F 1.213(only v)144 484.8 R 1.213 -(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213 -(rray status for an array v)-3.713 F 1.212(ariable, or an attempt is) --.25 F(made to display a non-e)144 496.8 Q(xistent function with)-.15 E -F22.5 E F0(.)A F2(dirs [\255clpv] [+)108 513.6 Q F1(n)A F2 2.5(][) -C-2.5 E F1(n)A F2(])A F0 -.4(Wi)144 525.6 S .328 -(thout options, displays the list of currently remembered directories.) -.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 -(single line with directory names separated by spaces.)144 537.6 R 1.238 -(Directories are added to the list with the)6.238 F F2(pushd)144 549.6 Q -F0 .927(command; the)3.427 F F2(popd)3.428 E F0 .928(command remo)3.428 -F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928 -(The current directory is al-)5.928 F -.1(wa)144 561.6 S -(ys the \214rst directory in the stack.).1 E F2144 573.6 Q F0 -(Clears the directory stack by deleting all of the entries.)180 573.6 Q -F2144 585.6 Q F0 .882 -(Produces a listing using full pathnames; the def)180 585.6 R .881 -(ault listing format uses a tilde to denote)-.1 F(the home directory)180 -597.6 Q(.)-.65 E F2144 609.6 Q F0 -(Print the directory stack with one entry per line.)180 609.6 Q F2 -144 621.6 Q F0 .272(Print the directory stack with one entry per line, \ -pre\214xing each entry with its inde)180 621.6 R 2.773(xi)-.15 G 2.773 -(nt)-2.773 G(he)-2.773 E(stack.)180 633.6 Q F2(+)144 645.6 Q F1(n)A F0 -1.565(Displays the)180 645.6 R F1(n)4.065 E F0 1.565 -(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F2 -(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E -(without options, starting with zero.)180 657.6 Q F2144 669.6 Q F1 -(n)A F0 1.194(Displays the)180 669.6 R F1(n)3.694 E F0 1.194 -(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F -F2(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E -(without options, starting with zero.)180 681.6 Q .258(The return v)144 -698.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 -(lid option is supplied or).25 F F1(n)2.758 E F0(inde)2.758 E -.15(xe) --.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-) -.15 F(tory stack.)144 710.4 Q(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(62)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF144 84 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 96 Q F2 +(action)2.5 E F0(may be one of the follo)2.5 E +(wing to generate a list of possible completions:)-.25 E F1(alias)184 +108 Q F0(Alias names.)224 108 Q(May also be speci\214ed as)5 E F1 +2.5 E F0(.)A F1(arrayv)184 120 Q(ar)-.1 E F0(Array v)224 132 Q +(ariable names.)-.25 E F1(binding)184 144 Q(Readline)224 144 Q F0 -.1 +(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 156 S(iltin) +.2 E F0(Names of shell b)224 156 Q(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 168 +Q F0(Command names.)224 180 Q(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(dir)184 192 Q(ectory)-.18 E F0(Directory names.)224 204 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(disabled)184 216 +Q F0(Names of disabled shell b)224 228 Q(uiltins.)-.2 E F1(enabled)184 +240 Q F0(Names of enabled shell b)224 240 Q(uiltins.)-.2 E F1(export)184 +252 Q F0(Names of e)224 252 Q(xported shell v)-.15 E 2.5(ariables. May) +-.25 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 +264 Q F0(File names.)224 264 Q(May also be speci\214ed as)5 E F1 +2.5 E F0(.)A F1(function)184 276 Q F0(Names of shell functions.)224 288 +Q F1(gr)184 300 Q(oup)-.18 E F0(Group names.)224 300 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(helptopic)184 +312 Q F0(Help topics as accepted by the)224 324 Q F1(help)2.5 E F0 -.2 +(bu)2.5 G(iltin.).2 E F1(hostname)184 336 Q F0(Hostnames, as tak)224 348 +Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF +(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 360 Q F0 +(Job names, if job control is acti)224 360 Q -.15(ve)-.25 G 5(.M).15 G +(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 372 S +(yw).1 E(ord)-.1 E F0(Shell reserv)224 384 Q(ed w)-.15 E 2.5(ords. May) +-.1 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(running)184 +396 Q F0(Names of running jobs, if job control is acti)224 396 Q -.15 +(ve)-.25 G(.).15 E F1(ser)184 408 Q(vice)-.1 E F0(Service names.)224 408 +Q(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 420 +Q F0 -1.11(Va)224 420 S(lid ar)1.11 E(guments for the)-.18 E F12.5 +E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1 +(shopt)184 432 Q F0(Shell option names as accepted by the)224 432 Q F1 +(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 444 Q F0 +(Signal names.)224 444 Q F1(stopped)184 456 Q F0 +(Names of stopped jobs, if job control is acti)224 456 Q -.15(ve)-.25 G +(.).15 E F1(user)184 468 Q F0(User names.)224 468 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 480 S +(riable).1 E F0(Names of all shell v)224 480 Q 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 492 Q F2 +(command)2.5 E(command)184 504 Q F0 1.055(is e)3.555 F -.15(xe)-.15 G +1.055(cuted in a subshell en).15 F 1.056 +(vironment, and its output is used as the possible)-.4 F(completions.) +184 516 Q F1144 528 Q F2(function)2.5 E F0 .114 +(The shell function)184 540 R F2(function)2.614 E F0 .114(is e)2.614 F +-.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614 +(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 552 R +-.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1 +($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817 +(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407 +(are being completed, the second ar)184 564 R 1.407(gument \()-.18 F F1 +($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407 +(ord being completed, and the)-.1 F .103(third ar)184 576 R .103 +(gument \()-.18 F F1($3)A F0 2.603(\)i)C 2.603(st)-2.603 G .103(he w) +-2.603 F .104(ord preceding the w)-.1 F .104 +(ord being completed on the current com-)-.1 F .102(mand line.)184 588 R +.102(When it \214nishes, the possible completions are retrie)5.102 F +-.15(ve)-.25 G 2.601(df).15 G .101(rom the v)-2.601 F .101(alue of the) +-.25 F F3(COMPREPL)184 600 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E +F1144 612 Q F2(globpat)2.5 E F0 1.007(The pathname e)184 624 R +1.007(xpansion pattern)-.15 F F2(globpat)3.507 E F0 1.007(is e)3.507 F +1.008(xpanded to generate the possible comple-)-.15 F(tions.)184 636 Q +F1144 648 Q F2(pr)2.5 E(e\214x)-.37 E(pr)184 660 Q(e\214x)-.37 E +F0 .535(is added at the be)3.035 F .534 +(ginning of each possible completion after all other options ha)-.15 F +-.15(ve)-.2 G(been applied.)184 672 Q F1144 684 Q F2(suf)2.5 E +<8c78>-.18 E(suf)184 684 Q<8c78>-.18 E F0 +(is appended to each possible completion after all other options ha)2.5 +E .3 -.15(ve b)-.2 H(een applied.).15 E F1144 696 Q F2(wor)2.5 E +(dlist)-.37 E F0(The)184 708 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14 +(is split using the characters in the)3.639 F F3(IFS)3.64 E F0 1.14 +(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F .981 +(each resultant w)184 720 R .981(ord is e)-.1 F 3.481(xpanded. Shell) +-.15 F .981(quoting is honored within)3.481 F F2(wor)3.481 E(dlist)-.37 +E F0 3.48(,i)C 3.48(no)-3.48 G .98(rder to)-3.48 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(62)185.955 E 0 Cg EP %%Page: 63 63 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(diso)108 84 Q(wn)-.1 E F0([)2.5 E F1(\255ar)A F0 2.5(][)C F1 --2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(jobspec)-2.5 E F0(... |)2.5 E -F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 96 S .121(thout options, remo).4 -F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec)4.362 E F0 .122 -(from the table of acti)2.932 F .422 -.15(ve j)-.25 H 2.622(obs. If).15 -F F2(jobspec)4.362 E F0 .122(is not present, and)2.932 F .096 -(neither the)144 108 R F12.596 E F0 .096(nor the)2.596 F F1 -2.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E .096 -(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1 -2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each).15 F -F2(jobspec)145.74 120 Q F0 .585(is not remo)3.395 F -.15(ve)-.15 G 3.085 -(df).15 G .585(rom the table, b)-3.085 F .585(ut is mark)-.2 F .585 -(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .586 -(is not sent to the job if the)2.835 F .962(shell recei)144 132 R -.15 -(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .962 -(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1 -3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 -H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 144 R F1 -3.858 E F0 1.358(option without a)3.858 F F2(jobspec)5.598 E F0 -(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F -1.359(The return)6.359 F -.25(va)144 156 S(lue is 0 unless a).25 E F2 -(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E -F1(echo)108 172.8 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g) --.37 E F0(...])2.5 E .425(Output the)144 184.8 R F2(ar)2.925 E(g)-.37 E -F0 .424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924 -(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .307 -(error occurs.)144 196.8 R(If)5.307 E F12.807 E F0 .307 -(is speci\214ed, the trailing ne)2.807 F .308(wline is suppressed.)-.25 -F .308(If the)5.308 F F12.808 E F0 .308(option is gi)2.808 F -.15 -(ve)-.25 G .308(n, inter).15 F(-)-.2 E .198(pretation of the follo)144 -208.8 R .198(wing backslash-escaped characters is enabled.)-.25 F(The) -5.198 E F12.698 E F0 .197(option disables the in-)2.697 F .067 -(terpretation of these escape characters, e)144 220.8 R -.15(ve)-.25 G -2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567 -(ya)-.15 G .067(re interpreted by def)-2.567 F 2.568(ault. The)-.1 F F1 -(xpg_echo)144 232.8 Q F0 .602 -(shell option may be used to dynamically determine whether or not)3.102 -F F1(echo)3.101 E F0 -.15(ex)3.101 G .601(pands these).15 F .658 -(escape characters by def)144 244.8 R(ault.)-.1 E F1(echo)5.658 E F0 -.659(does not interpret)3.159 F F13.159 E F0 .659 -(to mean the end of options.)3.159 F F1(echo)5.659 E F0(inter)3.159 E(-) --.2 E(prets the follo)144 256.8 Q(wing escape sequences:)-.25 E F1(\\a) -144 268.8 Q F0(alert \(bell\))180 268.8 Q F1(\\b)144 280.8 Q F0 -(backspace)180 280.8 Q F1(\\c)144 292.8 Q F0(suppress further output)180 -292.8 Q F1(\\e)144 304.8 Q(\\E)144 316.8 Q F0(an escape character)180 -316.8 Q F1(\\f)144 328.8 Q F0(form feed)180 328.8 Q F1(\\n)144 340.8 Q -F0(ne)180 340.8 Q 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 352.8 Q F0 -(carriage return)180 352.8 Q F1(\\t)144 364.8 Q F0(horizontal tab)180 -364.8 Q F1(\\v)144 376.8 Q F0 -.15(ve)180 376.8 S(rtical tab).15 E F1 -(\\\\)144 388.8 Q F0(backslash)180 388.8 Q F1(\\0)144 400.8 Q F2(nnn)A -F0(the eight-bit character whose v)180 400.8 Q(alue is the octal v)-.25 -E(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1 -(\\x)144 412.8 Q F2(HH)A F0(the eight-bit character whose v)180 412.8 Q -(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0 -(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1 -(\\u)144 424.8 Q F2(HHHH)A F0 1.507 -(the Unicode \(ISO/IEC 10646\) character whose v)180 436.8 R 1.506 -(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) -4.006 E F0(\(one to four he)180 448.8 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 -(\\U)144 460.8 Q F2(HHHHHHHH)A F0 .547 -(the Unicode \(ISO/IEC 10646\) character whose v)180 472.8 R .547 -(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) -3.048 E(HHH)180 484.8 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G -(igits\))-2.5 E F1(enable)108 501.6 Q F0([)2.5 E F1A F0 2.5(][)C -F1(\255dnps)-2.5 E F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E F0 2.5 -(][)C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 513.6 R -.278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278 -(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833 -(the same name as a shell b)144 525.6 R .834(uiltin to be e)-.2 F -.15 -(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15 -(ve)-.25 G 3.334(nt).15 G(hough)-3.334 E .99 -(the shell normally searches for b)144 537.6 R .989 -(uiltins before disk commands.)-.2 F(If)5.989 E F13.489 E F0 .989 -(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F .648 -(abled; otherwise,)144 549.6 R F2(names)3.148 E F0 .648(are enabled.) -3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F -F1(test)3.148 E F0 .648(binary found via the)3.148 F F3 -.666(PA)3.148 G -(TH)-.189 E F0(in-)2.899 E .539(stead of the shell b)144 561.6 R .538 -(uiltin v)-.2 F .538(ersion, run)-.15 F/F5 10/Courier@0 SF .538 -(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F13.038 E F0 -.538(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 573.6 S -1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object) -4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365 -(ystems that support dynamic loading.)-3.865 F(The)144 585.6 Q F1 -2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F -.367(viously loaded with)-.25 F F12.866 E F0 5.366(.I)C 2.866(fn) --5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi) --.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 597.6 R F1 -2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399 -(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4 -F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144 -609.6 R 2.598(uiltins. If)-.2 F F12.598 E F0 .098 -(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F -(If)5.098 E F12.598 E F0 .905 -(is supplied, the list printed includes all b)144 621.6 R .905 -(uiltins, with an indication of whether or not each is en-)-.2 F 2.873 -(abled. If)144 633.6 R F12.873 E F0 .372 -(is supplied, the output is restricted to the POSIX)2.873 F F2(special) -2.872 E F0 -.2(bu)2.872 G 2.872(iltins. The).2 F .372(return v)2.872 F -.372(alue is)-.25 F 2.5(0u)144 645.6 S(nless a)-2.5 E F2(name)2.86 E F0 -(is not a shell b)2.68 E(uiltin or there is an error loading a ne)-.2 E -2.5(wb)-.25 G(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 -662.4 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 674.4 -Q F2(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671 -(re read and concatenated together into a single command.)-3.17 F .671 -(This command is then read)5.671 F .479(and e)144 686.4 R -.15(xe)-.15 G -.479(cuted by the shell, and its e).15 F .479 -(xit status is returned as the v)-.15 F .478(alue of)-.25 F F1 -2.3 -.15 -(ev a)2.978 H(l).15 E F0 5.478(.I)C 2.978(ft)-5.478 G .478(here are no) --2.978 F F2(ar)3.308 E(gs)-.37 E F0(,).27 E(or only null ar)144 698.4 Q -(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(63)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(pro)184 84 Q .765 +(vide a mechanism for the w)-.15 F .766 +(ords to contain shell metacharacters or characters in the)-.1 F -.25 +(va)184 96 S 1.965(lue of).25 F/F1 9/Times-Bold@0 SF(IFS)4.465 E/F2 9 +/Times-Roman@0 SF(.)A F0 1.964 +(The possible completions are the members of the resultant list which) +6.465 F(match the w)184 108 Q(ord being completed.)-.1 E/F3 10 +/Times-Bold@0 SF144 120 Q/F4 10/Times-Italic@0 SF(\214lterpat)2.5 +E(\214lterpat)184 132 Q F0 .455(is a pattern as used for pathname e) +2.955 F 2.956(xpansion. It)-.15 F .456 +(is applied to the list of possible)2.956 F 1.596 +(completions generated by the preceding options and ar)184 144 R 1.596 +(guments, and each completion)-.18 F(matching)184 156 Q F4(\214lterpat) +3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704 +(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F3(!)3.204 E F0 +(in)3.204 E F4(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705 +(tes the pattern;).05 F(in this case, an)184 168 Q 2.5(yc)-.15 G +(ompletion not matching)-2.5 E F4(\214lterpat)2.5 E F0(is remo)2.5 E +-.15(ve)-.15 G(d.).15 E .467(The return v)144 184.8 R .467 +(alue is true unless an in)-.25 F -.25(va)-.4 G .466 +(lid option is supplied, an option other than).25 F F32.966 E F0 +(or)2.966 E F32.966 E F0 .466(is sup-)2.966 F 1.361 +(plied without a)144 196.8 R F4(name)3.861 E F0(ar)3.861 E 1.361 +(gument, an attempt is made to remo)-.18 F 1.662 -.15(ve a c)-.15 H +1.362(ompletion speci\214cation for a).15 F F4(name)144 208.8 Q F0 +(for which no speci\214cation e)2.5 E +(xists, or an error occurs adding a completion speci\214cation.)-.15 E +F3(compopt)108 225.6 Q F0([)2.5 E F3A F4(option)2.5 E F0 2.5(][)C +F3(\255DEI)-2.5 E F0 2.5(][)C F3(+o)-2.5 E F4(option)2.5 E F0 2.5(][)C +F4(name)-2.5 E F0(])A .447(Modify completion options for each)144 237.6 +R F4(name)2.947 E F0 .447(according to the)2.947 F F4(option)2.947 E F0 +.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725 +(completion if no)144 249.6 R F4(name)3.225 E F0 3.225(sa)C .725 +(re supplied.)-3.225 F .725(If no)5.725 F F4(option)3.225 E F0 3.225(sa) +C .725(re gi)-3.225 F -.15(ve)-.25 G .726 +(n, display the completion options for).15 F(each)144 261.6 Q F4(name) +3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v) +5.724 F .724(alues of)-.25 F F4(option)3.224 E F0 .724(are those v)3.224 +F .723(alid for the)-.25 F F3(com-)3.223 E(plete)144 273.6 Q F0 -.2(bu) +2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) +-5.178 E F32.678 E F0 .178 +(option indicates that other supplied options should apply to)2.678 F +1.228(the `)144 285.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\ +mmand completion; that is, completion attempted on a command for which \ +no)-3.728 F 2.038(completion has pre)144 297.6 R 2.038 +(viously been de\214ned.)-.25 F(The)7.038 E F34.538 E F0 2.039 +(option indicates that other supplied options)4.538 F 1.539 +(should apply to `)144 309.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538 +(ommand completion; that is, completion attempted on a blank line.) +-4.039 F(The)144 321.6 Q F33.02 E F0 .52(option indicates that ot\ +her supplied options should apply to completion on the initial non-)3.02 +F .868(assignment w)144 333.6 R .868 +(ord on the line, or after a command delimiter such as)-.1 F F3(;)3.368 +E F0(or)3.368 E F3(|)3.368 E F0 3.367(,w)C .867(hich is usually com-) +-3.367 F(mand name completion.)144 345.6 Q .431(The return v)144 369.6 R +.431(alue is true unless an in)-.25 F -.25(va)-.4 G .431 +(lid option is supplied, an attempt is made to modify the op-).25 F +(tions for a)144 381.6 Q F4(name)2.5 E F0 +(for which no completion speci\214cation e)2.5 E +(xists, or an output error occurs.)-.15 E F3(continue)108 398.4 Q F0([) +2.5 E F4(n)A F0(])A .851(Resume the ne)144 410.4 R .851 +(xt iteration of the enclosing)-.15 F F3 -.25(fo)3.351 G(r).25 E F0(,)A +F3(while)3.351 E F0(,)A F3(until)3.351 E F0 3.351(,o)C(r)-3.351 E F3 +(select)3.35 E F0 3.35(loop. If)3.35 F F4(n)3.71 E F0 .85 +(is speci\214ed, re-)3.59 F .203(sume at the)144 422.4 R F4(n)2.703 E F0 +.203(th enclosing loop.)B F4(n)5.563 E F0 .203(must be)2.943 F/F5 10 +/Symbol SF2.703 E F0 2.704(1. If)2.703 F F4(n)3.064 E F0 .204 +(is greater than the number of enclosing loops,)2.944 F 1.184 +(the last enclosing loop \(the `)144 434.4 R(`top-le)-.74 E -.15(ve)-.25 +G(l').15 E 3.684('l)-.74 G 1.184(oop\) is resumed.)-3.684 F 1.183 +(The return v)6.184 F 1.183(alue is 0 unless)-.25 F F4(n)3.683 E F0 +1.183(is not)3.683 F(greater than or equal to 1.)144 446.4 Q F3(declar) +108 463.2 Q(e)-.18 E F0([)2.5 E F3(\255aAfFgiIlnrtux)A F0 2.5(][)C F3 +-2.5 E F0 2.5(][)C F4(name)-2.5 E F0([=)A F4(value)A F0 2.5(].)C +(..])-2.5 E F3(typeset)108 475.2 Q F0([)2.5 E F3(\255aAfFgiIlnrtux)A F0 +2.5(][)C F3-2.5 E F0 2.5(][)C F4(name)-2.5 E F0([=)A F4(value)A F0 +2.5(].)C(..])-2.5 E 1.264(Declare v)144 487.2 R 1.264 +(ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F +3.765(utes. If)-.2 F(no)3.765 E F4(name)3.765 E F0 3.765(sa)C 1.265 +(re gi)-3.765 F -.15(ve)-.25 G 3.765(nt).15 G 1.265(hen display the v) +-3.765 F 1.265(alues of)-.25 F -.25(va)144 499.2 S 3.46(riables. The).25 +F F33.46 E F0 .96(option will display the attrib)3.46 F .96 +(utes and v)-.2 F .96(alues of each)-.25 F F4(name)3.82 E F0 5.96(.W).18 +G(hen)-5.96 E F33.46 E F0 .96(is used)3.46 F(with)144 511.2 Q F4 +(name)2.774 E F0(ar)2.774 E .274 +(guments, additional options, other than)-.18 F F32.775 E F0(and) +2.775 E F32.775 E F0 2.775(,a)C .275(re ignored.)-2.775 F(When) +5.275 E F32.775 E F0 .275(is supplied)2.775 F(without)144 523.2 Q +F4(name)3.79 E F0(ar)3.79 E 1.29(guments, it will display the attrib) +-.18 F 1.289(utes and v)-.2 F 1.289(alues of all v)-.25 F 1.289 +(ariables ha)-.25 F 1.289(ving the at-)-.2 F(trib)144 535.2 Q .38 +(utes speci\214ed by the additional options.)-.2 F .38 +(If no other options are supplied with)5.38 F F32.88 E F0(,)A F3 +(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.107(display the attrib)144 +547.2 R 1.107(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606 +(ariables. The)-.25 F F33.606 E F0 1.106 +(option will restrict the display to)3.606 F .299(shell functions.)144 +559.2 R(The)5.299 E F32.799 E F0 .299(option inhibits the display\ + of function de\214nitions; only the function name)2.799 F 1.54 +(and attrib)144 571.2 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F +F3(extdeb)4.04 E(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F +F3(shopt)4.04 E F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648 +(name and line number where each)144 583.2 R F4(name)3.148 E F0 .648 +(is de\214ned are displayed as well.)3.148 F(The)5.648 E F33.148 E +F0 .649(option implies)3.149 F F3144 595.2 Q F0 5.837(.T)C(he) +-5.837 E F33.337 E F0 .837(option forces v)3.337 F .836 +(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15 +(ve)-.25 G 3.336(nw).15 G(hen)-3.336 E F3(de-)3.336 E(clar)144 607.2 Q +(e)-.18 E F0 .818(is e)3.318 F -.15(xe)-.15 G .818 +(cuted in a shell function.).15 F .818 +(It is ignored in all other cases.)5.818 F(The)5.819 E F33.319 E +F0 .819(option causes local)3.319 F -.25(va)144 619.2 S .694 +(riables to inherit the attrib).25 F .694(utes \(e)-.2 F .694(xcept the) +-.15 F F4(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .693(ute\) and v)-.2 +F .693(alue of an)-.25 F 3.193(ye)-.15 G .693(xisting v)-3.343 F +(ariable)-.25 E .82(with the same)144 631.2 R F4(name)3.32 E F0 .82 +(at a surrounding scope.)3.32 F .82(If there is no e)5.82 F .82 +(xisting v)-.15 F .82(ariable, the local v)-.25 F .82(ariable is)-.25 F +.38(initially unset.)144 643.2 R .38(The follo)5.38 F .379 +(wing options can be used to restrict output to v)-.25 F .379 +(ariables with the speci\214ed)-.25 F(attrib)144 655.2 Q(ute or to gi) +-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F3144 +667.2 Q F0(Each)180 667.2 Q F4(name)2.5 E F0(is an inde)2.5 E -.15(xe) +-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F3(Arrays)2.5 E +F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F3144 679.2 Q F0(Each)180 +679.2 Q F4(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H +(rray v).15 E(ariable \(see)-.25 E F3(Arrays)2.5 E F0(abo)2.5 E -.15(ve) +-.15 G(\).).15 E F3144 691.2 Q F0(Use function names only)180 +691.2 Q(.)-.65 E F3144 703.2 Q F0 .557(The v)180 703.2 R .558 +(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 +(va)-.25 G .558(luation \(see).25 F F1 .558(ARITHMETIC EV)3.058 F(ALU) +-1.215 E(A-)-.54 E(TION)180 715.2 Q F0(abo)2.25 E -.15(ve)-.15 G 2.5 +(\)i).15 G 2.5(sp)-2.5 G(erformed when the v)-2.5 E +(ariable is assigned a v)-.25 E(alue.)-.25 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(63)185.955 E 0 Cg EP %%Page: 64 64 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(exec)108 84 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-2.5 E/F2 10 -/Times-Italic@0 SF(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E -F2(ar)A(guments)-.37 E F0(]])A(If)144 96 Q F2(command)3.005 E F0 .305 -(is speci\214ed, it replaces the shell.)3.575 F .305(No ne)5.305 F 2.805 -(wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F2(ar)3.136 E -(guments)-.37 E F0(become)3.076 E .177(the ar)144 108 R .177(guments to) --.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G(he)-2.676 E F1 -2.676 E F0 .176 -(option is supplied, the shell places a dash at the be)2.676 F .176 -(ginning of)-.15 F .48(the zeroth ar)144 120 R .48(gument passed to)-.18 -F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo)3.07 -E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F12.98 E F0 .48 -(option causes)2.98 F F2(com-)3.18 E(mand)144 132 Q F0 .639(to be e) -3.909 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 -(vironment. If)-.4 F F13.138 E F0 .638 -(is supplied, the shell passes)3.138 F F2(name)3.498 E F0 .638(as the) -3.318 F 1.077(zeroth ar)144 144 R 1.077(gument to the e)-.18 F -.15(xe) --.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0 1.077 -(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a).15 F -(non-interacti)144 156 Q .877 -.15(ve s)-.25 H .577(hell e).15 F .577 -(xits, unless the)-.15 F F1(execfail)3.077 E F0 .577 -(shell option is enabled.)3.077 F .576(In that case, it returns f)5.577 -F(ail-)-.1 E 3.32(ure. An)144 168 R(interacti)3.32 E 1.12 -.15(ve s)-.25 -H .82(hell returns f).15 F .82(ailure if the \214le cannot be e)-.1 F --.15(xe)-.15 G 3.32(cuted. A).15 F .82(subshell e)3.32 F .82 -(xits uncondi-)-.15 F .288(tionally if)144 180 R F1(exec)2.788 E F0 -.1 -(fa)2.788 G 2.788(ils. If).1 F F2(command)2.988 E F0 .288 -(is not speci\214ed, an)3.558 F 2.787(yr)-.15 G .287(edirections tak) --2.787 F 2.787(ee)-.1 G -.25(ff)-2.787 G .287(ect in the current shell,) -.25 F(and the return status is 0.)144 192 Q -(If there is a redirection error)5 E 2.5(,t)-.4 G -(he return status is 1.)-2.5 E F1(exit)108 208.8 Q F0([)2.5 E F2(n)A F0 -(])A .095(Cause the shell to e)144 208.8 R .095(xit with a status of) --.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E F2(n)2.955 E F0 .096 -(is omitted, the e)2.835 F .096(xit status is that of the last command) --.15 F -.15(exe)144 220.8 S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9 -/Times-Bold@0 SF(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 G -(cuted before the shell terminates.).15 E F1(export)108 237.6 Q F0([)2.5 -E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E -F0(]] ...)A F1(export \255p)108 249.6 Q F0 .257(The supplied)144 261.6 R -F2(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F -.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15 -(xe)-.15 G(cuted).15 E 2.626(commands. If)144 273.6 R(the)2.626 E F1 -2.626 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the) -.15 F F2(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no) -5.127 F F2(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .127 -(n, or if the).15 F F1144 285.6 Q F0 .048 -(option is supplied, a list of names of all e)2.548 F .048(xported v) --.15 F .048(ariables is printed.)-.25 F(The)5.048 E F12.547 E F0 -.047(option causes the)2.547 F -.15(ex)144 297.6 S 1.446 -(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 -(rom each)-3.947 F F2(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G -1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F2(wor)A(d) --.37 E F0 3.947(,t)C(he)-3.947 E -.25(va)144 309.6 S .742(lue of the v) -.25 F .742(ariable is set to)-.25 F F2(wor)3.242 E(d)-.37 E F0(.)A F1 -(export)5.742 E F0 .742(returns an e)3.242 F .741 -(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .741(lid option is) -.25 F .031(encountered, one of the)144 321.6 R F2(names)2.531 E F0 .031 -(is not a v)2.531 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 -F F12.532 E F0 .032(is supplied with a)2.532 F F2(name)2.892 E F0 -(that)2.712 E(is not a function.)144 333.6 Q F1(fc)108 350.4 Q F0([)2.5 -E F1A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-2.5 E F0 2.5(][)C F2 -<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108 -362.4 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2 -(cmd)-2.5 E F0(])A .432 -(The \214rst form selects a range of commands from)144 374.4 R F2<8c72> -4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .431 -(from the history list and displays or)3.612 F .141(edits and re-e)144 -386.4 R -.15(xe)-.15 G .141(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs) -.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141 -(may be speci\214ed as a string \(to locate the last command)3.321 F(be) -144 398.4 Q .311(ginning with that string\) or as a number \(an inde) --.15 F 2.811(xi)-.15 G .31(nto the history list, where a ne)-2.811 F --.05(ga)-.15 G(ti).05 E .61 -.15(ve n)-.25 H(umber).15 E .071 -(is used as an of)144 410.4 R .071 -(fset from the current command number\).)-.25 F .071(When listing, a) -5.071 F F2<8c72>2.571 E(st)-.1 E F0(or)2.571 E F2(last)2.571 E F0 .071 -(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653 -(lent to \2551 and \2550 is equi)144 422.4 R -.25(va)-.25 G .653 -(lent to the current command \(usually the).25 F F1(fc)3.153 E F0 .653 -(command\); otherwise 0 is)3.153 F(equi)144 434.4 Q -.25(va)-.25 G .242 -(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G 2.742(lid. If).25 F -F2(last)2.832 E F0 .242 -(is not speci\214ed, it is set to the current command for list-)3.422 F -.093(ing \(so that)144 446.4 R/F4 10/Courier@0 SF .093(fc \255l \25510) -2.593 F F0 .093(prints the last 10 commands\) and to)2.593 F F2<8c72> -4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72>4.502 E(st)-.1 E -F0 .092(is not speci-)3.272 F(\214ed, it is set to the pre)144 458.4 Q -(vious command for editing and \25516 for listing.)-.25 E(The)144 482.4 -Q F12.522 E F0 .022 -(option suppresses the command numbers when listing.)2.522 F(The)5.022 E -F12.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 -(rses the order of).15 F .438(the commands.)144 494.4 R .438(If the) -5.438 F F12.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 -(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E -.334(the editor gi)144 506.4 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E -F2(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835 -(do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 -F(If)5.335 E F2(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G -(n,).15 E .631(the v)144 518.4 R .631(alue of the)-.25 F F3(FCEDIT)3.131 -E F0 -.25(va)2.881 G .631(riable is used, and the v).25 F .631(alue of) --.25 F F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.13 E F0 .63 -(is not set.)2.88 F .63(If nei-)5.63 F .005(ther v)144 530.4 R .005 -(ariable is set,)-.25 F F2(vi)4.171 E F0 .005(is used.)4.171 F .005 -(When editing is complete, the edited commands are echoed and e)5.005 F -(x-)-.15 E(ecuted.)144 542.4 Q .789(In the second form,)144 566.4 R F2 -(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788 -(cuted after each instance of).15 F F2(pat)3.288 E F0 .788 -(is replaced by)3.288 F F2 -.37(re)3.288 G(p).37 E F0(.)A F2(Com-)5.788 -E(mand)144 578.4 Q F0 .171(is interpreted the same as)2.671 F F2<8c72> -2.671 E(st)-.1 E F0(abo)2.671 E -.15(ve)-.15 G 5.171(.A).15 G .172 -(useful alias to use with this is)-2.499 F F4 .172(r='fc \255s')2.672 F -F0 2.672(,s)C 2.672(ot)-2.672 G(hat)-2.672 E(typing)144 590.4 Q F4 7.166 -(rc)3.666 G(c)-7.166 E F0 1.166(runs the last command be)3.666 F 1.166 -(ginning with)-.15 F F4(cc)3.666 E F0 1.165(and typing)3.666 F F4(r) -3.665 E F0(re-e)3.665 E -.15(xe)-.15 G 1.165(cutes the last com-).15 F -(mand.)144 602.4 Q .142(If the \214rst form is used, the return v)144 -626.4 R .142(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 -(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322 -E F2(last)2.732 E F0 .455(specify history lines out of range.)144 638.4 -R .454(If the)5.454 F F12.954 E F0 .454 -(option is supplied, the return v)2.954 F .454(alue is the v)-.25 F .454 -(alue of the)-.25 F .787(last command e)144 650.4 R -.15(xe)-.15 G .787 -(cuted or f).15 F .788 -(ailure if an error occurs with the temporary \214le of commands.)-.1 F -.788(If the)5.788 F 1.136 -(second form is used, the return status is that of the command re-e)144 -662.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F2(cmd)3.835 E F0 1.135 -(does not)4.405 F(specify a v)144 674.4 Q -(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E -(ailure.)-.1 E F1(fg)108 691.2 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume) -144 703.2 Q F2(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413 -(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413 -(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0 -1.414(is not present, the)4.223 F(shell')144 715.2 Q 3.117(sn)-.55 G -.617(otion of the)-3.117 F F2(curr)3.117 E .617(ent job)-.37 F F0 .617 -(is used.)3.117 F .617(The return v)5.617 F .616 -(alue is that of the command placed into the)-.25 F(fore)144 727.2 Q -.362(ground, or f)-.15 F .362 -(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .363 -(hen run with job control enabled, if)-2.862 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(64)190.395 E 0 Cg EP +SF144 84 Q F0 .91(When the v)180 84 R .909 +(ariable is assigned a v)-.25 F .909(alue, all upper)-.25 F .909 +(-case characters are con)-.2 F -.15(ve)-.4 G .909(rted to lo).15 F(wer) +-.25 E(-)-.2 E 2.5(case. The)180 96 R(upper)2.5 E(-case attrib)-.2 E +(ute is disabled.)-.2 E F1144 108 Q F0(Gi)180 108 Q 1.619 -.15 +(ve e)-.25 H(ach).15 E/F2 10/Times-Italic@0 SF(name)3.819 E F0(the)3.819 +E F2(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319 +(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .478 +(That other v)180 120 R .478(ariable is de\214ned by the v)-.25 F .478 +(alue of)-.25 F F2(name)2.978 E F0 5.478(.A)C .478 +(ll references, assignments, and at-)-5.478 F(trib)180 132 Q .781 +(ute modi\214cations to)-.2 F F2(name)3.281 E F0 3.281(,e)C .782 +(xcept those using or changing the)-3.431 F F13.282 E F0(attrib) +3.282 E .782(ute itself, are)-.2 F .809(performed on the v)180 144 R +.809(ariable referenced by)-.25 F F2(name)3.308 E F0 1.908 -.55('s v)D +3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2 +F(applied to array v)180 156 Q(ariables.)-.25 E F1144 168 Q F0 +(Mak)180 168 Q(e)-.1 E F2(name)3.654 E F0 3.654(sr)C(eadonly)-3.654 E +6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F +1.155(alues by subsequent as-)-.25 F(signment statements or unset.)180 +180 Q F1144 192 Q F0(Gi)180 192 Q .73 -.15(ve e)-.25 H(ach).15 E +F2(name)2.93 E F0(the)2.929 E F2(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E +2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F1(DEB)2.929 +E(UG)-.1 E F0(and)2.929 E F1(RETURN)2.929 E F0 +(traps from the calling shell.)180 204 Q(The trace attrib)5 E +(ute has no special meaning for v)-.2 E(ariables.)-.25 E F1144 216 +Q F0 .909(When the v)180 216 R .909(ariable is assigned a v)-.25 F .909 +(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F -.15 +(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 228 R(lo)2.5 +E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1144 240 Q +F0(Mark)180 240 Q F2(name)2.5 E F0 2.5(sf)C(or e)-2.5 E +(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144 +(Using `+' instead of `\255' turns of)144 256.8 R 2.643(ft)-.25 G .143 +(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .143 +(xceptions that)-.15 F F1(+a)2.643 E F0(and)2.643 E F1(+A)2.643 E F0 +.143(may not)2.643 F .578(be used to destro)144 268.8 R 3.079(ya)-.1 G +.579(rray v)-3.079 F .579(ariables and)-.25 F F1(+r)3.079 E F0 .579 +(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15 +F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 280.8 Q F1 +(declar)3.544 E(e)-.18 E F0(and)3.544 E F1(typeset)3.544 E F0(mak)3.544 +E 3.544(ee)-.1 G(ach)-3.544 E F2(name)3.543 E F0 1.043 +(local, as with the)3.543 F F1(local)3.543 E F0 1.043 +(command, unless the)3.543 F F13.543 E F0 1.205 +(option is supplied.)144 292.8 R 1.205(If a v)6.205 F 1.205 +(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F2(value)A F0 3.705 +(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 +(ariable is set to)-.25 F F2(value)144 304.8 Q F0 5.218(.W)C .218 +(hen using)-5.218 F F12.718 E F0(or)2.718 E F12.718 E F0 +.217(and the compound assignment syntax to create array v)2.717 F .217 +(ariables, addi-)-.25 F .882(tional attrib)144 316.8 R .882 +(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882 +(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882 +(alue is 0 unless an)-.25 F(in)144 328.8 Q -.25(va)-.4 G .366(lid optio\ +n is encountered, an attempt is made to de\214ne a function using).25 F +/F3 10/Courier@0 SF .365(\255f foo=bar)2.865 F F0 2.865(,a)C 2.865(na) +-2.865 G(t-)-2.865 E .548(tempt is made to assign a v)144 340.8 R .548 +(alue to a readonly v)-.25 F .549 +(ariable, an attempt is made to assign a v)-.25 F .549(alue to an)-.25 F +1.749(array v)144 352.8 R 1.749 +(ariable without using the compound assignment syntax \(see)-.25 F F1 +(Arrays)4.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F +F2(names)144 364.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F +.359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G +.359(eadonly status for a read-)-2.859 F 1.213(only v)144 376.8 R 1.213 +(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213 +(rray status for an array v)-3.713 F 1.212(ariable, or an attempt is) +-.25 F(made to display a non-e)144 388.8 Q(xistent function with)-.15 E +F12.5 E F0(.)A F1(dirs [\255clpv] [+)108 405.6 Q F2(n)A F1 2.5(][) +C-2.5 E F2(n)A F1(])A F0 -.4(Wi)144 417.6 S .328 +(thout options, displays the list of currently remembered directories.) +.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 +(single line with directory names separated by spaces.)144 429.6 R 1.238 +(Directories are added to the list with the)6.238 F F1(pushd)144 441.6 Q +F0 .927(command; the)3.427 F F1(popd)3.428 E F0 .928(command remo)3.428 +F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928 +(The current directory is al-)5.928 F -.1(wa)144 453.6 S +(ys the \214rst directory in the stack.).1 E F1144 465.6 Q F0 +(Clears the directory stack by deleting all of the entries.)180 465.6 Q +F1144 477.6 Q F0 .882 +(Produces a listing using full pathnames; the def)180 477.6 R .881 +(ault listing format uses a tilde to denote)-.1 F(the home directory)180 +489.6 Q(.)-.65 E F1144 501.6 Q F0 +(Print the directory stack with one entry per line.)180 501.6 Q F1 +144 513.6 Q F0 .272(Print the directory stack with one entry per line, \ +pre\214xing each entry with its inde)180 513.6 R 2.773(xi)-.15 G 2.773 +(nt)-2.773 G(he)-2.773 E(stack.)180 525.6 Q F1(+)144 537.6 Q F2(n)A F0 +1.565(Displays the)180 537.6 R F2(n)4.065 E F0 1.565 +(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F1 +(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 549.6 Q F1144 561.6 Q F2 +(n)A F0 1.194(Displays the)180 561.6 R F2(n)3.694 E F0 1.194 +(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F +F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 573.6 Q .258(The return v)144 +590.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe) +-.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-) +.15 F(tory stack.)144 602.4 Q F1(diso)108 619.2 Q(wn)-.1 E F0([)2.5 E F1 +(\255ar)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0 +(... |)2.5 E F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 631.2 S .121 +(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec) +4.362 E F0 .122(from the table of acti)2.932 F .422 -.15(ve j)-.25 H +2.622(obs. If).15 F F2(jobspec)4.362 E F0 .122(is not present, and)2.932 +F .096(neither the)144 643.2 R F12.596 E F0 .096(nor the)2.596 F +F12.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E +.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1 +2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each) +.15 F F2(jobspec)145.74 655.2 Q F0 .585(is not remo)3.395 F -.15(ve)-.15 +G 3.085(df).15 G .585(rom the table, b)-3.085 F .585(ut is mark)-.2 F +.585(ed so that)-.1 F/F4 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .586 +(is not sent to the job if the)2.835 F .962(shell recei)144 667.2 R -.15 +(ve)-.25 G 3.462(sa).15 G F4(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .962 +(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1 +3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15 +H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 679.2 R F1 +3.858 E F0 1.358(option without a)3.858 F F2(jobspec)5.598 E F0 +(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F +1.359(The return)6.359 F -.25(va)144 691.2 S(lue is 0 unless a).25 E F2 +(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(64)185.955 E 0 Cg EP %%Page: 65 65 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(jobspec)145.74 84 Q F0(does not specify a v)2.81 E -(alid job or)-.25 E F1(jobspec)4.24 E F0(speci\214es a job that w)2.81 E -(as started without job control.)-.1 E/F2 10/Times-Bold@0 SF(getopts)108 -100.8 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A 2.5(g.)-.37 G(..)-2.5 -E F0(])A F2(getopts)144 112.8 Q F0 .793 -(is used by shell procedures to parse positional parameters.)3.294 F F1 -(optstring)6.023 E F0 .793(contains the option)3.513 F .149 -(characters to be recognized; if a character is follo)144 124.8 R .15 -(wed by a colon, the option is e)-.25 F .15(xpected to ha)-.15 F .45 --.15(ve a)-.2 H(n).15 E(ar)144 136.8 Q .579 -(gument, which should be separated from it by white space.)-.18 F .578 -(The colon and question mark char)5.579 F(-)-.2 E .636 -(acters may not be used as option characters.)144 148.8 R .636 -(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts) -3.136 E F0 .636(places the ne)3.136 F .636(xt op-)-.15 F .03 -(tion in the shell v)144 160.8 R(ariable)-.25 E F1(name)2.89 E F0 2.53 -(,i).18 G(nitializing)-2.53 E F1(name)2.89 E F0 .029(if it does not e) -2.71 F .029(xist, and the inde)-.15 F 2.529(xo)-.15 G 2.529(ft)-2.529 G -.029(he ne)-2.529 F .029(xt ar)-.15 F(gu-)-.18 E .065 -(ment to be processed into the v)144 172.8 R(ariable)-.25 E/F3 9 -/Times-Bold@0 SF(OPTIND)2.565 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND) -4.565 E F0 .066(is initialized to 1 each time the shell or a)2.315 F -.885(shell script is in)144 184.8 R -.2(vo)-.4 G -.1(ke).2 G 3.385 -(d. When).1 F .885(an option requires an ar)3.385 F(gument,)-.18 E F2 -(getopts)3.385 E F0 .885(places that ar)3.385 F .885(gument into)-.18 F -.566(the v)144 196.8 R(ariable)-.25 E F3(OPT)3.066 E(ARG)-.81 E F4(.)A -F0 .566(The shell does not reset)5.066 F F3(OPTIND)3.066 E F0 .567 -(automatically; it must be manually reset)2.816 F .39 -(between multiple calls to)144 208.8 R F2(getopts)2.89 E F0 .39 -(within the same shell in)2.89 F -.2(vo)-.4 G .389(cation if a ne).2 F -2.889(ws)-.25 G .389(et of parameters is to)-2.889 F(be used.)144 220.8 -Q 2.043(When the end of options is encountered,)144 244.8 R F2(getopts) -4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.044 -(alue greater than zero.)-.25 F F3(OPTIND)144 256.8 Q F0 -(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G -(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0 -(is set to ?.)2.5 E F2(getopts)144 280.8 Q F0 .485 -(normally parses the positional parameters, b)2.985 F .485 -(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F1(ar)3.315 E -(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 292.8 Q F2(getopts)2.5 E -F0(parses those instead.)2.5 E F2(getopts)144 316.8 Q F0 .345 -(can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F -.345(the \214rst character of)2.845 F F1(optstring)3.075 E F0 .345 -(is a colon,)3.065 F F1(silent)3.185 E F0 .345(error re-)3.525 F 1.669 -(porting is used.)144 328.8 R 1.668 -(In normal operation, diagnostic messages are printed when in)6.669 F --.25(va)-.4 G 1.668(lid options or).25 F .393(missing option ar)144 -340.8 R .393(guments are encountered.)-.18 F .394(If the v)5.394 F -(ariable)-.25 E F3(OPTERR)2.894 E F0 .394 -(is set to 0, no error messages)2.644 F(will be displayed, e)144 352.8 Q --.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E -F1(optstring)2.73 E F0(is not a colon.)2.72 E .667(If an in)144 376.8 R --.25(va)-.4 G .667(lid option is seen,).25 F F2(getopts)3.167 E F0 .667 -(places ? into)3.167 F F1(name)3.527 E F0 .666 -(and, if not silent, prints an error message)3.347 F .399(and unsets)144 -388.8 R F3(OPT)2.899 E(ARG)-.81 E F4(.)A F0(If)4.899 E F2(getopts)2.899 -E F0 .399(is silent, the option character found is placed in)2.899 F F3 -(OPT)2.899 E(ARG)-.81 E F0 .4(and no)2.65 F -(diagnostic message is printed.)144 400.8 Q 1.242(If a required ar)144 -424.8 R 1.242(gument is not found, and)-.18 F F2(getopts)3.741 E F0 -1.241(is not silent, a question mark \()3.741 F F2(?).833 E F0 3.741 -(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F F1(name)144.36 -436.8 Q F0(,).18 E F3(OPT)2.713 E(ARG)-.81 E F0 .213 -(is unset, and a diagnostic message is printed.)2.463 F(If)5.213 E F2 -(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F2(:).833 E -F0(\)).833 E(is placed in)144 448.8 Q F1(name)2.86 E F0(and)2.68 E F3 -(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F2 -(getopts)144 472.8 Q F0 .902 -(returns true if an option, speci\214ed or unspeci\214ed, is found.) -3.402 F .902(It returns f)5.902 F .901(alse if the end of)-.1 F -(options is encountered or an error occurs.)144 484.8 Q F2(hash)108 -501.6 Q F0([)2.5 E F2(\255lr)A F0 2.5(][)C F2-2.5 E F1(\214lename) -2.5 E F0 2.5(][)C F2(\255dt)-2.5 E F0 2.5(][)C F1(name)-2.5 E F0(])A -.858(Each time)144 513.6 R F2(hash)3.358 E F0 .858(is in)3.358 F -.2(vo) --.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F F1(name) -3.718 E F0 .858(is determined by searching)3.538 F .956 -(the directories in)144 525.6 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F0 -.956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956 -(viously-remembered pathname is discarded.)-.25 F .242(If the)144 537.6 -R F22.742 E F0 .243 -(option is supplied, no path search is performed, and)2.742 F F1 -(\214lename)4.653 E F0 .243(is used as the full \214lename)2.923 F .615 -(of the command.)144 549.6 R(The)5.615 E F23.115 E F0 .615 -(option causes the shell to for)3.115 F .615 -(get all remembered locations.)-.18 F(The)5.615 E F23.115 E F0 -(op-)3.115 E .293(tion causes the shell to for)144 561.6 R .293 -(get the remembered location of each)-.18 F F1(name)2.794 E F0 5.294(.I) -C 2.794(ft)-5.294 G(he)-2.794 E F22.794 E F0 .294 -(option is supplied,)2.794 F .028(the full pathname to which each)144 -573.6 R F1(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028 -(If multiple)5.028 F F1(name)2.528 E F0(ar)2.528 E .028 -(guments are sup-)-.18 F .175(plied with)144 585.6 R F22.675 E F0 -2.675(,t)C(he)-2.675 E F1(name)2.675 E F0 .175 -(is printed before the hashed full pathname.)2.675 F(The)5.175 E F2 -2.676 E F0 .176(option causes output to)2.676 F .783 -(be displayed in a format that may be reused as input.)144 597.6 R .783 -(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783 -(n, or if only).15 F F23.283 E F0(is)3.283 E .807 -(supplied, information about remembered commands is printed.)144 609.6 R -.807(The return status is true unless a)5.807 F F1(name)144.36 621.6 Q -F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.) -.25 E F2(help)108 638.4 Q F0([)2.5 E F2(\255dms)A F0 2.5(][)C F1 -(pattern)-2.5 E F0(])A .867(Display helpful information about b)144 -650.4 R .867(uiltin commands.)-.2 F(If)5.867 E F1(pattern)4.617 E F0 -.866(is speci\214ed,)3.607 F F2(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 -G 3.366(sd).15 G(etailed)-3.366 E .223(help on all commands matching)144 -662.4 R F1(pattern)3.973 E F0 2.723(;o).24 G .223 -(therwise help for all the b)-2.723 F .224 -(uiltins and shell control struc-)-.2 F(tures is printed.)144 674.4 Q F2 -144 686.4 Q F0(Display a short description of each)180 686.4 Q F1 -(pattern)2.5 E F2144 698.4 Q F0(Display the description of each) -180 698.4 Q F1(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G -(ormat)-2.5 E F2144 710.4 Q F0 -(Display only a short usage synopsis for each)180 710.4 Q F1(pattern)2.5 -E F0(The return status is 0 unless no command matches)144 727.2 Q F1 -(pattern)3.75 E F0(.).24 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(65)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(echo)108 84 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C/F2 10 +/Times-Italic@0 SF(ar)-2.5 E(g)-.37 E F0(...])2.5 E .425(Output the)144 +96 R F2(ar)2.925 E(g)-.37 E F0 .424(s, separated by spaces, follo)B .424 +(wed by a ne)-.25 F 2.924(wline. The)-.25 F .424 +(return status is 0 unless a write)2.924 F .307(error occurs.)144 108 R +(If)5.307 E F12.807 E F0 .307(is speci\214ed, the trailing ne) +2.807 F .308(wline is suppressed.)-.25 F .308(If the)5.308 F F1 +2.808 E F0 .308(option is gi)2.808 F -.15(ve)-.25 G .308(n, inter).15 F +(-)-.2 E .198(pretation of the follo)144 120 R .198 +(wing backslash-escaped characters is enabled.)-.25 F(The)5.198 E F1 +2.698 E F0 .197(option disables the in-)2.697 F .067 +(terpretation of these escape characters, e)144 132 R -.15(ve)-.25 G +2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567 +(ya)-.15 G .067(re interpreted by def)-2.567 F 2.568(ault. The)-.1 F F1 +(xpg_echo)144 144 Q F0 .602 +(shell option may be used to dynamically determine whether or not)3.102 +F F1(echo)3.101 E F0 -.15(ex)3.101 G .601(pands these).15 F .658 +(escape characters by def)144 156 R(ault.)-.1 E F1(echo)5.658 E F0 .659 +(does not interpret)3.159 F F13.159 E F0 .659 +(to mean the end of options.)3.159 F F1(echo)5.659 E F0(inter)3.159 E(-) +-.2 E(prets the follo)144 168 Q(wing escape sequences:)-.25 E F1(\\a)144 +180 Q F0(alert \(bell\))180 180 Q F1(\\b)144 192 Q F0(backspace)180 192 +Q F1(\\c)144 204 Q F0(suppress further output)180 204 Q F1(\\e)144 216 Q +(\\E)144 228 Q F0(an escape character)180 228 Q F1(\\f)144 240 Q F0 +(form feed)180 240 Q F1(\\n)144 252 Q F0(ne)180 252 Q 2.5(wl)-.25 G(ine) +-2.5 E F1(\\r)144 264 Q F0(carriage return)180 264 Q F1(\\t)144 276 Q F0 +(horizontal tab)180 276 Q F1(\\v)144 288 Q F0 -.15(ve)180 288 S +(rtical tab).15 E F1(\\\\)144 300 Q F0(backslash)180 300 Q F1(\\0)144 +312 Q F2(nnn)A F0(the eight-bit character whose v)180 312 Q +(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0 +(\(zero to three octal digits\))2.5 E F1(\\x)144 324 Q F2(HH)A F0 +(the eight-bit character whose v)180 324 Q(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(\\u)144 336 Q F2(HHHH)A F0 +1.507(the Unicode \(ISO/IEC 10646\) character whose v)180 348 R 1.506 +(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH) +4.006 E F0(\(one to four he)180 360 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 +(\\U)144 372 Q F2(HHHHHHHH)A F0 .547 +(the Unicode \(ISO/IEC 10646\) character whose v)180 384 R .547 +(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) +3.048 E(HHH)180 396 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F1(enable)108 412.8 Q F0([)2.5 E F1A F0 2.5(][)C F1 +(\255dnps)-2.5 E F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E F0 2.5 +(][)C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 424.8 R +.278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278 +(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833 +(the same name as a shell b)144 436.8 R .834(uiltin to be e)-.2 F -.15 +(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15 +(ve)-.25 G 3.334(nt).15 G(hough)-3.334 E .99 +(the shell normally searches for b)144 448.8 R .989 +(uiltins before disk commands.)-.2 F(If)5.989 E F13.489 E F0 .989 +(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F .648 +(abled; otherwise,)144 460.8 R F2(names)3.148 E F0 .648(are enabled.) +3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F +F1(test)3.148 E F0 .648(binary found via the)3.148 F/F3 9/Times-Bold@0 +SF -.666(PA)3.148 G(TH)-.189 E F0(in-)2.899 E .539(stead of the shell b) +144 472.8 R .538(uiltin v)-.2 F .538(ersion, run)-.15 F/F4 10/Courier@0 +SF .538(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F13.038 E +F0 .538(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 484.8 S +1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object) +4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365 +(ystems that support dynamic loading.)-3.865 F .607(Bash will use the v) +144 496.8 R .606(alue of the)-.25 F F1 -.3(BA)3.106 G(SH_LO).3 E(AD)-.4 +E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F0 -.25(va)3.106 G .606 +(riable as a colon-separated list of).25 F .548 +(directories in which to search for)144 508.8 R F2(\214lename)3.048 E F0 +5.549(.T)C .549(he def)-5.549 F .549(ault is system-dependent.)-.1 F +(The)5.549 E F13.049 E F0 .549(option will)3.049 F .547 +(delete a b)144 520.8 R .547(uiltin pre)-.2 F .547(viously loaded with) +-.25 F F13.047 E F0 5.547(.I)C 3.047(fn)-5.547 G(o)-3.047 E F2 +(name)3.047 E F0(ar)3.047 E .547(guments are gi)-.18 F -.15(ve)-.25 G +.546(n, or if the).15 F F13.046 E F0 .546(option is)3.046 F .545 +(supplied, a list of shell b)144 532.8 R .545(uiltins is printed.)-.2 F +-.4(Wi)5.545 G .545(th no other option ar).4 F .546 +(guments, the list consists of all)-.18 F .695(enabled shell b)144 544.8 +R 3.195(uiltins. If)-.2 F F13.195 E F0 .695 +(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F +(If)5.695 E F13.195 E F0 .695(is supplied, the)3.195 F .261 +(list printed includes all b)144 556.8 R .261 +(uiltins, with an indication of whether or not each is enabled.)-.2 F +(If)5.261 E F12.761 E F0 .262(is sup-)2.762 F .269 +(plied, the output is restricted to the POSIX)144 568.8 R F2(special) +2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .268 +(no options are supplied and a)2.768 F F2(name)2.768 E F0 .284 +(is not a shell b)144 580.8 R(uiltin,)-.2 E F1(enable)2.784 E F0 .284 +(will attempt to load)2.784 F F2(name)2.784 E F0 .284 +(from a shared object named)2.784 F F2(name)2.785 E F0 2.785(,a)C 2.785 +(si)-2.785 G 2.785(ft)-2.785 G(he)-2.785 E 1.41(command were)144 592.8 R +F4 1.41(enable \255f)3.91 F F2 1.41(name name)3.91 F F0 6.41(.T)3.91 G +1.41(he return v)-6.41 F 1.41(alue is 0 unless a)-.25 F F2(name)4.27 E +F0 1.41(is not a shell)4.09 F -.2(bu)144 604.8 S +(iltin or there is an error loading a ne).2 E 2.5(wb)-.25 G +(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 621.6 T(l).15 +E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 633.6 Q F2(ar)3.17 E +(g)-.37 E F0 3.17(sa)C .671 +(re read and concatenated together into a single command.)-3.17 F .671 +(This command is then read)5.671 F .479(and e)144 645.6 R -.15(xe)-.15 G +.479(cuted by the shell, and its e).15 F .479 +(xit status is returned as the v)-.15 F .478(alue of)-.25 F F1 -2.3 -.15 +(ev a)2.978 H(l).15 E F0 5.478(.I)C 2.978(ft)-5.478 G .478(here are no) +-2.978 F F2(ar)3.308 E(gs)-.37 E F0(,).27 E(or only null ar)144 657.6 Q +(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1 +(exec)108 674.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-2.5 E F2 +(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments) +-.37 E F0(]])A(If)144 686.4 Q F2(command)3.005 E F0 .305 +(is speci\214ed, it replaces the shell.)3.575 F .305(No ne)5.305 F 2.805 +(wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F2(ar)3.136 E +(guments)-.37 E F0(become)3.076 E .177(the ar)144 698.4 R .177 +(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F12.676 E F0 .176 +(option is supplied, the shell places a dash at the be)2.676 F .176 +(ginning of)-.15 F .48(the zeroth ar)144 710.4 R .48(gument passed to) +-.18 F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo) +3.07 E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F12.98 E F0 +.48(option causes)2.98 F F2(com-)3.18 E(mand)144 722.4 Q F0 .639 +(to be e)3.909 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 +(vironment. If)-.4 F F13.138 E F0 .638 +(is supplied, the shell passes)3.138 F F2(name)3.498 E F0 .638(as the) +3.318 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(65)185.955 E 0 +Cg EP %%Page: 66 66 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.077(zeroth ar) +144 84 R 1.077(gument to the e)-.18 F -.15(xe)-.15 G 1.077 +(cuted command.).15 F(If)6.077 E/F1 10/Times-Italic@0 SF(command)3.777 E +F0 1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077 +(cuted for some reason, a).15 F(non-interacti)144 96 Q .877 -.15(ve s) +-.25 H .577(hell e).15 F .577(xits, unless the)-.15 F/F2 10/Times-Bold@0 +SF(execfail)3.077 E F0 .577(shell option is enabled.)3.077 F .576 +(In that case, it returns f)5.577 F(ail-)-.1 E 3.32(ure. An)144 108 R +(interacti)3.32 E 1.12 -.15(ve s)-.25 H .82(hell returns f).15 F .82 +(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.32(cuted. A).15 +F .82(subshell e)3.32 F .82(xits uncondi-)-.15 F .288(tionally if)144 +120 R F2(exec)2.788 E F0 -.1(fa)2.788 G 2.788(ils. If).1 F F1(command) +2.988 E F0 .288(is not speci\214ed, an)3.558 F 2.787(yr)-.15 G .287 +(edirections tak)-2.787 F 2.787(ee)-.1 G -.25(ff)-2.787 G .287 +(ect in the current shell,).25 F(and the return status is 0.)144 132 Q +(If there is a redirection error)5 E 2.5(,t)-.4 G +(he return status is 1.)-2.5 E F2(exit)108 148.8 Q F0([)2.5 E F1(n)A F0 +(])A .095(Cause the shell to e)144 148.8 R .095(xit with a status of) +-.15 F F1(n)2.595 E F0 5.095(.I)C(f)-5.095 E F1(n)2.955 E F0 .096 +(is omitted, the e)2.835 F .096(xit status is that of the last command) +-.15 F -.15(exe)144 160.8 S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9 +/Times-Bold@0 SF(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 G +(cuted before the shell terminates.).15 E F2(export)108 177.6 Q F0([)2.5 +E F2(\255fn)A F0 2.5(][).833 G F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E +F0(]] ...)A F2(export \255p)108 189.6 Q F0 .257(The supplied)144 201.6 R +F1(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F +.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15 +(xe)-.15 G(cuted).15 E 2.626(commands. If)144 213.6 R(the)2.626 E F2 +2.626 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the) +.15 F F1(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no) +5.127 F F1(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .127 +(n, or if the).15 F F2144 225.6 Q F0 .048 +(option is supplied, a list of names of all e)2.548 F .048(xported v) +-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F22.547 E F0 +.047(option causes the)2.547 F -.15(ex)144 237.6 S 1.446 +(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447 +(rom each)-3.947 F F1(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G +1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F1(wor)A(d) +-.37 E F0 3.947(,t)C(he)-3.947 E -.25(va)144 249.6 S .742(lue of the v) +.25 F .742(ariable is set to)-.25 F F1(wor)3.242 E(d)-.37 E F0(.)A F2 +(export)5.742 E F0 .742(returns an e)3.242 F .741 +(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .741(lid option is) +.25 F .031(encountered, one of the)144 261.6 R F1(names)2.531 E F0 .031 +(is not a v)2.531 F .032(alid shell v)-.25 F .032(ariable name, or)-.25 +F F22.532 E F0 .032(is supplied with a)2.532 F F1(name)2.892 E F0 +(that)2.712 E(is not a function.)144 273.6 Q F2(fc)108 290.4 Q F0([)2.5 +E F2A F1(ename)2.5 E F0 2.5(][)C F2(\255lnr)-2.5 E F0 2.5(][)C F1 +<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F1(last)-2.5 E F0(])A F2(fc \255s)108 +302.4 Q F0([)2.5 E F1(pat)A F0(=)A F1 -.37(re)C(p).37 E F0 2.5(][)C F1 +(cmd)-2.5 E F0(])A .432 +(The \214rst form selects a range of commands from)144 314.4 R F1<8c72> +4.842 E(st)-.1 E F0(to)3.612 E F1(last)3.022 E F0 .431 +(from the history list and displays or)3.612 F .141(edits and re-e)144 +326.4 R -.15(xe)-.15 G .141(cutes them.).15 F F1 -.45(Fi)5.141 G -.1(rs) +.45 G(t).1 E F0(and)3.321 E F1(last)2.731 E F0 .141 +(may be speci\214ed as a string \(to locate the last command)3.321 F(be) +144 338.4 Q .311(ginning with that string\) or as a number \(an inde) +-.15 F 2.811(xi)-.15 G .31(nto the history list, where a ne)-2.811 F +-.05(ga)-.15 G(ti).05 E .61 -.15(ve n)-.25 H(umber).15 E .071 +(is used as an of)144 350.4 R .071 +(fset from the current command number\).)-.25 F .071(When listing, a) +5.071 F F1<8c72>2.571 E(st)-.1 E F0(or)2.571 E F1(last)2.571 E F0 .071 +(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653 +(lent to \2551 and \2550 is equi)144 362.4 R -.25(va)-.25 G .653 +(lent to the current command \(usually the).25 F F2(fc)3.153 E F0 .653 +(command\); otherwise 0 is)3.153 F(equi)144 374.4 Q -.25(va)-.25 G .242 +(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G 2.742(lid. If).25 F +F1(last)2.832 E F0 .242 +(is not speci\214ed, it is set to the current command for list-)3.422 F +.093(ing \(so that)144 386.4 R/F4 10/Courier@0 SF .093(fc \255l \25510) +2.593 F F0 .093(prints the last 10 commands\) and to)2.593 F F1<8c72> +4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F1<8c72>4.502 E(st)-.1 E +F0 .092(is not speci-)3.272 F(\214ed, it is set to the pre)144 398.4 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 422.4 +Q F22.522 E F0 .022 +(option suppresses the command numbers when listing.)2.522 F(The)5.022 E +F22.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 434.4 R .438(If the) +5.438 F F22.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E +.334(the editor gi)144 446.4 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E +F1(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835 +(do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 +F(If)5.335 E F1(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G +(n,).15 E .631(the v)144 458.4 R .631(alue of the)-.25 F F3(FCEDIT)3.131 +E F0 -.25(va)2.881 G .631(riable is used, and the v).25 F .631(alue of) +-.25 F F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.13 E F0 .63 +(is not set.)2.88 F .63(If nei-)5.63 F .005(ther v)144 470.4 R .005 +(ariable is set,)-.25 F F1(vi)4.171 E F0 .005(is used.)4.171 F .005 +(When editing is complete, the edited commands are echoed and e)5.005 F +(x-)-.15 E(ecuted.)144 482.4 Q .789(In the second form,)144 506.4 R F1 +(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788 +(cuted after each instance of).15 F F1(pat)3.288 E F0 .788 +(is replaced by)3.288 F F1 -.37(re)3.288 G(p).37 E F0(.)A F1(Com-)5.788 +E(mand)144 518.4 Q F0 .171(is interpreted the same as)2.671 F F1<8c72> +2.671 E(st)-.1 E F0(abo)2.671 E -.15(ve)-.15 G 5.171(.A).15 G .172 +(useful alias to use with this is)-2.499 F F4 .172(r='fc \255s')2.672 F +F0 2.672(,s)C 2.672(ot)-2.672 G(hat)-2.672 E(typing)144 530.4 Q F4 7.166 +(rc)3.666 G(c)-7.166 E F0 1.166(runs the last command be)3.666 F 1.166 +(ginning with)-.15 F F4(cc)3.666 E F0 1.165(and typing)3.666 F F4(r) +3.665 E F0(re-e)3.665 E -.15(xe)-.15 G 1.165(cutes the last com-).15 F +(mand.)144 542.4 Q .142(If the \214rst form is used, the return v)144 +566.4 R .142(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 +(lid option is encountered or).25 F F1<8c72>4.552 E(st)-.1 E F0(or)3.322 +E F1(last)2.732 E F0 .455(specify history lines out of range.)144 578.4 +R .454(If the)5.454 F F22.954 E F0 .454 +(option is supplied, the return v)2.954 F .454(alue is the v)-.25 F .454 +(alue of the)-.25 F .787(last command e)144 590.4 R -.15(xe)-.15 G .787 +(cuted or f).15 F .788 +(ailure if an error occurs with the temporary \214le of commands.)-.1 F +.788(If the)5.788 F 1.136 +(second form is used, the return status is that of the command re-e)144 +602.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F1(cmd)3.835 E F0 1.135 +(does not)4.405 F(specify a v)144 614.4 Q +(alid history line, in which case)-.25 E F2(fc)2.5 E F0(returns f)2.5 E +(ailure.)-.1 E F2(fg)108 631.2 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume) +144 643.2 Q F1(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413 +(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1(jobspec)5.653 E F0 +1.414(is not present, the)4.223 F(shell')144 655.2 Q 3.117(sn)-.55 G +.617(otion of the)-3.117 F F1(curr)3.117 E .617(ent job)-.37 F F0 .617 +(is used.)3.117 F .617(The return v)5.617 F .616 +(alue is that of the command placed into the)-.25 F(fore)144 667.2 Q +.362(ground, or f)-.15 F .362 +(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .363 +(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 679.2 Q +F0(does not specify a v)2.81 E(alid job or)-.25 E F1(jobspec)4.24 E F0 +(speci\214es a job that w)2.81 E(as started without job control.)-.1 E +F2(getopts)108 696 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A 2.5(g.) +-.37 G(..)-2.5 E F0(])A F2(getopts)144 708 Q F0 .793 +(is used by shell procedures to parse positional parameters.)3.294 F F1 +(optstring)6.023 E F0 .793(contains the option)3.513 F .149 +(characters to be recognized; if a character is follo)144 720 R .15 +(wed by a colon, the option is e)-.25 F .15(xpected to ha)-.15 F .45 +-.15(ve a)-.2 H(n).15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(66)185.955 E 0 Cg EP +%%Page: 67 67 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(ar)144 84 Q .579 +(gument, which should be separated from it by white space.)-.18 F .578 +(The colon and question mark char)5.579 F(-)-.2 E .636 +(acters may not be used as option characters.)144 96 R .636 +(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E/F1 10 +/Times-Bold@0 SF(getopts)3.136 E F0 .636(places the ne)3.136 F .636 +(xt op-)-.15 F .03(tion in the shell v)144 108 R(ariable)-.25 E/F2 10 +/Times-Italic@0 SF(name)2.89 E F0 2.53(,i).18 G(nitializing)-2.53 E F2 +(name)2.89 E F0 .029(if it does not e)2.71 F .029(xist, and the inde) +-.15 F 2.529(xo)-.15 G 2.529(ft)-2.529 G .029(he ne)-2.529 F .029(xt ar) +-.15 F(gu-)-.18 E .065(ment to be processed into the v)144 120 R +(ariable)-.25 E/F3 9/Times-Bold@0 SF(OPTIND)2.565 E/F4 9/Times-Roman@0 +SF(.)A F3(OPTIND)4.565 E F0 .066 +(is initialized to 1 each time the shell or a)2.315 F .885 +(shell script is in)144 132 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When).1 +F .885(an option requires an ar)3.385 F(gument,)-.18 E F1(getopts)3.385 +E F0 .885(places that ar)3.385 F .885(gument into)-.18 F .566(the v)144 +144 R(ariable)-.25 E F3(OPT)3.066 E(ARG)-.81 E F4(.)A F0 .566 +(The shell does not reset)5.066 F F3(OPTIND)3.066 E F0 .567 +(automatically; it must be manually reset)2.816 F .39 +(between multiple calls to)144 156 R F1(getopts)2.89 E F0 .39 +(within the same shell in)2.89 F -.2(vo)-.4 G .389(cation if a ne).2 F +2.889(ws)-.25 G .389(et of parameters is to)-2.889 F(be used.)144 168 Q +2.043(When the end of options is encountered,)144 192 R F1(getopts)4.543 +E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.044 +(alue greater than zero.)-.25 F F3(OPTIND)144 204 Q F0 +(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F2(name)2.5 E F0 +(is set to ?.)2.5 E F1(getopts)144 228 Q F0 .485 +(normally parses the positional parameters, b)2.985 F .485 +(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F2(ar)3.315 E +(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 240 Q F1(getopts)2.5 E F0 +(parses those instead.)2.5 E F1(getopts)144 264 Q F0 .345 +(can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F +.345(the \214rst character of)2.845 F F2(optstring)3.075 E F0 .345 +(is a colon,)3.065 F F2(silent)3.185 E F0 .345(error re-)3.525 F 1.669 +(porting is used.)144 276 R 1.668 +(In normal operation, diagnostic messages are printed when in)6.669 F +-.25(va)-.4 G 1.668(lid options or).25 F .393(missing option ar)144 288 +R .393(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable) +-.25 E F3(OPTERR)2.894 E F0 .394(is set to 0, no error messages)2.644 F +(will be displayed, e)144 300 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 +G(he \214rst character of)-2.5 E F2(optstring)2.73 E F0(is not a colon.) +2.72 E .667(If an in)144 324 R -.25(va)-.4 G .667(lid option is seen,) +.25 F F1(getopts)3.167 E F0 .667(places ? into)3.167 F F2(name)3.527 E +F0 .666(and, if not silent, prints an error message)3.347 F .399 +(and unsets)144 336 R F3(OPT)2.899 E(ARG)-.81 E F4(.)A F0(If)4.899 E F1 +(getopts)2.899 E F0 .399 +(is silent, the option character found is placed in)2.899 F F3(OPT)2.899 +E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 348 +Q 1.242(If a required ar)144 372 R 1.242(gument is not found, and)-.18 F +F1(getopts)3.741 E F0 1.241(is not silent, a question mark \()3.741 F F1 +(?).833 E F0 3.741(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F +F2(name)144.36 384 Q F0(,).18 E F3(OPT)2.713 E(ARG)-.81 E F0 .213 +(is unset, and a diagnostic message is printed.)2.463 F(If)5.213 E F1 +(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F1(:).833 E +F0(\)).833 E(is placed in)144 396 Q F2(name)2.86 E F0(and)2.68 E F3(OPT) +2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F1 +(getopts)144 420 Q F0 .902 +(returns true if an option, speci\214ed or unspeci\214ed, is found.) +3.402 F .902(It returns f)5.902 F .901(alse if the end of)-.1 F +(options is encountered or an error occurs.)144 432 Q F1(hash)108 448.8 +Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E +F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A .858 +(Each time)144 460.8 R F1(hash)3.358 E F0 .858(is in)3.358 F -.2(vo)-.4 +G -.1(ke).2 G .858(d, the full pathname of the command).1 F F2(name) +3.718 E F0 .858(is determined by searching)3.538 F .956 +(the directories in)144 472.8 R F1($P)3.456 E -.95(AT)-.74 G(H).95 E F0 +.956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956 +(viously-remembered pathname is discarded.)-.25 F .242(If the)144 484.8 +R F12.742 E F0 .243 +(option is supplied, no path search is performed, and)2.742 F F2 +(\214lename)4.653 E F0 .243(is used as the full \214lename)2.923 F .615 +(of the command.)144 496.8 R(The)5.615 E F13.115 E F0 .615 +(option causes the shell to for)3.115 F .615 +(get all remembered locations.)-.18 F(The)5.615 E F13.115 E F0 +(op-)3.115 E .293(tion causes the shell to for)144 508.8 R .293 +(get the remembered location of each)-.18 F F2(name)2.794 E F0 5.294(.I) +C 2.794(ft)-5.294 G(he)-2.794 E F12.794 E F0 .294 +(option is supplied,)2.794 F .028(the full pathname to which each)144 +520.8 R F2(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028 +(If multiple)5.028 F F2(name)2.528 E F0(ar)2.528 E .028 +(guments are sup-)-.18 F .175(plied with)144 532.8 R F12.675 E F0 +2.675(,t)C(he)-2.675 E F2(name)2.675 E F0 .175 +(is printed before the hashed full pathname.)2.675 F(The)5.175 E F1 +2.676 E F0 .176(option causes output to)2.676 F .783 +(be displayed in a format that may be reused as input.)144 544.8 R .783 +(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783 +(n, or if only).15 F F13.283 E F0(is)3.283 E .807 +(supplied, information about remembered commands is printed.)144 556.8 R +.807(The return status is true unless a)5.807 F F2(name)144.36 568.8 Q +F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.) +.25 E F1(help)108 585.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2 +(pattern)-2.5 E F0(])A .867(Display helpful information about b)144 +597.6 R .867(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 +.866(is speci\214ed,)3.607 F F1(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 +G 3.366(sd).15 G(etailed)-3.366 E .223(help on all commands matching)144 +609.6 R F2(pattern)3.973 E F0 2.723(;o).24 G .223 +(therwise help for all the b)-2.723 F .224 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 621.6 Q F1 +144 633.6 Q F0(Display a short description of each)180 633.6 Q F2 +(pattern)2.5 E F1144 645.6 Q F0(Display the description of each) +180 645.6 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G +(ormat)-2.5 E F1144 657.6 Q F0 +(Display only a short usage synopsis for each)180 657.6 Q F2(pattern)2.5 +E F0(The return status is 0 unless no command matches)144 674.4 Q F2 +(pattern)3.75 E F0(.).24 E F1(history [)108 691.2 Q F2(n)A F1(])A +(history \255c)108 703.2 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(67)185.955 E 0 Cg EP +%%Page: 68 68 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(history [)108 84 Q/F2 10/Times-Italic@0 SF(n)A F1(])A(history \255c) -108 96 Q(history \255d)108 108 Q F2(of)2.5 E(fset)-.18 E F1 -(history \255d)108 120 Q F2(start)2.5 E F0A F2(end)A F1 -(history \255anrw)108 132 Q F0([)2.5 E F2(\214lename)A F0(])A F1 -(history \255p)108 144 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5(g.) --.37 G(..)-2.5 E F0(])A F1(history \255s)108 156 Q F2(ar)2.5 E(g)-.37 E -F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144 168 S .752 +SF(history \255d)108 84 Q/F2 10/Times-Italic@0 SF(of)2.5 E(fset)-.18 E +F1(history \255d)108 96 Q F2(start)2.5 E F0A F2(end)A F1 +(history \255anrw)108 108 Q F0([)2.5 E F2(\214lename)A F0(])A F1 +(history \255p)108 120 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5(g.) +-.37 G(..)-2.5 E F0(])A F1(history \255s)108 132 Q F2(ar)2.5 E(g)-.37 E +F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144 144 S .752 (th no options, display the command history list with line numbers.).4 F .752(Lines listed with a)5.752 F F1(*)3.251 E F0(ha)3.251 E -.15(ve)-.2 -G .38(been modi\214ed.)144 180 R .38(An ar)5.38 F .38(gument of)-.18 F +G .38(been modi\214ed.)144 156 R .38(An ar)5.38 F .38(gument of)-.18 F F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88 (lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E/F3 9 -/Times-Bold@0 SF(HISTTIMEFOR-)2.881 E(MA)144 192 Q(T)-.855 E F0 .265 +/Times-Bold@0 SF(HISTTIMEFOR-)2.881 E(MA)144 168 Q(T)-.855 E F0 .265 (is set and not null, it is used as a format string for)2.515 F F2 (strftime)2.764 E F0 .264(\(3\) to display the time stamp asso-)B 1.019 -(ciated with each displayed history entry)144 204 R 6.019(.N)-.65 G +(ciated with each displayed history entry)144 180 R 6.019(.N)-.65 G 3.519(oi)-6.019 G(nterv)-3.519 E 1.019 (ening blank is printed between the formatted)-.15 F .176 -(time stamp and the history line.)144 216 R(If)5.176 E F2(\214lename) +(time stamp and the history line.)144 192 R(If)5.176 E F2(\214lename) 2.676 E F0 .176 (is supplied, it is used as the name of the history \214le; if)2.676 F -(not, the v)144 228 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)2.25 +(not, the v)144 204 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1144 240 Q F0 -(Clear the history list by deleting all the entries.)180 240 Q F1 -144 252 Q F2(of)2.5 E(fset)-.18 E F0 .389 -(Delete the history entry at position)180 264 R F2(of)2.889 E(fset)-.18 +(wing meanings:)-.25 E F1144 216 Q F0 +(Clear the history list by deleting all the entries.)180 216 Q F1 +144 228 Q F2(of)2.5 E(fset)-.18 E F0 .389 +(Delete the history entry at position)180 240 R F2(of)2.889 E(fset)-.18 E F0 5.389(.I)C(f)-5.389 E F2(of)2.889 E(fset)-.18 E F0 .389(is ne)2.889 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.89(,i).15 G 2.89(ti)-2.89 G 2.89(si)-2.89 G .39(nterpreted as relati)-2.89 F -.15(ve)-.25 G .599 -(to one greater than the last history position, so ne)180 276 R -.05(ga) +(to one greater than the last history position, so ne)180 252 R -.05(ga) -.15 G(ti).05 E .899 -.15(ve i)-.25 H .598 -(ndices count back from the end).15 F(of the history)180 288 Q 2.5(,a) +(ndices count back from the end).15 F(of the history)180 264 Q 2.5(,a) -.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G (efers to the current)-2.5 E F1(history -d)2.5 E F0(command.)2.5 E F1 -144 300 Q F2(start)2.5 E F0A F2(end)A F0 .757 -(Delete the history entries between positions)180 312 R F2(start)3.257 E -F0(and)3.258 E F2(end)3.258 E F0 3.258(,i)C(nclusi)-3.258 E -.15(ve)-.25 -G 5.758(.P).15 G(ositi)-5.758 E 1.058 -.15(ve a)-.25 H .758(nd ne).15 F --.05(ga)-.15 G(-).05 E(ti)180 324 Q .3 -.15(ve v)-.25 H(alues for)-.1 E -F2(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0 -(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E F1 -144 336 Q F0 .565(Append the `)180 336 R(`ne)-.74 E(w')-.25 E 3.065('h) --.74 G .564(istory lines to the history \214le.)-3.065 F .564 -(These are history lines entered since)5.564 F(the be)180 348 Q +144 276 Q F2(start)2.5 E F0A F2(end)A F0 1.25 +(Delete the range of history entries between positions)180 288 R F2 +(start)3.75 E F0(and)3.75 E F2(end)3.75 E F0 3.75(,i)C(nclusi)-3.75 E +-.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 300 +Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F2(start) +2.5 E F0(and)2.5 E F2(end)2.5 E F0(are interpreted as described abo)2.5 +E -.15(ve)-.15 G(.).15 E F1144 312 Q F0 .565(Append the `)180 312 +R(`ne)-.74 E(w')-.25 E 3.065('h)-.74 G .564 +(istory lines to the history \214le.)-3.065 F .564 +(These are history lines entered since)5.564 F(the be)180 324 Q (ginning of the current)-.15 E F1(bash)2.5 E F0(session, b)2.5 E -(ut not already appended to the history \214le.)-.2 E F1144 360 Q +(ut not already appended to the history \214le.)-.2 E F1144 336 Q F0 .854(Read the history lines not already read from the history \214le\ - into the current history list.)180 360 R .773 -(These are lines appended to the history \214le since the be)180 372 R + into the current history list.)180 336 R .773 +(These are lines appended to the history \214le since the be)180 348 R .772(ginning of the current)-.15 F F1(bash)3.272 E F0(ses-)3.272 E -(sion.)180 384 Q F1144 396 Q F0(Read the contents of the history \ -\214le and append them to the current history list.)180 396 Q F1 -144 408 Q F0(Write the current history list to the history \214le, o)180 -408 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G -(ontents.)-2.5 E F1144 420 Q F0 .625 -(Perform history substitution on the follo)180 420 R(wing)-.25 E F2(ar) +(sion.)180 360 Q F1144 372 Q F0(Read the contents of the history \ +\214le and append them to the current history list.)180 372 Q F1 +144 384 Q F0(Write the current history list to the history \214le, o)180 +384 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G +(ontents.)-2.5 E F1144 396 Q F0 .625 +(Perform history substitution on the follo)180 396 R(wing)-.25 E F2(ar) 3.125 E(gs)-.37 E F0 .626(and display the result on the standard)3.125 F -2.975(output. Does)180 432 R .475 +2.975(output. Does)180 408 R .475 (not store the results in the history list.)2.975 F(Each)5.475 E F2(ar) 2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F -(normal history e)180 444 Q(xpansion.)-.15 E F1144 456 Q F0 .362 -(Store the)180 456 R F2(ar)3.192 E(gs)-.37 E F0 .363 +(normal history e)180 420 Q(xpansion.)-.15 E F1144 432 Q F0 .362 +(Store the)180 432 R F2(ar)3.192 E(gs)-.37 E F0 .363 (in the history list as a single entry)3.132 F 5.363(.T)-.65 G .363 -(he last command in the history list is)-5.363 F(remo)180 468 Q -.15(ve) +(he last command in the history list is)-5.363 F(remo)180 444 Q -.15(ve) -.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0 -(are added.)2.77 E .146(If the)144 484.8 R F3(HISTTIMEFORMA)2.645 E(T) +(are added.)2.77 E .146(If the)144 460.8 R F3(HISTTIMEFORMA)2.645 E(T) -.855 E F0 -.25(va)2.395 G .145 (riable is set, the time stamp information associated with each history) -.25 F .668(entry is written to the history \214le, mark)144 496.8 R .669 +.25 F .668(entry is written to the history \214le, mark)144 472.8 R .669 (ed with the history comment character)-.1 F 5.669(.W)-.55 G .669 -(hen the history)-5.669 F .956(\214le is read, lines be)144 508.8 R .956 +(hen the history)-5.669 F .956(\214le is read, lines be)144 484.8 R .956 (ginning with the history comment character follo)-.15 F .955 (wed immediately by a digit)-.25 F .832 -(are interpreted as timestamps for the follo)144 520.8 R .832 +(are interpreted as timestamps for the follo)144 496.8 R .832 (wing history entry)-.25 F 5.833(.T)-.65 G .833(he return v)-5.833 F -.833(alue is 0 unless an in-)-.25 F -.25(va)144 532.8 S .168(lid option\ +.833(alue is 0 unless an in-)-.25 F -.25(va)144 508.8 S .168(lid option\ is encountered, an error occurs while reading or writing the history \ \214le, an in).25 F -.25(va)-.4 G(lid).25 E F2(of)2.668 E(f-)-.18 E(set) -144 544.8 Q F0(is supplied as an ar)2.5 E(gument to)-.18 E F12.5 E -F0 2.5(,o)C 2.5(rt)-2.5 G(he history e)-2.5 E -(xpansion supplied as an ar)-.15 E(gument to)-.18 E F12.5 E F0 -.1 -(fa)2.5 G(ils.).1 E F1(jobs)108 561.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5 -(][)C F2(jobspec)A F0(... ])2.5 E F1(jobs \255x)108 573.6 Q F2(command) -2.5 E F0([)2.5 E F2(ar)2.5 E(gs)-.37 E F0(... ])2.5 E -(The \214rst form lists the acti)144 585.6 Q .3 -.15(ve j)-.25 H 2.5 -(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1144 597.6 Q F0 -(List process IDs in addition to the normal information.)180 597.6 Q F1 -144 609.6 Q F0 .193(Display information only about jobs that ha) -180 609.6 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 -F .194(as last noti-)-.1 F(\214ed of their status.)180 621.6 Q F1 -144 633.6 Q F0(List only the process ID of the job')180 633.6 Q 2.5(sp) --.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 645.6 Q F0 -(Display only running jobs.)180 645.6 Q F1144 657.6 Q F0 -(Display only stopped jobs.)180 657.6 Q(If)144 674.4 Q F2(jobspec)4.554 -E F0 .314(is gi)3.124 F -.15(ve)-.25 G .314 -(n, output is restricted to information about that job).15 F 5.313(.T) --.4 G .313(he return status is 0 unless)-5.313 F(an in)144 686.4 Q -.25 +144 520.8 Q F0 .34(or range is supplied as an ar)2.84 F .34(gument to) +-.18 F F12.841 E F0 2.841(,o)C 2.841(rt)-2.841 G .341 +(he history e)-2.841 F .341(xpansion supplied as an ar)-.15 F .341 +(gument to)-.18 F F1144 532.8 Q F0 -.1(fa)2.5 G(ils.).1 E F1(jobs) +108 549.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ]) +2.5 E F1(jobs \255x)108 561.6 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E +(gs)-.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 573.6 Q .3 +-.15(ve j)-.25 H 2.5(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E F1144 585.6 Q F0 +(List process IDs in addition to the normal information.)180 585.6 Q F1 +144 597.6 Q F0 .194(Display information only about jobs that ha) +180 597.6 R .494 -.15(ve c)-.2 H .193(hanged status since the user w).15 +F .193(as last noti-)-.1 F(\214ed of their status.)180 609.6 Q F1 +144 621.6 Q F0(List only the process ID of the job')180 621.6 Q 2.5(sp) +-.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 633.6 Q F0 +(Display only running jobs.)180 633.6 Q F1144 645.6 Q F0 +(Display only stopped jobs.)180 645.6 Q(If)144 662.4 Q F2(jobspec)4.553 +E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313 +(n, output is restricted to information about that job).15 F 5.314(.T) +-.4 G .314(he return status is 0 unless)-5.314 F(an in)144 674.4 Q -.25 (va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25 -E F2(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 703.2 R F1 -2.894 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0 +E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 691.2 R F1 +2.895 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0 .394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394(found in) -3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .395 -(with the corre-)3.164 F(sponding process group ID, and e)144 715.2 Q +3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .394 +(with the corre-)3.164 F(sponding process group ID, and e)144 703.2 Q -.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar) 2.83 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 -E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(66)190.395 E 0 Cg EP -%%Page: 67 67 +E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(68)185.955 E 0 Cg EP +%%Page: 69 69 %%BeginPageSetup BP %%EndPageSetup @@ -8160,60 +8401,60 @@ SF(kill)108 84 Q F0([)2.5 E F1A/F2 10/Times-Italic@0 SF(sigspec) (Send the signal named by)144 108 R F2(sigspec)2.857 E F0(or)2.827 E F2 (signum)2.857 E F0 .017(to the processes named by)2.837 F F2(pid)3.767 E F0(or)3.287 E F2(jobspec)4.257 E F0(.).31 E F2(sigspec)5.357 E F0(is) -2.827 E .318(either a case-insensiti)144 120 R .618 -.15(ve s)-.25 H -.318(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.818 E F0 -.319(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319 -(pre\214x\) or a signal)2.569 F(number;)144 132 Q F2(signum)3.268 E F0 +2.828 E .319(either a case-insensiti)144 120 R .619 -.15(ve s)-.25 H +.319(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.819 E F0 +.318(\(with or without the)2.569 F F3(SIG)2.818 E F0 .318 +(pre\214x\) or a signal)2.568 F(number;)144 132 Q F2(signum)3.267 E F0 .427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F2(sigspec) 3.267 E F0 .427(is not present, then)3.237 F F3(SIGTERM)2.927 E F0 .427 -(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 144 R -F12.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314 +(is assumed.)2.677 F .428(An ar)5.427 F(-)-.2 E .314(gument of)144 144 R +F12.814 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314 F 2.814(ya)-.15 G -.18(rg)-2.814 G .314(uments are supplied when).18 F -F12.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .314 -(n, the names of).15 F .12(the signals corresponding to the ar)144 156 R -.119(guments are listed, and the return status is 0.)-.18 F(The)5.119 E -F2 -.2(ex)2.619 G(it_status).2 E F0(ar)2.619 E(-)-.2 E .799(gument to) -144 168 R F13.299 E F0 .799 -(is a number specifying either a signal number or the e)3.299 F .8 -(xit status of a process termi-)-.15 F .963(nated by a signal.)144 180 R +F12.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .313 +(n, the names of).15 F .119(the signals corresponding to the ar)144 156 +R .119(guments are listed, and the return status is 0.)-.18 F(The)5.12 E +F2 -.2(ex)2.62 G(it_status).2 E F0(ar)2.62 E(-)-.2 E .8(gument to)144 +168 R F13.3 E F0 .8 +(is a number specifying either a signal number or the e)3.3 F .799 +(xit status of a process termi-)-.15 F .962(nated by a signal.)144 180 R (The)5.962 E F13.462 E F0 .962(option is equi)3.462 F -.25(va)-.25 G .962(lent to).25 F F13.462 E F0(.)A F1(kill)5.962 E F0 .962 (returns true if at least one signal w)3.462 F(as)-.1 E (successfully sent, or f)144 192 Q(alse if an error occurs or an in)-.1 E -.25(va)-.4 G(lid option is encountered.).25 E F1(let)108 208.8 Q F2 (ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Each)144 -220.8 Q F2(ar)3.026 E(g)-.37 E F0 .196(is an arithmetic e)2.916 F .197 -(xpression to be e)-.15 F -.25(va)-.25 G .197(luated \(see).25 F F3 .197 -(ARITHMETIC EV)2.697 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo) -2.447 E -.15(ve)-.15 G 2.697(\). If).15 F(the last)144 232.8 Q F2(ar) +220.8 Q F2(ar)3.027 E(g)-.37 E F0 .197(is an arithmetic e)2.917 F .197 +(xpression to be e)-.15 F -.25(va)-.25 G .196(luated \(see).25 F F3 .196 +(ARITHMETIC EV)2.696 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo) +2.446 E -.15(ve)-.15 G 2.696(\). If).15 F(the last)144 232.8 Q F2(ar) 2.83 E(g)-.37 E F0 -.25(eva)2.72 G(luates to 0,).25 E F1(let)2.5 E F0 (returns 1; 0 is returned otherwise.)2.5 E F1(local)108 249.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C -(.. | \255 ])-2.5 E -.15(Fo)144 261.6 S 2.542(re).15 G .042(ach ar) --2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2 +(.. | \255 ])-2.5 E -.15(Fo)144 261.6 S 2.541(re).15 G .041(ach ar) +-2.541 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2 (name)2.902 E F0 .042(is created, and assigned)2.722 F F2(value)2.832 E -F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .041(can be)2.541 F -(an)144 273.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652 -(he options accepted by)-3.152 F F1(declar)3.152 E(e)-.18 E F0 5.652(.W) -C(hen)-5.652 E F1(local)3.152 E F0 .653 +F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .042(can be)2.542 F +(an)144 273.6 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653 +(he options accepted by)-3.153 F F1(declar)3.153 E(e)-.18 E F0 5.652(.W) +C(hen)-5.652 E F1(local)3.152 E F0 .652 (is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 -285.6 Q F2(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H +285.6 Q F2(name)3.281 E F0 .421(to ha)3.101 F .721 -.15(ve a v)-.2 H .422(isible scope restricted to that function and its children.).15 F -(If)5.421 E F2(name)2.921 E F0 .421(is \255, the set)2.921 F .509 +(If)5.422 E F2(name)2.922 E F0 .422(is \255, the set)2.922 F .51 (of shell options is made local to the function in which)144 297.6 R F1 -(local)3.01 E F0 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51 -(d: shell options changed us-).1 F 1.171(ing the)144 309.6 R F1(set) -3.671 E F0 -.2(bu)3.671 G 1.171 -(iltin inside the function are restored to their original v).2 F 1.17 -(alues when the function re-)-.25 F 3.38(turns. The)144 321.6 R .88 -(restore is ef)3.38 F .88(fected as if a series of)-.25 F F1(set)3.381 E -F0 .881(commands were e)3.381 F -.15(xe)-.15 G .881 -(cuted to restore the v).15 F(alues)-.25 E .788 +(local)3.009 E F0 .509(is in)3.009 F -.2(vo)-.4 G -.1(ke).2 G .509 +(d: shell options changed us-).1 F 1.17(ing the)144 309.6 R F1(set)3.67 +E F0 -.2(bu)3.67 G 1.171 +(iltin inside the function are restored to their original v).2 F 1.171 +(alues when the function re-)-.25 F 3.381(turns. The)144 321.6 R .881 +(restore is ef)3.381 F .881(fected as if a series of)-.25 F F1(set)3.381 +E F0 .88(commands were e)3.38 F -.15(xe)-.15 G .88 +(cuted to restore the v).15 F(alues)-.25 E .787 (that were in place before the function.)144 333.6 R -.4(Wi)5.788 G .788 -(th no operands,).4 F F1(local)3.288 E F0 .787(writes a list of local v) -3.288 F .787(ariables to)-.25 F .654(the standard output.)144 345.6 R -.654(It is an error to use)5.654 F F1(local)3.154 E F0 .654 -(when not within a function.)3.154 F .655(The return status is 0)5.654 F +(th no operands,).4 F F1(local)3.288 E F0 .788(writes a list of local v) +3.288 F .788(ariables to)-.25 F .655(the standard output.)144 345.6 R +.654(It is an error to use)5.655 F F1(local)3.154 E F0 .654 +(when not within a function.)3.154 F .654(The return status is 0)5.654 F (unless)144 357.6 Q F1(local)2.5 E F0(is used outside a function, an in) 2.5 E -.25(va)-.4 G(lid).25 E F2(name)2.86 E F0(is supplied, or)2.68 E F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F1(logout)108 @@ -8229,17 +8470,17 @@ F0 2.5(][)C F1-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E (count)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5(][)C F1-2.5 E F2 (fd)2.5 E F0 2.5(][)C F1-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][) C F1-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0 -(])A .159(Read lines from the standard input into the inde)144 415.2 R +(])A .158(Read lines from the standard input into the inde)144 415.2 R -.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F2 -(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.658(rf)-2.659 G .158 -(rom \214le descriptor)-2.658 F F2(fd)4.628 E F0 1.248(if the)144 427.2 -R F13.748 E F0 1.248(option is supplied.)3.748 F 1.249(The v)6.249 +(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.659(rf)-2.659 G .159 +(rom \214le descriptor)-2.659 F F2(fd)4.629 E F0 1.249(if the)144 427.2 +R F13.749 E F0 1.249(option is supplied.)3.749 F 1.249(The v)6.249 F(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1 -E F2(arr)3.749 E(ay)-.15 E F0 6.249(.O)C 1.249(ptions, if supplied,) --6.249 F(ha)144 439.2 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1144 451.2 Q F0 .911 -(The \214rst character of)180 451.2 R F2(delim)3.411 E F0 .911 -(is used to terminate each input line, rather than ne)3.411 F 3.41 +E F2(arr)3.748 E(ay)-.15 E F0 6.248(.O)C 1.248(ptions, if supplied,) +-6.248 F(ha)144 439.2 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 451.2 Q F0 .91 +(The \214rst character of)180 451.2 R F2(delim)3.41 E F0 .911 +(is used to terminate each input line, rather than ne)3.41 F 3.411 (wline. If)-.25 F F2(delim)180 463.2 Q F0(is the empty string,)2.5 E F1 (map\214le)2.5 E F0(will terminate a line when it reads a NUL character) 2.5 E(.)-.55 E F1144 475.2 Q F0(Cop)180 475.2 Q 2.5(ya)-.1 G 2.5 @@ -8258,39 +8499,40 @@ E F2(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E (quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F12.5 E F0 (option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1144 547.2 Q F0(Specify the number of lines read between each call to)180 547.2 Q -F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 564 Q F12.967 E F0 .467 +F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 564 Q F12.968 E F0 .467 (is speci\214ed without)2.967 F F12.967 E F0 2.967(,t)C .467 (he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2 (callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467 -(luated, it is sup-).25 F .262(plied the inde)144 576 R 2.762(xo)-.15 G -2.762(ft)-2.762 G .262(he ne)-2.762 F .261(xt array element to be assig\ -ned and the line to be assigned to that element)-.15 F .274 -(as additional ar)144 588 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E -F0 .274(is e)2.774 F -.25(va)-.25 G .274 -(luated after the line is read b).25 F .275 +(luated, it is sup-).25 F .261(plied the inde)144 576 R 2.761(xo)-.15 G +2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be assig\ +ned and the line to be assigned to that element)-.15 F .275 +(as additional ar)144 588 R(guments.)-.18 E F2(callbac)5.275 E(k)-.2 E +F0 .275(is e)2.775 F -.25(va)-.25 G .274 +(luated after the line is read b).25 F .274 (ut before the array element is)-.2 F(assigned.)144 600 Q (If not supplied with an e)144 616.8 Q(xplicit origin,)-.15 E F1 (map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0 (before assigning to it.)2.5 E F1(map\214le)144 633.6 Q F0 .797 -(returns successfully unless an in)3.298 F -.25(va)-.4 G .797 +(returns successfully unless an in)3.297 F -.25(va)-.4 G .797 (lid option or option ar).25 F .797(gument is supplied,)-.18 F F2(arr) -3.297 E(ay)-.15 E F0 .797(is in-)3.297 F -.25(va)144 645.6 S +3.297 E(ay)-.15 E F0 .798(is in-)3.298 F -.25(va)144 645.6 S (lid or unassignable, or if).25 E F2(arr)2.5 E(ay)-.15 E F0 (is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E F1(popd)108 662.4 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0 -2.5(][)C-2.5 E F2(n)A F0(])A(Remo)144 674.4 Q -.15(ve)-.15 G 2.799 -(se).15 G .299(ntries from the directory stack.)-2.799 F -.4(Wi)5.299 G -.299(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 -G .3(he top directory from the)-2.799 F 1.479(stack, and performs a)144 -686.4 R F1(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479 -(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.478 -(uments, if supplied, ha).18 F 1.778 -.15(ve t)-.2 H 1.478(he follo).15 -F(wing)-.25 E(meanings:)144 698.4 Q F1144 710.4 Q F0 .551 +2.5(][)C-2.5 E F2(n)A F0(])A(Remo)144 674.4 Q -.15(ve)-.15 G 3.092 +(se).15 G .592(ntries from the directory stack.)-3.092 F .591 +(The elements are numbered from 0 starting at the \214rst)5.591 F .664 +(directory listed by)144 686.4 R F1(dirs)3.164 E F0 5.664(.W)C .664 +(ith no ar)-6.064 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15 +(ve)-.15 G 3.165(st).15 G .665(he top directory from the stack, and) +-3.165 F(changes to the ne)144 698.4 Q 2.5(wt)-.25 G(op directory)-2.5 E +5(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2 +H(he follo).15 E(wing meanings:)-.25 E F1144 710.4 Q F0 .551 (Suppresses the normal change of directory when remo)180 710.4 R .551 (ving directories from the stack, so)-.15 F -(that only the stack is manipulated.)180 722.4 Q(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(67)190.395 E 0 Cg EP -%%Page: 68 68 +(that only the stack is manipulated.)180 722.4 Q(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(69)185.955 E 0 Cg EP +%%Page: 70 70 %%BeginPageSetup BP %%EndPageSetup @@ -8299,1761 +8541,1830 @@ BP SF(+)144 84 Q/F2 10/Times-Italic@0 SF(n)A F0(Remo)180 84 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E F0 .14 (th entry counting from the left of the list sho)B .14(wn by)-.25 F F1 -(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 96 -S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0(remo) -2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)-.65 E -F3(popd +1)2.5 E F0(the second.)2.5 E F1144 108 Q F2(n)A F0(Remo)180 -108 Q -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n)3.759 E F0 1.259 -(th entry counting from the right of the list sho)B 1.26(wn by)-.25 F F1 -(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 120 -R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo)2.5 E -.15(ve)-.15 -G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3(popd -1)2.5 E F0 -(the ne)2.5 E(xt to last.)-.15 E .644(If the)144 136.8 R F1(popd)3.144 E -F0 .644(command is successful, a)3.144 F F1(dirs)3.143 E F0 .643 -(is performed as well, and the return status is 0.)3.143 F F1(popd)5.643 -E F0 .415(returns f)144 148.8 R .415(alse if an in)-.1 F -.25(va)-.4 G -.415(lid option is encountered, the directory stack is empty).25 F 2.916 -(,an)-.65 G(on-e)-2.916 E .416(xistent direc-)-.15 F -(tory stack entry is speci\214ed, or the directory change f)144 160.8 Q -(ails.)-.1 E F1(printf)108 177.6 Q F0([)2.5 E F1A F2(var)2.5 E F0 -(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .358 -(Write the formatted)144 189.6 R F2(ar)2.858 E(guments)-.37 E F0 .358 +(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero,)-2.64 F .78 +(from the stack.)180 96 R -.15(Fo)5.78 G 3.28(re).15 G(xample:)-3.43 E +/F3 10/Courier@0 SF .779(popd +0)3.279 F F0(remo)3.279 E -.15(ve)-.15 G +3.279(st).15 G .779(he \214rst directory)-3.279 F(,)-.65 E F3 .779 +(popd +1)3.279 F F0 .779(the sec-)3.279 F(ond.)180 108 Q F1144 120 Q +F2(n)A F0(Remo)180 120 Q -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n) +3.759 E F0 1.259(th entry counting from the right of the list sho)B 1.26 +(wn by)-.25 F F1(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5 +(zero. F)180 132 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo) +2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3 +(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .094 +(If the top element of the directory stack is modi\214ed, and the)144 +148.8 R F2(-n)2.593 E F0 .093(option w)2.593 F .093(as not supplied,)-.1 +F F1(popd)2.593 E F0(uses)2.593 E(the)144 160.8 Q F1(cd)2.696 E F0 -.2 +(bu)2.696 G .196 +(iltin to change to the directory at the top of the stack.).2 F .196 +(If the)5.196 F F1(cd)2.696 E F0 -.1(fa)2.696 G(ils,).1 E F1(popd)2.697 +E F0 .197(returns a non-)2.697 F(zero v)144 172.8 Q(alue.)-.25 E +(Otherwise,)144 189.6 Q F1(popd)2.671 E F0 .171(returns f)2.671 F .171 +(alse if an in)-.1 F -.25(va)-.4 G .171 +(lid option is encountered, the directory stack is empty).25 F 2.67(,o) +-.65 G 2.67(ra)-2.67 G(non-e)144 201.6 Q +(xistent directory stack entry is speci\214ed.)-.15 E 1.555(If the)144 +218.4 R F1(popd)4.055 E F0 1.555(command is successful, bash runs)4.055 +F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.056(wt)-.25 G 1.556 +(he \214nal contents of the directory)-4.056 F +(stack, and the return status is 0.)144 230.4 Q F1(printf)108 247.2 Q F0 +([)2.5 E F1A F2(var)2.5 E F0(])A F2(format)2.5 E F0([)2.5 E F2(ar) +A(guments)-.37 E F0(])A .358(Write the formatted)144 259.2 R F2(ar)2.858 +E(guments)-.37 E F0 .358 (to the standard output under the control of the)2.858 F F2(format)2.857 E F0 5.357(.T)C(he)-5.357 E F12.857 E F0(op-)2.857 E .714 -(tion causes the output to be assigned to the v)144 201.6 R(ariable)-.25 +(tion causes the output to be assigned to the v)144 271.2 R(ariable)-.25 E F2(var)3.214 E F0 .714(rather than being printed to the standard)3.214 -F(output.)144 213.6 Q(The)144 237.6 Q F2(format)3.018 E F0 .517(is a ch\ +F(output.)144 283.2 Q(The)144 307.2 Q F2(format)3.018 E F0 .517(is a ch\ aracter string which contains three types of objects: plain characters,\ which are)3.018 F .704(simply copied to standard output, character esc\ -ape sequences, which are con)144 249.6 R -.15(ve)-.4 G .704 +ape sequences, which are con)144 319.2 R -.15(ve)-.4 G .704 (rted and copied to).15 F .036(the standard output, and format speci\ -\214cations, each of which causes printing of the ne)144 261.6 R .036 -(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 273.6 Q(gument)-.37 E F0 +\214cations, each of which causes printing of the ne)144 331.2 R .036 +(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 343.2 Q(gument)-.37 E F0 5.531(.I)C 3.031(na)-5.531 G .531(ddition to the standard)-3.031 F F2 (printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.032 -E F0 .532(interprets the follo)3.032 F(w-)-.25 E(ing e)144 285.6 Q -(xtensions:)-.15 E F1(%b)144 297.6 Q F0(causes)180 297.6 Q F1(printf) +E F0 .532(interprets the follo)3.032 F(w-)-.25 E(ing e)144 355.2 Q +(xtensions:)-.15 E F1(%b)144 367.2 Q F0(causes)180 367.2 Q F1(printf) 2.596 E F0 .096(to e)2.596 F .096 (xpand backslash escape sequences in the corresponding)-.15 F F2(ar) -2.596 E(gument)-.37 E F0 .095(in the)2.595 F(same w)180 309.6 Q(ay as) --.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 321.6 Q F0(causes)180 321.6 Q +2.596 E(gument)-.37 E F0 .095(in the)2.595 F(same w)180 379.2 Q(ay as) +-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 391.2 Q F0(causes)180 391.2 Q F1(printf)2.51 E F0 .01(to output the corresponding)2.51 F F2(ar)2.51 E (gument)-.37 E F0 .01(in a format that can be reused as shell)2.51 F -(input.)180 333.6 Q F1(%\()144 345.6 Q F2(datefmt)A F1(\)T)A F0(causes) -180 357.6 Q F1(printf)4.404 E F0 1.904 +(input.)180 403.2 Q F1(%Q)144 415.2 Q F0(lik)180 415.2 Q(e)-.1 E F1(%q) +2.5 E F0 2.5(,b)C(ut applies an)-2.7 E 2.5(ys)-.15 G +(upplied precision to the)-2.5 E F2(ar)2.5 E(gument)-.37 E F0 +(before quoting it.)2.5 E F1(%\()144 427.2 Q F2(datefmt)A F1(\)T)A F0 +(causes)180 439.2 Q F1(printf)4.404 E F0 1.904 (to output the date-time string resulting from using)4.404 F F2(datefmt) -4.404 E F0 1.903(as a format)4.404 F .38(string for)180 369.6 R F2 +4.404 E F0 1.903(as a format)4.404 F .38(string for)180 451.2 R F2 (strftime)2.881 E F0 2.881(\(3\). The)B(corresponding)2.881 E F2(ar) 2.881 E(gument)-.37 E F0 .381(is an inte)2.881 F .381 (ger representing the number)-.15 F .293(of seconds since the epoch.)180 -381.6 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F +463.2 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F .293(alues may be used: \2551 represents the)-.25 F .693 -(current time, and \2552 represents the time the shell w)180 393.6 R +(current time, and \2552 represents the time the shell w)180 475.2 R .693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.194(d. If).1 F .694(no ar) -3.194 F .694(gument is speci-)-.18 F .21(\214ed, con)180 405.6 R -.15 +3.194 F .694(gument is speci-)-.18 F .21(\214ed, con)180 487.2 R -.15 (ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71 G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25 G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F -F1(printf)2.71 E F0(beha)180 417.6 Q(vior)-.2 E(.)-.55 E .901 -(The %b, %q, and %T directi)144 434.4 R -.15(ve)-.25 G 3.401(sa).15 G -.901(ll use the \214eld width and precision ar)-3.401 F .902 +F1(printf)2.71 E F0(beha)180 499.2 Q(vior)-.2 E(.)-.55 E .901 +(The %b, %q, and %T directi)144 516 R -.15(ve)-.25 G 3.401(sa).15 G .901 +(ll use the \214eld width and precision ar)-3.401 F .902 (guments from the format)-.18 F .358(speci\214cation and write that man) -144 446.4 R 2.858(yb)-.15 G .357 +144 528 R 2.858(yb)-.15 G .357 (ytes from \(or use that wide a \214eld for\) the e)-2.858 F .357 (xpanded ar)-.15 F(gument,)-.18 E -(which usually contains more characters than the original.)144 458.4 Q -(Ar)144 475.2 Q .463(guments to non-string format speci\214ers are trea\ -ted as C constants, e)-.18 F .464(xcept that a leading plus or)-.15 F -1.259(minus sign is allo)144 487.2 R 1.259 +(which usually contains more characters than the original.)144 540 Q(Ar) +144 556.8 Q .463(guments to non-string format speci\214ers are treated \ +as C constants, e)-.18 F .464(xcept that a leading plus or)-.15 F 1.259 +(minus sign is allo)144 568.8 R 1.259 (wed, and if the leading character is a single or double quote, the v) --.25 F 1.258(alue is the)-.25 F(ASCII v)144 499.2 Q(alue of the follo) --.25 E(wing character)-.25 E(.)-.55 E(The)144 516 Q F2(format)2.514 E F0 -.015(is reused as necessary to consume all of the)2.514 F F2(ar)2.515 E -(guments)-.37 E F0 5.015(.I)C 2.515(ft)-5.015 G(he)-2.515 E F2(format) +-.25 F 1.258(alue is the)-.25 F(ASCII v)144 580.8 Q(alue of the follo) +-.25 E(wing character)-.25 E(.)-.55 E(The)144 597.6 Q F2(format)2.514 E +F0 .015(is reused as necessary to consume all of the)2.514 F F2(ar)2.515 +E(guments)-.37 E F0 5.015(.I)C 2.515(ft)-5.015 G(he)-2.515 E F2(format) 2.515 E F0 .015(requires more)2.515 F F2(ar)2.515 E(-)-.2 E(guments)144 -528 Q F0 .566(than are supplied, the e)3.066 F .566 +609.6 Q F0 .566(than are supplied, the e)3.066 F .566 (xtra format speci\214cations beha)-.15 F .866 -.15(ve a)-.2 H 3.066(si) .15 G 3.065(faz)-3.066 G .565(ero v)-3.065 F .565(alue or null string,) --.25 F(as appropriate, had been supplied.)144 540 Q(The return v)5 E +-.25 F(as appropriate, had been supplied.)144 621.6 Q(The return v)5 E (alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd) -108 556.8 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C --2.5 E F2(n)A F0(])A F1(pushd)108 568.8 Q F0([)2.5 E F1A F0 +108 638.4 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C +-2.5 E F2(n)A F0(])A F1(pushd)108 650.4 Q F0([)2.5 E F1A F0 2.5(][)C F2(dir)-2.5 E F0(])A .639(Adds a directory to the top of the d\ -irectory stack, or rotates the stack, making the ne)144 580.8 R 3.14(wt) --.25 G .64(op of the)-3.14 F .417(stack the current w)144 592.8 R .416 -(orking directory)-.1 F 5.416(.W)-.65 G .416(ith no ar)-5.816 F -(guments,)-.18 E F1(pushd)2.916 E F0 -.15(ex)2.916 G .416 -(changes the top tw).15 F 2.916(od)-.1 G(irectories)-2.916 E 1.625 -(and returns 0, unless the directory stack is empty)144 604.8 R 6.625 -(.A)-.65 G -.18(rg)-6.625 G 1.625(uments, if supplied, ha).18 F 1.925 --.15(ve t)-.2 H 1.625(he follo).15 F(wing)-.25 E(meanings:)144 616.8 Q -F1144 628.8 Q F0 1.811(Suppresses the normal change of directory \ -when rotating or adding directories to the)180 628.8 R -(stack, so that only the stack is manipulated.)180 640.8 Q F1(+)144 -652.8 Q F2(n)A F0 1.267(Rotates the stack so that the)180 652.8 R F2(n) -3.767 E F0 1.268(th directory \(counting from the left of the list sho)B -1.268(wn by)-.25 F F1(dirs)180 664.8 Q F0 2.5(,s)C -(tarting with zero\) is at the top.)-2.5 E F1144 676.8 Q F2(n)A F0 -.92(Rotates the stack so that the)180 676.8 R F2(n)3.42 E F0 .92 -(th directory \(counting from the right of the list sho)B .92(wn by)-.25 -F F1(dirs)180 688.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.) --2.5 E F2(dir)144.35 700.8 Q F0(Adds)180 700.8 Q F2(dir)3.137 E F0 .287 -(to the directory stack at the top, making it the ne)3.517 F 2.788(wc) --.25 G .288(urrent w)-2.788 F .288(orking directory as)-.1 F -(if it had been supplied as the ar)180 712.8 Q(gument to the)-.18 E F1 -(cd)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .489(If the)144 729.6 R F1(pushd) -2.989 E F0 .489(command is successful, a)2.989 F F1(dirs)2.988 E F0 .488 -(is performed as well.)2.988 F .488(If the \214rst form is used,)5.488 F -F1(pushd)2.988 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(68) -190.395 E 0 Cg EP -%%Page: 69 69 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.039 -(returns 0 unless the cd to)144 84 R/F1 10/Times-Italic@0 SF(dir)3.889 E -F0 -.1(fa)4.269 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4 F/F2 -10/Times-Bold@0 SF(pushd)3.54 E F0 1.04(returns 0 unless the directory) -3.54 F .847(stack is empty)144 96 R 3.347(,an)-.65 G(on-e)-3.347 E .847 -(xistent directory stack element is speci\214ed, or the directory chang\ -e to the)-.15 F(speci\214ed ne)144 108 Q 2.5(wc)-.25 G -(urrent directory f)-2.5 E(ails.)-.1 E F2(pwd)108 124.8 Q F0([)2.5 E F2 -(\255LP)A F0(])A .844(Print the absolute pathname of the current w)144 -136.8 R .845(orking directory)-.1 F 5.845(.T)-.65 G .845 -(he pathname printed contains no)-5.845 F .182(symbolic links if the)144 -148.8 R F22.681 E F0 .181(option is supplied or the)2.681 F F2 -.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2 -(set)2.681 E F0 -.2(bu)2.681 G .181(iltin command is).2 F 3.263 -(enabled. If)144 160.8 R(the)3.263 E F23.263 E F0 .763 -(option is used, the pathname printed may contain symbolic links.)3.263 -F .764(The return)5.764 F .405(status is 0 unless an error occurs while\ - reading the name of the current directory or an in)144 172.8 R -.25(va) --.4 G .405(lid op-).25 F(tion is supplied.)144 184.8 Q F2 -.18(re)108 -201.6 S(ad).18 E F0([)3.816 E F2(\255ers)A F0 3.816(][)C F2-3.816 -E F1(aname)3.816 E F0 3.816(][)C F2-3.816 E F1(delim)3.816 E F0 -3.816(][)C F2-3.816 E F1(te)3.816 E(xt)-.2 E F0 3.816(][)C F2 --3.816 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2 --3.817 E F1(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2-3.817 E -F1(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F2-3.817 E F1(timeout) -3.817 E F0 3.817(][)C F2-3.817 E F1(fd)3.817 E F0(])A([)108 213.6 -Q F1(name)A F0(...])2.5 E .516(One line is read from the standard input\ -, or from the \214le descriptor)144 225.6 R F1(fd)3.016 E F0 .516 -(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 237.6 Q F2 -2.935 E F0 .435(option, split into w)2.935 F .435 -(ords as described abo)-.1 F .735 -.15(ve u)-.15 H(nder).15 E F2 -.75 -(Wo)2.935 G .435(rd Splitting).75 F F0 2.935(,a)C .436(nd the \214rst w) --2.935 F .436(ord is as-)-.1 F .376(signed to the \214rst)144 249.6 R F1 -(name)3.236 E F0 2.876(,t).18 G .376(he second w)-2.876 F .376 -(ord to the second)-.1 F F1(name)3.236 E F0 2.876(,a).18 G .376 -(nd so on.)-2.876 F .375(If there are more w)5.376 F(ords)-.1 E .236 -(than names, the remaining w)144 261.6 R .237(ords and their interv)-.1 -F .237(ening delimiters are assigned to the last)-.15 F F1(name)3.097 E -F0 5.237(.I).18 G(f)-5.237 E .875(there are fe)144 273.6 R .875(wer w) --.25 F .875(ords read from the input stream than names, the remaining n\ -ames are assigned)-.1 F .517(empty v)144 285.6 R 3.017(alues. The)-.25 F -.517(characters in)3.017 F/F3 9/Times-Bold@0 SF(IFS)3.017 E F0 .518 -(are used to split the line into w)2.767 F .518 -(ords using the same rules the)-.1 F .027(shell uses for e)144 297.6 R -.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F2 --.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526(\). The)B .026 -(backslash character \()2.526 F F2(\\)A F0 2.526(\)m)C(ay)-2.526 E .488 -(be used to remo)144 309.6 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H -.488(pecial meaning for the ne).15 F .488 -(xt character read and for line continuation.)-.15 F(Op-)5.489 E -(tions, if supplied, ha)144 321.6 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F2144 333.6 Q F1(aname)2.5 E F0 1.026 -(The w)180 345.6 R 1.026 -(ords are assigned to sequential indices of the array v)-.1 F(ariable) --.25 E F1(aname)3.855 E F0 3.525(,s).18 G 1.025(tarting at 0.)-3.525 F -F1(aname)180.33 357.6 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 --.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F1(name)2.5 E F0 -(ar)2.5 E(guments are ignored.)-.18 E F2144 369.6 Q F1(delim)2.5 E -F0 .28(The \214rst character of)180 381.6 R F1(delim)2.78 E F0 .281 -(is used to terminate the input line, rather than ne)2.78 F 2.781 -(wline. If)-.25 F F1(de-)2.781 E(lim)180 393.6 Q F0 -(is the empty string,)2.5 E F2 -.18(re)2.5 G(ad).18 E F0 -(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2 -144 405.6 Q F0 .373 -(If the standard input is coming from a terminal,)180 405.6 R F2 -.18 -(re)2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.872 E F0(abo) -2.622 E -.15(ve)-.15 G 2.872(\)i).15 G 2.872(su)-2.872 G(sed)-2.872 E -.218(to obtain the line.)180 417.6 R .218 -(Readline uses the current \(or def)5.218 F .218 -(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E -(acti)180 429.6 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b)-2.5 E -(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E -(ault \214lename completion.)-.1 E F2144 441.6 Q F1(te)2.5 E(xt) --.2 E F0(If)180 441.6 Q F2 -.18(re)2.716 G(adline).18 E F0 .216 -(is being used to read the line,)2.716 F F1(te)2.716 E(xt)-.2 E F0 .216 -(is placed into the editing b)2.716 F(uf)-.2 E .215(fer before edit-) --.25 F(ing be)180 453.6 Q(gins.)-.15 E F2144 465.6 Q F1(nc)2.5 E -(har)-.15 E(s)-.1 E F2 -.18(re)180 477.6 S(ad).18 E F0 .322 -(returns after reading)2.822 F F1(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323 -(characters rather than w)2.823 F .323 -(aiting for a complete line of in-)-.1 F(put, b)180 489.6 Q -(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F1(nc)2.5 E(har)-.15 -E(s)-.1 E F0(characters are read before the delimiter)2.5 E(.)-.55 E F2 -144 501.6 Q F1(nc)2.5 E(har)-.15 E(s)-.1 E F2 -.18(re)180 513.6 S -(ad).18 E F0 1.269(returns after reading e)3.77 F(xactly)-.15 E F1(nc) -3.769 E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F -1.269(aiting for a complete)-.1 F .274 -(line of input, unless EOF is encountered or)180 525.6 R F2 -.18(re) -2.775 G(ad).18 E F0 .275(times out.)2.775 F .275 -(Delimiter characters encoun-)5.275 F 1.003 -(tered in the input are not treated specially and do not cause)180 537.6 -R F2 -.18(re)3.502 G(ad).18 E F0 1.002(to return until)3.502 F F1(nc) -3.502 E(har)-.15 E(s)-.1 E F0 .608(characters are read.)180 549.6 R .608 -(The result is not split on the characters in)5.608 F F2(IFS)3.108 E F0 -3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 561.6 S .67 -(riable is assigned e).25 F .669 -(xactly the characters read \(with the e)-.15 F .669 -(xception of backslash; see the)-.15 F F2180 573.6 Q F0 -(option belo)2.5 E(w\).)-.25 E F2144 585.6 Q F1(pr)2.5 E(ompt)-.45 -E F0(Display)180 597.6 Q F1(pr)3.66 E(ompt)-.45 E F0 1.161 -(on standard error)3.66 F 3.661(,w)-.4 G 1.161(ithout a trailing ne) --3.661 F 1.161(wline, before attempting to read)-.25 F(an)180 609.6 Q -2.5(yi)-.15 G 2.5(nput. The)-2.5 F -(prompt is displayed only if input is coming from a terminal.)2.5 E F2 -144 621.6 Q F0 .544(Backslash does not act as an escape character) -180 621.6 R 5.543(.T)-.55 G .543 -(he backslash is considered to be part of)-5.543 F .492(the line.)180 -633.6 R .492(In particular)5.492 F 2.992(,ab)-.4 G(ackslash-ne)-2.992 E -.493(wline pair may not then be used as a line continua-)-.25 F(tion.) -180 645.6 Q F2144 657.6 Q F0(Silent mode.)180 657.6 Q -(If input is coming from a terminal, characters are not echoed.)5 E F2 -144 669.6 Q F1(timeout)2.5 E F0(Cause)180 681.6 Q F2 -.18(re)2.929 -G(ad).18 E F0 .428(to time out and return f)2.929 F .428 -(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .56 -(ber of characters\) is not read within)180 693.6 R F1(timeout)3.061 E -F0(seconds.)3.061 E F1(timeout)5.561 E F0 .561(may be a decimal number) -3.061 F(with a fractional portion follo)180 705.6 Q -(wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E -.3 -.15(ve i)-.25 H(f).15 E F2 -.18(re)2.5 G(ad).18 E F0 .506(is readin\ -g input from a terminal, pipe, or other special \214le; it has no ef)180 -717.6 R .506(fect when reading)-.25 F .59(from re)180 729.6 R .59 -(gular \214les.)-.15 F(If)5.59 E F2 -.18(re)3.09 G(ad).18 E F0 .589 -(times out,)3.09 F F2 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve)-.2 -G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .589 -(artial input read into the speci\214ed).15 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(69)190.395 E 0 Cg EP -%%Page: 70 70 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E -.25(va)180 84 S -(riable).25 E/F1 10/Times-Italic@0 SF(name)2.77 E F0 5.27(.I)C(f)-5.27 E -F1(timeout)2.77 E F0 .27(is 0,)2.77 F/F2 10/Times-Bold@0 SF -.18(re)2.77 -G(ad).18 E F0 .27(returns immediately)2.77 F 2.77(,w)-.65 G .27 -(ithout trying to read an)-2.77 F 2.77(yd)-.15 G(ata.)-2.77 E 1.12 -(The e)180 96 R 1.12(xit status is 0 if input is a)-.15 F -.25(va)-.2 G -1.12(ilable on the speci\214ed \214le descriptor).25 F 3.62(,n)-.4 G -1.12(on-zero other)-3.62 F(-)-.2 E 2.5(wise. The)180 108 R -.15(ex)2.5 G -(it status is greater than 128 if the timeout is e).15 E(xceeded.)-.15 E -F2144 120 Q F1(fd)2.5 E F0(Read input from \214le descriptor)180 -120 Q F1(fd)2.5 E F0(.)A .522(If no)144 136.8 R F1(names)3.382 E F0 .522 -(are supplied, the line read, without the ending delimiter b)3.292 F -.522(ut otherwise unmodi\214ed, is)-.2 F 1.187(assigned to the v)144 -148.8 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9 -/Times-Roman@0 SF(.)A F0 1.186(The e)5.686 F 1.186 -(xit status is zero, unless end-of-\214le is encountered,)-.15 F F2 -.18 -(re)3.686 G(ad).18 E F0 .96 -(times out \(in which case the status is greater than 128\), a v)144 -160.8 R .961(ariable assignment error \(such as as-)-.25 F .707 -(signing to a readonly v)144 172.8 R .706(ariable\) occurs, or an in) --.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar) -.25 F .706(gument to)-.18 F F2144 184.8 Q F0(.)A F2 -.18(re)108 -201.6 S(adonly).18 E F0([)2.5 E F2(\255aAf)A F0 2.5(][)C F2-2.5 E -F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E F0 2.5(].)C(..]) --2.5 E .77(The gi)144 213.6 R -.15(ve)-.25 G(n).15 E F1(names)3.27 E F0 -.77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25 -F F1(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.097 -(quent assignment.)144 225.6 R 1.097(If the)6.097 F F23.597 E F0 -1.097(option is supplied, the functions corresponding to the)3.597 F F1 -(names)3.596 E F0 1.096(are so)3.596 F(mark)144 237.6 Q 3.334(ed. The) --.1 F F23.334 E F0 .834(option restricts the v)3.334 F .834 -(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) --3.334 F F23.334 E F0 .834(option restricts the v)3.334 F(ari-) --.25 E .777(ables to associati)144 249.6 R 1.077 -.15(ve a)-.25 H 3.277 -(rrays. If).15 F .777(both options are supplied,)3.277 F F23.277 E -F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F1(name) -3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 261.6 R -.15(ve) --.25 G .521(n, or if the).15 F F23.021 E F0 .521 -(option is supplied, a list of all readonly names is printed.)3.021 F -.522(The other)5.521 F .295(options may be used to restrict the output \ -to a subset of the set of readonly names.)144 273.6 R(The)5.295 E F2 -2.795 E F0(option)2.795 E .786 -(causes output to be displayed in a format that may be reused as input.) -144 285.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144 -297.6 Q .718(wed by =)-.25 F F1(wor)A(d)-.37 E F0 3.218(,t)C .718(he v) --3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F1(wor) -3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in) --5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the) -144 309.6 R F1(names)3.12 E F0 .26(is not a v)3.03 F .26(alid shell v) --.25 F .26(ariable name, or)-.25 F F22.76 E F0 .26 -(is supplied with a)2.76 F F1(name)144.36 321.6 Q F0 -(that is not a function.)2.68 E F2 -.18(re)108 338.4 S(tur).18 E(n)-.15 -E F0([)2.5 E F1(n)A F0(])A .021(Causes a function to stop e)144 350.4 R --.15(xe)-.15 G .021(cuting and return the v).15 F .021 -(alue speci\214ed by)-.25 F F1(n)2.88 E F0 .02(to its caller)2.76 F 5.02 -(.I)-.55 G(f)-5.02 E F1(n)2.88 E F0 .02(is omitted,)2.76 F .596 -(the return status is that of the last command e)144 362.4 R -.15(xe) --.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E -F2 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15 -G(cuted).15 E .267(by a trap handler)144 374.4 R 2.767(,t)-.4 G .267 -(he last command used to determine the status is the last command e) --2.767 F -.15(xe)-.15 G .267(cuted be-).15 F .02(fore the trap handler) -144 386.4 R 5.02(.I)-.55 G(f)-5.02 E F2 -.18(re)2.52 G(tur).18 E(n)-.15 -E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F2(DEB)2.52 -E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E -.886(mine the status is the last command e)144 398.4 R -.15(xe)-.15 G -.886(cuted by the trap handler before).15 F F2 -.18(re)3.385 G(tur).18 E -(n)-.15 E F0 -.1(wa)3.385 G 3.385(si).1 G -1.9 -.4(nv o)-3.385 H -.1(ke) -.4 G 3.385(d. If).1 F F2 -.18(re)144 410.4 S(tur).18 E(n)-.15 E F0 .627 -(is used outside a function, b)3.127 F .628(ut during e)-.2 F -.15(xe) --.15 G .628(cution of a script by the).15 F F2(.)3.128 E F0(\()5.628 E -F2(sour)A(ce)-.18 E F0 3.128(\)c)C .628(ommand, it)-3.128 F .589 -(causes the shell to stop e)144 422.4 R -.15(xe)-.15 G .589 -(cuting that script and return either).15 F F1(n)3.448 E F0 .588 -(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e) -144 434.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F -.326(xit status of the script.)-.15 F(If)5.326 E F1(n)2.826 E F0 .326 -(is supplied, the return v)2.826 F .326(alue is)-.25 F .445 -(its least signi\214cant 8 bits.)144 446.4 R .444 -(The return status is non-zero if)5.445 F F2 -.18(re)2.944 G(tur).18 E -(n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381 -(ment, or is used outside a function and not during e)144 458.4 R -.15 -(xe)-.15 G .381(cution of a script by).15 F F2(.)2.881 E F0(or)3.714 E -F2(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15 -E .75(mand associated with the)144 470.4 R F2(RETURN)3.249 E F0 .749 -(trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15 -G .749(cution resumes after the function).15 F(or script.)144 482.4 Q F2 -(set)108 499.2 Q F0([)2.5 E F2(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C -F2-2.5 E F1(option\255name)2.5 E F0 2.5(][)C F1(ar)-2.5 E(g)-.37 E -F0(...])2.5 E F2(set)108 511.2 Q F0([)2.5 E F2(+abefhkmnptuvxBCEHPT)A F0 -2.5(][)C F2(+o)-2.5 E F1(option\255name)2.5 E F0 2.5(][)C F1(ar)-2.5 E -(g)-.37 E F0(...])2.5 E -.4(Wi)144 523.2 S .835 -(thout options, the name and v).4 F .835(alue of each shell v)-.25 F -.836(ariable are displayed in a format that can be)-.25 F .784 -(reused as input for setting or resetting the currently-set v)144 535.2 -R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .783 -(riables cannot be).25 F 2.946(reset. In)144 547.2 R F1 .447(posix mode) -2.946 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447 -(ariables are listed.)-.25 F .447 -(The output is sorted according to the current)5.447 F 3.531 -(locale. When)144 559.2 R 1.031(options are speci\214ed, the)3.531 F -3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.53(utes. An) --.2 F 3.53(ya)-.15 G -.18(rg)-3.53 G 1.03(uments remaining).18 F .584 -(after option processing are treated as v)144 571.2 R .585 -(alues for the positional parameters and are assigned, in or)-.25 F(-) --.2 E(der)144 583.2 Q 2.5(,t)-.4 G(o)-2.5 E F2($1)2.5 E F0(,)A F2($2)2.5 -E F0(,)A F2 2.5(... $)2.5 F F1(n)A F0 5(.O)C(ptions, if speci\214ed, ha) --5 E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2144 -595.2 Q F0 1.378(Each v)184 595.2 R 1.377 -(ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve) --.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.377(xport attrib)-.15 F -1.377(ute and)-.2 F(mark)184 607.2 Q(ed for e)-.1 E(xport to the en)-.15 -E(vironment of subsequent commands.)-.4 E F2144 619.2 Q F0 .131 -(Report the status of terminated background jobs immediately)184 619.2 R -2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E -(primary prompt.)184 631.2 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o) --.25 H(nly when job control is enabled.).15 E F2144 643.2 Q F0 -.088(Exit immediately if a)184 643.2 R F1(pipeline)2.588 E F0 .087 -(\(which may consist of a single)2.588 F F1 .087(simple command)2.587 F -F0 .087(\), a)B F1(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 655.2 Q -F1 1.52(compound command)4.02 F F0(\(see)4.021 E F3 1.521(SHELL GRAMMAR) -4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F 1.521 -(xits with a non-zero status.)-.15 F .08(The shell does not e)184 667.2 -R .079(xit if the command that f)-.15 F .079 -(ails is part of the command list immediately)-.1 F(follo)184 679.2 Q -1.654(wing a)-.25 F F2(while)4.154 E F0(or)4.154 E F2(until)4.154 E F0 --.1(ke)4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655 -(wing the)-.25 F F2(if)4.155 E F0(or)4.155 E F2(elif)4.155 E F0(reserv) -4.155 E(ed)-.15 E -.1(wo)184 691.2 S .582(rds, part of an).1 F 3.082(yc) --.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F2 -(&&)3.081 E F0(or)3.081 E F2(||)3.081 E F0 .581(list e)3.081 F .581 -(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 703.2 R -F2(&&)3.417 E F0(or)3.417 E F2(||)3.417 E F0 3.417(,a)C 1.217 -.15(ny c) --3.417 H .918(ommand in a pipeline b).15 F .918 -(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E --.25(va)184 715.2 S .661(lue is being in).25 F -.15(ve)-.4 G .661 -(rted with).15 F F2(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66 -(ompound command other than a subshell returns a)-3.161 F 1.112 -(non-zero status because a command f)184 727.2 R 1.112(ailed while)-.1 F -F23.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113 -(eing ignored, the shell does)-3.612 F(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(70)190.395 E 0 Cg EP +irectory stack, or rotates the stack, making the ne)144 662.4 R 3.14(wt) +-.25 G .64(op of the)-3.14 F .089(stack the current w)144 674.4 R .089 +(orking directory)-.1 F 5.089(.W)-.65 G .089(ith no ar)-5.489 F +(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.588 G .088 +(changes the top tw).15 F 2.588(oe)-.1 G .088(lements of)-2.588 F +(the directory stack.)144 686.4 Q(Ar)5 E(guments, if supplied, ha)-.18 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1144 +698.4 Q F0 1.811(Suppresses the normal change of directory when rotatin\ +g or adding directories to the)180 698.4 R +(stack, so that only the stack is manipulated.)180 710.4 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(70)185.955 E 0 Cg EP %%Page: 71 71 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .178(not e)184 84 -R 2.678(xit. A)-.15 F .178(trap on)2.678 F/F1 10/Times-Bold@0 SF(ERR) -2.678 E F0 2.678(,i)C 2.678(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe) --.15 G .178(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177 -(option applies to)2.677 F .617(the shell en)184 96 R .617 -(vironment and each subshell en)-.4 F .617(vironment separately \(see) --.4 F/F2 9/Times-Bold@0 SF .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR) -184 108 R(ONMENT)-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643 -(\), and may cause subshells to e).15 F .643(xit before e)-.15 F -.15 -(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 120 Q -.998(If a compound command or shell function e)184 138 R -.15(xe)-.15 G -.999(cutes in a conte).15 F .999(xt where)-.15 F F13.499 E F0 .999 -(is being ig-)3.499 F .089(nored, none of the commands e)184 150 R -.15 -(xe)-.15 G .089(cuted within the compound command or function body).15 F -.502(will be af)184 162 R .502(fected by the)-.25 F F13.002 E F0 -.502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1 -3.002 E F0 .502(is set and a command returns a f)3.002 F .503 -(ailure sta-)-.1 F 4.184(tus. If)184 174 R 4.184(ac)4.184 G 1.684 -(ompound command or shell function sets)-4.184 F F14.183 E F0 -1.683(while e)4.183 F -.15(xe)-.15 G 1.683(cuting in a conte).15 F(xt) --.15 E(where)184 186 Q F13.153 E F0 .653 -(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954 --.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F -(or the command containing the function call completes.)184 198 Q F1 -144 210 Q F0(Disable pathname e)184 210 Q(xpansion.)-.15 E F1 -144 222 Q F0 .988(Remember the location of commands as the)184 222 -R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F -.15(xe) --.15 G 3.488(cution. This).15 F .987(is en-)3.487 F(abled by def)184 234 -Q(ault.)-.1 E F1144 246 Q F0 .513(All ar)184 246 R .514 -(guments in the form of assignment statements are placed in the en)-.18 -F .514(vironment for a)-.4 F -(command, not just those that precede the command name.)184 258 Q F1 -144 270 Q F0 .149(Monitor mode.)184 270 R .149 -(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F -.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65 -(on systems that support it \(see)184 282 R F2 .651(JOB CONTR)3.151 F -(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651 -(processes run in a separate)3.151 F .679(process group.)184 294 R .678 -(When a background job completes, the shell prints a line containing it\ -s)5.679 F -.15(ex)184 306 S(it status.).15 E F1144 318 Q F0 .652 -(Read commands b)184 318 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652 -(cute them.).15 F .653(This may be used to check a shell script for) -5.652 F(syntax errors.)184 330 Q(This is ignored by interacti)5 E .3 --.15(ve s)-.25 H(hells.).15 E F1144 342 Q/F3 10/Times-Italic@0 SF -(option\255name)2.5 E F0(The)184 354 Q F3(option\255name)2.5 E F0 -(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 366 Q F0 -(Same as)224 378 Q F12.5 E F0(.)A F1(braceexpand)184 390 Q F0 -(Same as)224 402 Q F12.5 E F0(.)A F1(emacs)184 414 Q F0 .089 -(Use an emacs-style command line editing interf)224 414 R 2.589 -(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95 -(when the shell is interacti)224 426 R -.15(ve)-.25 G 3.45(,u).15 G .95 -(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E -F0 2.5(option. This)224 438 R(also af)2.5 E(fects the editing interf) --.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err) -184 450 Q(exit)-.18 E F0(Same as)224 450 Q F12.5 E F0(.)A F1 -(errtrace)184 462 Q F0(Same as)224 462 Q F12.5 E F0(.)A F1 -(functrace)184 474 Q F0(Same as)224 486 Q F12.5 E F0(.)A F1 -(hashall)184 498 Q F0(Same as)224 498 Q F12.5 E F0(.)A F1 -(histexpand)184 510 Q F0(Same as)224 522 Q F12.5 E F0(.)A F1 -(history)184 534 Q F0 .587(Enable command history)224 534 R 3.087(,a) --.65 G 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 -H(nder).15 E F2(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF -(.)A F0 .587(This option is)5.087 F(on by def)224 546 Q -(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 -558 Q(eeof)-.18 E F0 1.656(The ef)224 570 R 1.656 -(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10) -4.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted).15 E(\(see)224 -582 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).) -.15 E F1 -.1(ke)184 594 S(yw).1 E(ord)-.1 E F0(Same as)224 606 Q F1 -2.5 E F0(.)A F1(monitor)184 618 Q F0(Same as)224 618 Q F12.5 -E F0(.)A F1(noclob)184 630 Q(ber)-.1 E F0(Same as)224 642 Q F12.5 -E F0(.)A F1(noexec)184 654 Q F0(Same as)224 654 Q F12.5 E F0(.)A -F1(noglob)184 666 Q F0(Same as)224 666 Q F12.5 E F0(.)A F1(nolog) -184 678 Q F0(Currently ignored.)224 678 Q F1(notify)184 690 Q F0 -(Same as)224 690 Q F12.5 E F0(.)A F1(nounset)184 702 Q F0(Same as) -224 702 Q F12.5 E F0(.)A F1(onecmd)184 714 Q F0(Same as)224 714 Q -F12.5 E F0(.)A(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(71) -190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(+)144 84 Q/F2 10/Times-Italic@0 SF(n)A F0 1.268 +(Rotates the stack so that the)180 84 R F2(n)3.768 E F0 1.267 +(th directory \(counting from the left of the list sho)B 1.267(wn by) +-.25 F F1(dirs)180 96 Q F0 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F1144 108 Q F2(n)A F0 .92(Rotates the stack so that the)180 +108 R F2(n)3.42 E F0 .92 +(th directory \(counting from the right of the list sho)B .92(wn by)-.25 +F F1(dirs)180 120 Q F0 2.5(,s)C(tarting with zero\) is at the top.)-2.5 +E F2(dir)144.35 132 Q F0(Adds)180 132 Q F2(dir)2.85 E F0 +(to the directory stack at the top)3.23 E .435 +(After the stack has been modi\214ed, if the)144 148.8 R F12.935 E +F0 .434(option w)2.934 F .434(as not supplied,)-.1 F F1(pushd)2.934 E F0 +.434(uses the)2.934 F F1(cd)2.934 E F0 -.2(bu)2.934 G .434(iltin to).2 F +(change to the directory at the top of the stack.)144 160.8 Q(If the)5 E +F1(cd)2.5 E F0 -.1(fa)2.5 G(ils,).1 E F1(pushd)2.5 E F0 +(returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144 +177.6 R 1.78(guments are supplied,)-.18 F F1(pushd)4.28 E F0 1.78 +(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .093 +(When rotating the directory stack,)144 189.6 R F1(pushd)2.593 E F0 .092 +(returns 0 unless the directory stack is empty or a non-e)2.593 F(x-) +-.15 E(istent directory stack element is speci\214ed.)144 201.6 Q 1.277 +(If the)144 218.4 R F1(pushd)3.777 E F0 1.277 +(command is successful, bash runs)3.777 F F1(dirs)3.777 E F0 1.278 +(to sho)3.778 F 3.778(wt)-.25 G 1.278 +(he \214nal contents of the directory)-3.778 F(stack.)144 230.4 Q F1 +(pwd)108 247.2 Q F0([)2.5 E F1(\255LP)A F0(])A .845 +(Print the absolute pathname of the current w)144 259.2 R .845 +(orking directory)-.1 F 5.844(.T)-.65 G .844 +(he pathname printed contains no)-5.844 F .181(symbolic links if the)144 +271.2 R F12.681 E F0 .181(option is supplied or the)2.681 F F1 +.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1 +(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264 +(enabled. If)144 283.2 R(the)3.264 E F13.264 E F0 .763 +(option is used, the pathname printed may contain symbolic links.)3.264 +F .763(The return)5.763 F .405(status is 0 unless an error occurs while\ + reading the name of the current directory or an in)144 295.2 R -.25(va) +-.4 G .405(lid op-).25 F(tion is supplied.)144 307.2 Q F1 -.18(re)108 +324 S(ad).18 E F0([)3.817 E F1(\255ers)A F0 3.817(][)C F1-3.817 E +F2(aname)3.817 E F0 3.817(][)C F1-3.817 E F2(delim)3.817 E F0 +3.817(][)C F1-3.817 E F2(te)3.817 E(xt)-.2 E F0 3.817(][)C F1 +-3.817 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1 +-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1-3.816 E +F2(pr)3.816 E(ompt)-.45 E F0 3.816(][)C F1-3.816 E F2(timeout) +3.816 E F0 3.816(][)C F1-3.816 E F2(fd)3.816 E F0(])A([)108 336 Q +F2(name)A F0(...])2.5 E .516(One line is read from the standard input, \ +or from the \214le descriptor)144 348 R F2(fd)3.016 E F0 .516 +(supplied as an ar)3.016 F .517(gument to)-.18 F(the)144 360 Q F1 +2.936 E F0 .436(option, split into w)2.936 F .435(ords as described abo) +-.1 F .735 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.935 G .435 +(rd Splitting).75 F F0 2.935(,a)C .435(nd the \214rst w)-2.935 F .435 +(ord is as-)-.1 F .375(signed to the \214rst)144 372 R F2(name)3.235 E +F0 2.876(,t).18 G .376(he second w)-2.876 F .376(ord to the second)-.1 F +F2(name)3.236 E F0 2.876(,a).18 G .376(nd so on.)-2.876 F .376 +(If there are more w)5.376 F(ords)-.1 E .237 +(than names, the remaining w)144 384 R .237(ords and their interv)-.1 F +.237(ening delimiters are assigned to the last)-.15 F F2(name)3.096 E F0 +5.236(.I).18 G(f)-5.236 E .874(there are fe)144 396 R .874(wer w)-.25 F +.875(ords read from the input stream than names, the remaining names ar\ +e assigned)-.1 F .518(empty v)144 408 R 3.018(alues. The)-.25 F .518 +(characters in)3.018 F/F3 9/Times-Bold@0 SF(IFS)3.018 E F0 .518 +(are used to split the line into w)2.768 F .517 +(ords using the same rules the)-.1 F .026(shell uses for e)144 420 R +.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F1 +-.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526(\). The)B .026 +(backslash character \()2.526 F F1(\\)A F0 2.527(\)m)C(ay)-2.527 E .489 +(be used to remo)144 432 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H +.488(pecial meaning for the ne).15 F .488 +(xt character read and for line continuation.)-.15 F(Op-)5.488 E +(tions, if supplied, ha)144 444 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 456 Q F2(aname)2.5 E F0 1.025(The w) +180 468 R 1.026(ords are assigned to sequential indices of the array v) +-.1 F(ariable)-.25 E F2(aname)3.856 E F0 3.526(,s).18 G 1.026 +(tarting at 0.)-3.526 F F2(aname)180.33 480 Q F0(is unset before an)2.68 +E 2.5(yn)-.15 G .5 -.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E +F2(name)2.5 E F0(ar)2.5 E(guments are ignored.)-.18 E F1144 492 Q +F2(delim)2.5 E F0 .281(The \214rst character of)180 504 R F2(delim)2.781 +E F0 .281(is used to terminate the input line, rather than ne)2.781 F +2.78(wline. If)-.25 F F2(de-)2.78 E(lim)180 516 Q F0 +(is the empty string,)2.5 E F1 -.18(re)2.5 G(ad).18 E F0 +(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F1 +144 528 Q F0 .372 +(If the standard input is coming from a terminal,)180 528 R F1 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E +-.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E .218 +(to obtain the line.)180 540 R .218(Readline uses the current \(or def) +5.218 F .218(ault, if line editing w)-.1 F .218(as not pre)-.1 F +(viously)-.25 E(acti)180 552 Q -.15(ve)-.25 G 2.5(\)e).15 G +(diting settings, b)-2.5 E(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 +E(ault \214lename completion.)-.1 E F1144 564 Q F2(te)2.5 E(xt)-.2 +E F0(If)180 564 Q F1 -.18(re)2.715 G(adline).18 E F0 .216 +(is being used to read the line,)2.715 F F2(te)2.716 E(xt)-.2 E F0 .216 +(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-) +-.25 F(ing be)180 576 Q(gins.)-.15 E F1144 588 Q F2(nc)2.5 E(har) +-.15 E(s)-.1 E F1 -.18(re)180 600 S(ad).18 E F0 .323 +(returns after reading)2.823 F F2(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323 +(characters rather than w)2.823 F .323 +(aiting for a complete line of in-)-.1 F(put, b)180 612 Q +(ut honors a delimiter if fe)-.2 E(wer than)-.25 E F2(nc)2.5 E(har)-.15 +E(s)-.1 E F0(characters are read before the delimiter)2.5 E(.)-.55 E F1 +144 624 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 636 S(ad) +.18 E F0 1.269(returns after reading e)3.769 F(xactly)-.15 E F2(nc)3.769 +E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.27 +(aiting for a complete)-.1 F .275 +(line of input, unless EOF is encountered or)180 648 R F1 -.18(re)2.775 +G(ad).18 E F0 .274(times out.)2.774 F .274(Delimiter characters encoun-) +5.274 F 1.002 +(tered in the input are not treated specially and do not cause)180 660 R +F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc)3.503 +E(har)-.15 E(s)-.1 E F0 .609(characters are read.)180 672 R .608 +(The result is not split on the characters in)5.609 F F1(IFS)3.108 E F0 +3.108(;t)C .608(he intent is that the)-3.108 F -.25(va)180 684 S .669 +(riable is assigned e).25 F .669 +(xactly the characters read \(with the e)-.15 F .67 +(xception of backslash; see the)-.15 F F1180 696 Q F0(option belo) +2.5 E(w\).)-.25 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(71) +185.955 E 0 Cg EP %%Page: 72 72 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(ph)184 84 Q(ysical)-.15 E F0(Same as)224 84 Q F12.5 E F0(.)A F1 -(pipefail)184 96 Q F0 1.03(If set, the return v)224 96 R 1.029 -(alue of a pipeline is the v)-.25 F 1.029 -(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 108 R -1.136 -(xit with a non-zero status, or zero if all commands in the pipeline) --.15 F -.15(ex)224 120 S(it successfully).15 E 5(.T)-.65 G -(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 132 Q F0 -2.091(Change the beha)224 132 R 2.091(vior of)-.2 F F1(bash)4.591 E F0 -2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 -(fers from the)-.25 F 1.212(POSIX standard to match the standard \()224 -144 R/F2 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F3 9 -/Times-Bold@0 SF 1.212(SEE ALSO)3.712 F F0(belo)3.463 E(w)-.25 E .955 -(for a reference to a document that details ho)224 156 R 3.454(wp)-.25 G -.954(osix mode af)-3.454 F .954(fects bash')-.25 F 3.454(sb)-.55 G(e-) --3.454 E(ha)224 168 Q(vior)-.2 E(.)-.55 E F1(pri)184 180 Q(vileged)-.1 E -F0(Same as)224 192 Q F12.5 E F0(.)A F1 -.1(ve)184 204 S(rbose).1 E -F0(Same as)224 204 Q F12.5 E F0(.)A F1(vi)184 216 Q F0 .209 -(Use a vi-style command line editing interf)224 216 R 2.709(ace. This) --.1 F .209(also af)2.709 F .21(fects the editing in-)-.25 F(terf)224 228 -Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(xtrace) -184 240 Q F0(Same as)224 240 Q F12.5 E F0(.)A(If)184 258 Q F1 -3.053 E F0 .553(is supplied with no)3.053 F F2(option\255name) -3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552 -(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184 -270 Q F0 1.071(is supplied with no)3.571 F F2(option\255name)3.571 E F0 -3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072 -(commands to recreate the current)3.572 F -(option settings is displayed on the standard output.)184 282 Q F1 -144 294 Q F0 -.45(Tu)184 294 S 1.072(rn on).45 F F2(privile)4.822 E -.1 -(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F -F3($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.071 -(\214les are not pro-)3.322 F 1.5 -(cessed, shell functions are not inherited from the en)184 306 R 1.501 -(vironment, and the)-.4 F F3(SHELLOPTS)4.001 E/F4 9/Times-Roman@0 SF(,)A -F3 -.27(BA)184 318 S(SHOPTS).27 E F4(,)A F3(CDP)2.775 E -.855(AT)-.666 G -(H).855 E F4(,)A F0(and)2.775 E F3(GLOBIGNORE)3.025 E F0 -.25(va)2.775 G -.524(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F -(vironment,)-.4 E .379(are ignored.)184 330 R .379 -(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15 -(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462 -(user \(group\) id, and the)184 342 R F12.961 E F0 .461 -(option is not supplied, these actions are tak)2.961 F .461 -(en and the ef)-.1 F(fec-)-.25 E(ti)184 354 Q .694 -.15(ve u)-.25 H .394 -(ser id is set to the real user id.).15 F .395(If the)5.395 F F1 -2.895 E F0 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25 -E -.15(ve)-.25 G .387(user id is not reset.)184 366 R -.45(Tu)5.387 G -.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886 -F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F -(set to the real user and group ids.)184 378 Q F1144 390 Q F0 -(Exit after reading and e)184 390 Q -.15(xe)-.15 G(cuting one command.) -.15 E F1144 402 Q F0 -.35(Tr)184 402 S .043(eat unset v).35 F .044 -(ariables and parameters other than the special parameters "@" and "*" \ -as an)-.25 F .183(error when performing parameter e)184 414 R 2.683 -(xpansion. If)-.15 F -.15(ex)2.683 G .182 -(pansion is attempted on an unset v).15 F(ari-)-.25 E .746 -(able or parameter)184 426 R 3.246(,t)-.4 G .746 -(he shell prints an error message, and, if not interacti)-3.246 F -.15 -(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184 -438 Q F1144 450 Q F0(Print shell input lines as the)184 450 Q 2.5 -(ya)-.15 G(re read.)-2.5 E F1144 462 Q F0 .315(After e)184 462 R -.315(xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25 -(fo)2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,) -2.815 E F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184 -474 R F1 -.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F -1.236(xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0 -(follo)3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 486 Q -(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1 -144 498 Q F0 1.206(The shell performs brace e)184 498 R 1.206 -(xpansion \(see)-.15 F F1 1.205(Brace Expansion)3.705 F F0(abo)3.705 E --.15(ve)-.15 G 3.705(\). This).15 F 1.205(is on by de-)3.705 F -.1(fa) -184 510 S(ult.).1 E F1144 522 Q F0 .213(If set,)184 522 R F1(bash) -2.713 E F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F -.214(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 -2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F -3.054(tors. This)184 534 R .553(may be o)3.053 F -.15(ve)-.15 G .553 -(rridden when creating output \214les by using the redirection opera-) -.15 F(tor)184 546 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1 -144 558 Q F0 .103(If set, an)184 558 R 2.603(yt)-.15 G .103 -(rap on)-2.603 F F1(ERR)2.603 E F0 .104 -(is inherited by shell functions, command substitutions, and com-)2.603 -F .839(mands e)184 570 R -.15(xe)-.15 G .839(cuted in a subshell en).15 -F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838 -(trap is normally not inherited in)3.338 F(such cases.)184 582 Q F1 -144 594 Q F0(Enable)184 594 Q F1(!)3.031 E F0 .531 -(style history substitution.)5.531 F .531(This option is on by def)5.531 -F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 606 Q -.15 -(ve)-.25 G(.).15 E F1144 618 Q F0 .96 -(If set, the shell does not resolv)184 618 R 3.459(es)-.15 G .959 -(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959 -(cuting commands such as).15 F F1(cd)3.459 E F0 1.452 -(that change the current w)184 630 R 1.452(orking directory)-.1 F 6.452 -(.I)-.65 G 3.953(tu)-6.452 G 1.453(ses the ph)-3.953 F 1.453 -(ysical directory structure in-)-.05 F 3.335(stead. By)184 642 R(def) -3.335 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834 -(ws the logical chain of directories when performing com-)-.25 F -(mands which change the current directory)184 654 Q(.)-.65 E F1144 -666 Q F0 .89(If set, an)184 666 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1 -(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 -(are inherited by shell functions, command)3.39 F 1.932 -(substitutions, and commands e)184 678 R -.15(xe)-.15 G 1.932 -(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E -(UG)-.1 E F0(and)4.432 E F1(RETURN)184 690 Q F0 -(traps are normally not inherited in such cases.)2.5 E F1144 702 Q -F0 .4(If no ar)184 702 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401 -(his option, then the positional parameters are unset.)-2.901 F -(Otherwise,)5.401 E(the positional parameters are set to the)184 714 Q -F2(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G -(ome of them be)-2.5 E(gin with a)-.15 E F12.5 E F0(.)A -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(72)190.395 E 0 Cg EP +SF144 84 Q/F2 10/Times-Italic@0 SF(pr)2.5 E(ompt)-.45 E F0 +(Display)180 96 Q F2(pr)3.661 E(ompt)-.45 E F0 1.161(on standard error) +3.661 F 3.661(,w)-.4 G 1.161(ithout a trailing ne)-3.661 F 1.161 +(wline, before attempting to read)-.25 F(an)180 108 Q 2.5(yi)-.15 G 2.5 +(nput. The)-2.5 F +(prompt is displayed only if input is coming from a terminal.)2.5 E F1 +144 120 Q F0 .543(Backslash does not act as an escape character) +180 120 R 5.543(.T)-.55 G .544(he backslash is considered to be part of) +-5.543 F .493(the line.)180 132 R .493(In particular)5.493 F 2.993(,ab) +-.4 G(ackslash-ne)-2.993 E .493 +(wline pair may not then be used as a line continua-)-.25 F(tion.)180 +144 Q F1144 156 Q F0(Silent mode.)180 156 Q +(If input is coming from a terminal, characters are not echoed.)5 E F1 +144 168 Q F2(timeout)2.5 E F0(Cause)180 180 Q F1 -.18(re)2.928 G +(ad).18 E F0 .428(to time out and return f)2.928 F .428 +(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .561 +(ber of characters\) is not read within)180 192 R F2(timeout)3.061 E F0 +(seconds.)3.061 E F2(timeout)5.561 E F0 .56(may be a decimal number) +3.061 F(with a fractional portion follo)180 204 Q +(wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E +.3 -.15(ve i)-.25 H(f).15 E F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\ +g input from a terminal, pipe, or other special \214le; it has no ef)180 +216 R .505(fect when reading)-.25 F .589(from re)180 228 R .589 +(gular \214les.)-.15 F(If)5.589 E F1 -.18(re)3.089 G(ad).18 E F0 .589 +(times out,)3.089 F F1 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve) +-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .59 +(artial input read into the speci\214ed).15 F -.25(va)180 240 S(riable) +.25 E F2(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2(timeout)2.77 E F0 .27 +(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77 +F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G +(ata.)-2.77 E .227(The e)180 252 R .228(xit status is 0 if input is a) +-.15 F -.25(va)-.2 G .228(ilable on the speci\214ed \214le descriptor) +.25 F 2.728(,o)-.4 G 2.728(rt)-2.728 G .228(he read will re-)-2.728 F +1.225(turn EOF)180 264 R 3.725(,n)-.8 G 1.225(on-zero otherwise.)-3.725 +F 1.225(The e)6.225 F 1.225 +(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 E +(ceeded.)180 276 Q F1144 288 Q F2(fd)2.5 E F0 +(Read input from \214le descriptor)180 288 Q F2(fd)2.5 E F0(.)A .522 +(If no)144 304.8 R F2(names)3.382 E F0 .522 +(are supplied, the line read, without the ending delimiter b)3.292 F +.522(ut otherwise unmodi\214ed, is)-.2 F 1.187(assigned to the v)144 +316.8 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9 +/Times-Roman@0 SF(.)A F0 1.186(The e)5.686 F 1.186 +(xit status is zero, unless end-of-\214le is encountered,)-.15 F F1 -.18 +(re)3.686 G(ad).18 E F0 .96 +(times out \(in which case the status is greater than 128\), a v)144 +328.8 R .961(ariable assignment error \(such as as-)-.25 F .707 +(signing to a readonly v)144 340.8 R .706(ariable\) occurs, or an in) +-.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar) +.25 F .706(gument to)-.18 F F1144 352.8 Q F0(.)A F1 -.18(re)108 +369.6 S(adonly).18 E F0([)2.5 E F1(\255aAf)A F0 2.5(][)C F1-2.5 E +F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E F0 2.5(].)C(..]) +-2.5 E .77(The gi)144 381.6 R -.15(ve)-.25 G(n).15 E F2(names)3.27 E F0 +.77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25 +F F2(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.097 +(quent assignment.)144 393.6 R 1.097(If the)6.097 F F13.597 E F0 +1.097(option is supplied, the functions corresponding to the)3.597 F F2 +(names)3.596 E F0 1.096(are so)3.596 F(mark)144 405.6 Q 3.334(ed. The) +-.1 F F13.334 E F0 .834(option restricts the v)3.334 F .834 +(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) +-3.334 F F13.334 E F0 .834(option restricts the v)3.334 F(ari-) +-.25 E .777(ables to associati)144 417.6 R 1.077 -.15(ve a)-.25 H 3.277 +(rrays. If).15 F .777(both options are supplied,)3.277 F F13.277 E +F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F2(name) +3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 429.6 R -.15(ve) +-.25 G .521(n, or if the).15 F F13.021 E F0 .521 +(option is supplied, a list of all readonly names is printed.)3.021 F +.522(The other)5.521 F .295(options may be used to restrict the output \ +to a subset of the set of readonly names.)144 441.6 R(The)5.295 E F1 +2.795 E F0(option)2.795 E .786 +(causes output to be displayed in a format that may be reused as input.) +144 453.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144 +465.6 Q .718(wed by =)-.25 F F2(wor)A(d)-.37 E F0 3.218(,t)C .718(he v) +-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F2(wor) +3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in) +-5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the) +144 477.6 R F2(names)3.12 E F0 .26(is not a v)3.03 F .26(alid shell v) +-.25 F .26(ariable name, or)-.25 F F12.76 E F0 .26 +(is supplied with a)2.76 F F2(name)144.36 489.6 Q F0 +(that is not a function.)2.68 E F1 -.18(re)108 506.4 S(tur).18 E(n)-.15 +E F0([)2.5 E F2(n)A F0(])A .021(Causes a function to stop e)144 518.4 R +-.15(xe)-.15 G .021(cuting and return the v).15 F .021 +(alue speci\214ed by)-.25 F F2(n)2.88 E F0 .02(to its caller)2.76 F 5.02 +(.I)-.55 G(f)-5.02 E F2(n)2.88 E F0 .02(is omitted,)2.76 F .596 +(the return status is that of the last command e)144 530.4 R -.15(xe) +-.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E +F1 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15 +G(cuted).15 E .267(by a trap handler)144 542.4 R 2.767(,t)-.4 G .267 +(he last command used to determine the status is the last command e) +-2.767 F -.15(xe)-.15 G .267(cuted be-).15 F .02(fore the trap handler) +144 554.4 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15 +E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F1(DEB)2.52 +E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E +.886(mine the status is the last command e)144 566.4 R -.15(xe)-.15 G +.886(cuted by the trap handler before).15 F F1 -.18(re)3.385 G(tur).18 E +(n)-.15 E F0 -.1(wa)3.385 G 3.385(si).1 G -1.9 -.4(nv o)-3.385 H -.1(ke) +.4 G 3.385(d. If).1 F F1 -.18(re)144 578.4 S(tur).18 E(n)-.15 E F0 .627 +(is used outside a function, b)3.127 F .628(ut during e)-.2 F -.15(xe) +-.15 G .628(cution of a script by the).15 F F1(.)3.128 E F0(\()5.628 E +F1(sour)A(ce)-.18 E F0 3.128(\)c)C .628(ommand, it)-3.128 F .589 +(causes the shell to stop e)144 590.4 R -.15(xe)-.15 G .589 +(cuting that script and return either).15 F F2(n)3.448 E F0 .588 +(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e) +144 602.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F +.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .326 +(is supplied, the return v)2.826 F .326(alue is)-.25 F .445 +(its least signi\214cant 8 bits.)144 614.4 R .444 +(The return status is non-zero if)5.445 F F1 -.18(re)2.944 G(tur).18 E +(n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381 +(ment, or is used outside a function and not during e)144 626.4 R -.15 +(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E +F1(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15 +E .75(mand associated with the)144 638.4 R F1(RETURN)3.249 E F0 .749 +(trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15 +G .749(cution resumes after the function).15 F(or script.)144 650.4 Q F1 +(set)108 667.2 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1 +-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5 +(][)C F1-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1 +(set)108 679.2 Q F0([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o) +-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5(][)C F1 +-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 +691.2 S .573(thout options, display the name and v).4 F .573 +(alue of each shell v)-.25 F .574 +(ariable in a format that can be reused)-.25 F .113 +(as input for setting or resetting the currently-set v)144 703.2 R 2.613 +(ariables. Read-only)-.25 F -.25(va)2.613 G .113 +(riables cannot be reset.).25 F(In)5.112 E F2 1.032(posix mode)144 715.2 +R F0 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.) +-.25 F 1.032(The output is sorted according to the current locale.)6.032 +F 1.843(When options are speci\214ed, the)144 727.2 R 4.343(ys)-.15 G +1.843(et or unset shell attrib)-4.343 F 4.343(utes. An)-.2 F 4.343(ya) +-.15 G -.18(rg)-4.343 G 1.843(uments remaining after).18 F(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(72)185.955 E 0 Cg EP %%Page: 73 73 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF144 84 Q F0 .797(Signal the end of options, cause all remaining) -184 84 R/F2 10/Times-Italic@0 SF(ar)3.297 E(g)-.37 E F0 3.297(st)C 3.297 -(ob)-3.297 G 3.296(ea)-3.297 G .796(ssigned to the positional pa-)-3.296 -F 3.021(rameters. The)184 96 R F13.021 E F0(and)3.022 E F1 -3.022 E F0 .522(options are turned of)3.022 F 3.022(f. If)-.25 F .522 -(there are no)3.022 F F2(ar)3.022 E(g)-.37 E F0 .522 -(s, the positional pa-)B(rameters remain unchanged.)184 108 Q .425 -(The options are of)144 124.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef) --2.925 E .425(ault unless otherwise noted.)-.1 F .425 -(Using + rather than \255 causes these options)5.425 F .177 -(to be turned of)144 136.8 R 2.677(f. The)-.25 F .178 -(options can also be speci\214ed as ar)2.678 F .178(guments to an in) --.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066 -(current set of options may be found in)144 148.8 R F1<24ad>2.566 E F0 -5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 -(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F -(is encountered.)144 160.8 Q F1(shift)108 177.6 Q F0([)2.5 E F2(n)A F0 -(])A .428(The positional parameters from)144 189.6 R F2(n)2.928 E F0 -.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G -.429(rameters represented by the num-).15 F(bers)144 201.6 Q F1($#)2.583 -E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0A F2(n)A F0 .083 -(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga) --.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to) -.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06 -(is 0, no parameters are changed.)144 213.6 R(If)5.06 E F2(n)2.92 E F0 -.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F -(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 -(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 225.6 R -.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0 -.143(is greater than)2.883 F F1($#)2.643 E F0 -(or less than zero; otherwise 0.)144 237.6 Q F1(shopt)108 254.4 Q F0([) -2.5 E F1(\255pqsu)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(optname) --2.5 E F0(...])2.5 E -.8(To)144 266.4 S .639(ggle the v).8 F .639 -(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E -5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375 -(listed belo)144 278.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H -2.875(ft).4 G(he)-2.875 E F12.875 E F0 .375 -(option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 -F F12.875 E F0 .374(option to the)2.875 F F1(set)2.874 E F0 -.2 -(bu)2.874 G .374(iltin com-).2 F 2.565(mand. W)144 290.4 R .065 -(ith no options, or with the)-.4 F F12.566 E F0 .066 -(option, a list of all settable options is displayed, with an in-)2.566 -F .074(dication of whether or not each is set; if)144 302.4 R F2 -(optnames)2.574 E F0 .074 -(are supplied, the output is restricted to those op-)2.574 F 3.105 -(tions. The)144 314.4 R F13.105 E F0 .605(option causes output to\ - be displayed in a form that may be reused as input.)3.105 F(Other)5.605 -E(options ha)144 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E F1144 338.4 Q F0(Enable \(set\) each)180 -338.4 Q F2(optname)2.5 E F0(.)A F1144 350.4 Q F0 -(Disable \(unset\) each)180 350.4 Q F2(optname)2.5 E F0(.)A F1144 -362.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\ -tus indicates whether the)180 362.4 R F2(optname)2.503 E F0(is)2.503 E -.255(set or unset.)180 374.4 R .255(If multiple)5.255 F F2(optname)2.755 -E F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G -(ith)-2.756 E F12.756 E F0 2.756(,t)C .256 -(he return status is zero if)-2.756 F(all)180 386.4 Q F2(optnames)2.5 E -F0(are enabled; non-zero otherwise.)2.5 E F1144 398.4 Q F0 -(Restricts the v)180 398.4 Q(alues of)-.25 E F2(optname)2.5 E F0 -(to be those de\214ned for the)2.5 E F12.5 E F0(option to the)2.5 -E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 415.2 R F1 -3.125 E F0(or)3.124 E F13.124 E F0 .624(is used with no) -3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124 -E F0(sho)3.124 E .624(ws only those options which are)-.25 F .983 -(set or unset, respecti)144 427.2 R -.15(ve)-.25 G(ly).15 E 5.983(.U) --.65 G .983(nless otherwise noted, the)-5.983 F F1(shopt)3.484 E F0 .984 -(options are disabled \(unset\) by de-)3.484 F -.1(fa)144 439.2 S(ult.) -.1 E 1.544(The return status when listing options is zero if all)144 456 -R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)4.044 F -.696 -(When setting or unsetting options, the return status is zero unless an) -144 468 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell) --.25 F(option.)144 480 Q(The list of)144 496.8 Q F1(shopt)2.5 E F0 -(options is:)2.5 E F1(assoc_expand_once)144 514.8 Q F0 1.945 -(If set, the shell suppresses multiple e)184 526.8 R -.25(va)-.25 G -1.944(luation of associati).25 F 2.244 -.15(ve a)-.25 H 1.944 -(rray subscripts during).15 F .885(arithmetic e)184 538.8 R .885 -(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe) --.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885 -(ariable as-)-.25 F(signments, and while e)184 550.8 Q -.15(xe)-.15 G -(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1 -(autocd)144 562.8 Q F0 .2 -(If set, a command name that is the name of a directory is e)184 562.8 R --.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E -(ment to the)184 574.8 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F -(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E -F1(cdable_v)144 586.8 Q(ars)-.1 E F0 .155(If set, an ar)184 598.8 R .155 -(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156 -(iltin command that is not a directory is assumed to be the).2 F -(name of a v)184 610.8 Q(ariable whose v)-.25 E -(alue is the directory to change to.)-.25 E F1(cdspell)144 622.8 Q F0 -1.055 -(If set, minor errors in the spelling of a directory component in a)184 -622.8 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987 -(corrected. The)184 634.8 R 1.487(errors check)3.987 F 1.487 -(ed for are transposed characters, a missing character)-.1 F 3.988(,a) --.4 G(nd)-3.988 E .77(one character too man)184 646.8 R 4.57 -.65(y. I) --.15 H 3.27(fac).65 G .77 -(orrection is found, the corrected \214lename is printed, and)-3.27 F -(the command proceeds.)184 658.8 Q -(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.) -.15 E F1(checkhash)144 670.8 Q F0 .736(If set,)184 682.8 R F1(bash)3.236 -E F0 .736(checks that a command found in the hash table e)3.236 F .737 -(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 -694.8 Q(If a hashed command no longer e)5 E -(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 706.8 -Q F0 .449(If set,)184 718.8 R F1(bash)2.949 E F0 .449 -(lists the status of an)2.949 F 2.949(ys)-.15 G .448 -(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15 -F -.15(ve)-.25 G 3.438(shell. If)184 730.8 R(an)3.438 E 3.438(yj)-.15 G -.938(obs are running, this causes the e)-3.438 F .938 -(xit to be deferred until a second e)-.15 F .939(xit is)-.15 F -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(73)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .504 +(option processing are treated as v)144 84 R .505 +(alues for the positional parameters and are assigned, in order)-.25 F +3.005(,t)-.4 G(o)-3.005 E/F1 10/Times-Bold@0 SF($1)144 96 Q F0(,)A F1 +($2)2.5 E F0(,)A F1 2.5(... $)2.5 F/F2 10/Times-Italic@0 SF(n)A F0 5(.O) +C(ptions, if speci\214ed, ha)-5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 108 Q F0 1.378(Each v)184 108 R 1.377 +(ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve) +-.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.377(xport attrib)-.15 F +1.377(ute and)-.2 F(mark)184 120 Q(ed for e)-.1 E(xport to the en)-.15 E +(vironment of subsequent commands.)-.4 E F1144 132 Q F0 .131 +(Report the status of terminated background jobs immediately)184 132 R +2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E +(primary prompt.)184 144 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25 +H(nly when job control is enabled.).15 E F1144 156 Q F0 .088 +(Exit immediately if a)184 156 R F2(pipeline)2.588 E F0 .087 +(\(which may consist of a single)2.588 F F2 .087(simple command)2.587 F +F0 .087(\), a)B F2(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 168 Q F2 +1.52(compound command)4.02 F F0(\(see)4.021 E/F3 9/Times-Bold@0 SF 1.521 +(SHELL GRAMMAR)4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F +1.521(xits with a non-zero status.)-.15 F .08(The shell does not e)184 +180 R .079(xit if the command that f)-.15 F .079 +(ails is part of the command list immediately)-.1 F(follo)184 192 Q +1.654(wing a)-.25 F F1(while)4.154 E F0(or)4.154 E F1(until)4.154 E F0 +-.1(ke)4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655 +(wing the)-.25 F F1(if)4.155 E F0(or)4.155 E F1(elif)4.155 E F0(reserv) +4.155 E(ed)-.15 E -.1(wo)184 204 S .582(rds, part of an).1 F 3.082(yc) +-.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F1 +(&&)3.081 E F0(or)3.081 E F1(||)3.081 E F0 .581(list e)3.081 F .581 +(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 216 R +F1(&&)3.417 E F0(or)3.417 E F1(||)3.417 E F0 3.417(,a)C 1.217 -.15(ny c) +-3.417 H .918(ommand in a pipeline b).15 F .918 +(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E +-.25(va)184 228 S .661(lue is being in).25 F -.15(ve)-.4 G .661 +(rted with).15 F F1(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66 +(ompound command other than a subshell returns a)-3.161 F 1.112 +(non-zero status because a command f)184 240 R 1.112(ailed while)-.1 F +F13.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113 +(eing ignored, the shell does)-3.612 F .178(not e)184 252 R 2.678 +(xit. A)-.15 F .178(trap on)2.678 F F1(ERR)2.678 E F0 2.678(,i)C 2.678 +(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178 +(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177 +(option applies to)2.677 F .617(the shell en)184 264 R .617 +(vironment and each subshell en)-.4 F .617(vironment separately \(see) +-.4 F F3 .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR)184 276 R(ONMENT) +-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643 +(\), and may cause subshells to e).15 F .643(xit before e)-.15 F -.15 +(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 288 Q +.998(If a compound command or shell function e)184 306 R -.15(xe)-.15 G +.999(cutes in a conte).15 F .999(xt where)-.15 F F13.499 E F0 .999 +(is being ig-)3.499 F .089(nored, none of the commands e)184 318 R -.15 +(xe)-.15 G .089(cuted within the compound command or function body).15 F +.502(will be af)184 330 R .502(fected by the)-.25 F F13.002 E F0 +.502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1 +3.002 E F0 .502(is set and a command returns a f)3.002 F .503 +(ailure sta-)-.1 F 4.184(tus. If)184 342 R 4.184(ac)4.184 G 1.684 +(ompound command or shell function sets)-4.184 F F14.183 E F0 +1.683(while e)4.183 F -.15(xe)-.15 G 1.683(cuting in a conte).15 F(xt) +-.15 E(where)184 354 Q F13.153 E F0 .653 +(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954 +-.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F +(or the command containing the function call completes.)184 366 Q F1 +144 378 Q F0(Disable pathname e)184 378 Q(xpansion.)-.15 E F1 +144 390 Q F0 .988(Remember the location of commands as the)184 390 +R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F -.15(xe) +-.15 G 3.488(cution. This).15 F .987(is en-)3.487 F(abled by def)184 402 +Q(ault.)-.1 E F1144 414 Q F0 .513(All ar)184 414 R .514 +(guments in the form of assignment statements are placed in the en)-.18 +F .514(vironment for a)-.4 F +(command, not just those that precede the command name.)184 426 Q F1 +144 438 Q F0 .149(Monitor mode.)184 438 R .149 +(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F +.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65 +(on systems that support it \(see)184 450 R F3 .651(JOB CONTR)3.151 F +(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651 +(processes run in a separate)3.151 F .679(process group.)184 462 R .678 +(When a background job completes, the shell prints a line containing it\ +s)5.679 F -.15(ex)184 474 S(it status.).15 E F1144 486 Q F0 .652 +(Read commands b)184 486 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652 +(cute them.).15 F .653(This may be used to check a shell script for) +5.652 F(syntax errors.)184 498 Q(This is ignored by interacti)5 E .3 +-.15(ve s)-.25 H(hells.).15 E F1144 510 Q F2(option\255name)2.5 E +F0(The)184 522 Q F2(option\255name)2.5 E F0(can be one of the follo)2.5 +E(wing:)-.25 E F1(allexport)184 534 Q F0(Same as)224 546 Q F12.5 E +F0(.)A F1(braceexpand)184 558 Q F0(Same as)224 570 Q F12.5 E F0(.) +A F1(emacs)184 582 Q F0 .089 +(Use an emacs-style command line editing interf)224 582 R 2.589 +(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95 +(when the shell is interacti)224 594 R -.15(ve)-.25 G 3.45(,u).15 G .95 +(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E +F0 2.5(option. This)224 606 R(also af)2.5 E(fects the editing interf) +-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err) +184 618 Q(exit)-.18 E F0(Same as)224 618 Q F12.5 E F0(.)A F1 +(errtrace)184 630 Q F0(Same as)224 630 Q F12.5 E F0(.)A F1 +(functrace)184 642 Q F0(Same as)224 654 Q F12.5 E F0(.)A F1 +(hashall)184 666 Q F0(Same as)224 666 Q F12.5 E F0(.)A F1 +(histexpand)184 678 Q F0(Same as)224 690 Q F12.5 E F0(.)A F1 +(history)184 702 Q F0 .587(Enable command history)224 702 R 3.087(,a) +-.65 G 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 +H(nder).15 E F3(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF +(.)A F0 .587(This option is)5.087 F(on by def)224 714 Q +(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(73)185.955 E 0 Cg EP %%Page: 74 74 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .817 -(attempted without an interv)184 84 R .817(ening command \(see)-.15 F/F1 -9/Times-Bold@0 SF .816(JOB CONTR)3.316 F(OL)-.27 E F0(abo)3.066 E -.15 -(ve)-.15 G 3.316(\). The).15 F .816(shell al-)3.316 F -.1(wa)184 96 S -(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G(obs are stopped.) --2.5 E/F2 10/Times-Bold@0 SF(checkwinsize)144 108 Q F0 1.09(If set,)184 -120 R F2(bash)3.59 E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09 -(ize after each e)-3.59 F 1.09(xternal \(non-b)-.15 F 1.09 -(uiltin\) command and, if)-.2 F(necessary)184 132 Q 3.351(,u)-.65 G .851 -(pdates the v)-3.351 F .85(alues of)-.25 F F1(LINES)3.35 E F0(and)3.1 E -F1(COLUMNS)3.35 E/F3 9/Times-Roman@0 SF(.)A F0 .85 -(This option is enabled by de-)5.35 F -.1(fa)184 144 S(ult.).1 E F2 -(cmdhist)144 156 Q F0 .172(If set,)184 156 R F2(bash)2.672 E F0 .172 -(attempts to sa)2.672 F .472 -.15(ve a)-.2 H .173 -(ll lines of a multiple-line command in the same history en-).15 F(try) -184 168 Q 5.597(.T)-.65 G .597(his allo)-5.597 F .597 -(ws easy re-editing of multi-line commands.)-.25 F .597 -(This option is enabled by de-)5.597 F -.1(fa)184 180 S 1.287(ult, b).1 -F 1.288(ut only has an ef)-.2 F 1.288 -(fect if command history is enabled, as described abo)-.25 F 1.588 -.15 -(ve u)-.15 H(nder).15 E F1(HIST)184 192 Q(OR)-.162 E(Y)-.315 E F3(.)A F2 -(compat31)144 204 Q(compat32)144 216 Q(compat40)144 228 Q(compat41)144 -240 Q(compat42)144 252 Q(compat43)144 264 Q(compat44)144 276 Q F0 .889 -(These control aspects of the shell')184 288 R 3.389(sc)-.55 G .889 -(ompatibility mode \(see)-3.389 F F1 .889(SHELL COMP)3.389 F -.855(AT) --.666 G(IBILITY).855 E(MODE)184 300 Q F0(belo)2.25 E(w\).)-.25 E F2 -(complete_fullquote)144 316.8 Q F0 .653(If set,)184 328.8 R F2(bash) -3.153 E F0 .653(quotes all shell metacharacters in \214lenames and dire\ -ctory names when per)3.153 F(-)-.2 E 1.525(forming completion.)184 340.8 -R 1.524(If not set,)6.525 F F2(bash)4.024 E F0(remo)4.024 E -.15(ve)-.15 -G 4.024(sm).15 G 1.524(etacharacters such as the dollar sign)-4.024 F -2.667(from the set of characters that will be quoted in completed \214l\ -enames when these)184 352.8 R .029(metacharacters appear in shell v)184 -364.8 R .028(ariable references in w)-.25 F .028(ords to be completed.) --.1 F .028(This means)5.028 F 1.072(that dollar signs in v)184 376.8 R -1.073(ariable names that e)-.25 F 1.073 -(xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25 -(ev e)184 388.8 T 1.923 -.4(r, a).25 H 1.423 -.15(ny d).4 H 1.123 -(ollar signs appearing in \214lenames will not be quoted, either).15 F -6.123(.T)-.55 G 1.122(his is acti)-6.123 F -.15(ve)-.25 G .59 -(only when bash is using backslashes to quote completed \214lenames.)184 -400.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 412.8 Q -(ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E -(ersions through 4.2.)-.15 E F2(dir)144 429.6 Q(expand)-.18 E F0 .487 -(If set,)184 441.6 R F2(bash)2.987 E F0 .486 -(replaces directory names with the results of w)2.986 F .486(ord e)-.1 F -.486(xpansion when perform-)-.15 F .179(ing \214lename completion.)184 -453.6 R .179(This changes the contents of the readline editing b)5.179 F -(uf)-.2 E(fer)-.25 E 5.18(.I)-.55 G 2.68(fn)-5.18 G(ot)-2.68 E(set,)184 -465.6 Q F2(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G -(hat the user typed.)-2.5 E F2(dirspell)144 482.4 Q F0 .859(If set,)184 -482.4 R F2(bash)3.359 E F0 .858 -(attempts spelling correction on directory names during w)3.359 F .858 -(ord completion if)-.1 F -(the directory name initially supplied does not e)184 494.4 Q(xist.)-.15 -E F2(dotglob)144 511.2 Q F0 .165(If set,)184 511.2 R F2(bash)2.665 E F0 -.165(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665 -('i)-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F -(xpansion.)-.15 E(The \214lenames)184 523.2 Q F2 -.63(``)2.5 G -.55(.') -.63 G(')-.08 E F0(and)5 E F2 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0 -(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5 -(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F2(dotglob)2.5 E F0 -(is set.)2.5 E F2(execfail)144 540 Q F0 .517(If set, a non-interacti)184 -540 R .817 -.15(ve s)-.25 H .517(hell will not e).15 F .516 -(xit if it cannot e)-.15 F -.15(xe)-.15 G .516 -(cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the)184 -552 Q F2(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E -.3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F2(exec)2.5 E F0 --.1(fa)2.5 G(ils.).1 E F2(expand_aliases)144 568.8 Q F0 .716 -(If set, aliases are e)184 580.8 R .717(xpanded as described abo)-.15 F -1.017 -.15(ve u)-.15 H(nder).15 E F1(ALIASES)3.217 E F3(.)A F0 .717 -(This option is enabled)5.217 F(by def)184 592.8 Q(ault for interacti) --.1 E .3 -.15(ve s)-.25 H(hells.).15 E F2(extdeb)144 609.6 Q(ug)-.2 E F0 -.17(If set at shell in)184 621.6 R -.2(vo)-.4 G .17 -(cation, or in a shell startup \214le, arrange to e).2 F -.15(xe)-.15 G -.17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.081 -(before the shell starts, identical to the)184 633.6 R F2 -3.582 E(ugger)-.2 E F0 3.582(option. If)3.582 F 1.082(set after in)3.582 -F -.2(vo)-.4 G 1.082(cation, be-).2 F(ha)184 645.6 Q -(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F2(1.)184 -662.4 Q F0(The)220 662.4 Q F24.251 E F0 1.751(option to the)4.251 -F F2(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751 -(iltin displays the source \214le name and line).2 F -(number corresponding to each function name supplied as an ar)220 674.4 -Q(gument.)-.18 E F2(2.)184 691.2 Q F0 1.667(If the command run by the) -220 691.2 R F2(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v) -4.167 F 1.667(alue, the ne)-.25 F(xt)-.15 E -(command is skipped and not e)220 703.2 Q -.15(xe)-.15 G(cuted.).15 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(74)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(ignor)184 84 Q(eeof)-.18 E F0 1.656(The ef)224 96 R 1.656 +(fect is as if the shell command)-.25 F/F2 10/Courier@0 SF(IGNOREEOF=10) +4.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted).15 E(\(see)224 +108 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).) +.15 E F1 -.1(ke)184 120 S(yw).1 E(ord)-.1 E F0(Same as)224 132 Q F1 +2.5 E F0(.)A F1(monitor)184 144 Q F0(Same as)224 144 Q F12.5 +E F0(.)A F1(noclob)184 156 Q(ber)-.1 E F0(Same as)224 168 Q F12.5 +E F0(.)A F1(noexec)184 180 Q F0(Same as)224 180 Q F12.5 E F0(.)A +F1(noglob)184 192 Q F0(Same as)224 192 Q F12.5 E F0(.)A F1(nolog) +184 204 Q F0(Currently ignored.)224 204 Q F1(notify)184 216 Q F0 +(Same as)224 216 Q F12.5 E F0(.)A F1(nounset)184 228 Q F0(Same as) +224 228 Q F12.5 E F0(.)A F1(onecmd)184 240 Q F0(Same as)224 240 Q +F12.5 E F0(.)A F1(ph)184 252 Q(ysical)-.15 E F0(Same as)224 252 Q +F12.5 E F0(.)A F1(pipefail)184 264 Q F0 1.03(If set, the return v) +224 264 R 1.029(alue of a pipeline is the v)-.25 F 1.029 +(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 276 R +1.136 +(xit with a non-zero status, or zero if all commands in the pipeline) +-.15 F -.15(ex)224 288 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 300 Q F0 +2.091(Change the beha)224 300 R 2.091(vior of)-.2 F F1(bash)4.591 E F0 +2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 +(fers from the)-.25 F 1.212(POSIX standard to match the standard \()224 +312 R/F3 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F4 9 +/Times-Bold@0 SF 1.212(SEE ALSO)3.712 F F0(belo)3.463 E(w)-.25 E .955 +(for a reference to a document that details ho)224 324 R 3.454(wp)-.25 G +.954(osix mode af)-3.454 F .954(fects bash')-.25 F 3.454(sb)-.55 G(e-) +-3.454 E(ha)224 336 Q(vior)-.2 E(.)-.55 E F1(pri)184 348 Q(vileged)-.1 E +F0(Same as)224 360 Q F12.5 E F0(.)A F1 -.1(ve)184 372 S(rbose).1 E +F0(Same as)224 372 Q F12.5 E F0(.)A F1(vi)184 384 Q F0 .209 +(Use a vi-style command line editing interf)224 384 R 2.709(ace. This) +-.1 F .209(also af)2.709 F .21(fects the editing in-)-.25 F(terf)224 396 +Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(xtrace) +184 408 Q F0(Same as)224 408 Q F12.5 E F0(.)A(If)184 426 Q F1 +3.053 E F0 .553(is supplied with no)3.053 F F3(option\255name) +3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552 +(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184 +438 Q F0 1.071(is supplied with no)3.571 F F3(option\255name)3.571 E F0 +3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072 +(commands to recreate the current)3.572 F +(option settings is displayed on the standard output.)184 450 Q F1 +144 462 Q F0 -.45(Tu)184 462 S 1.072(rn on).45 F F3(privile)4.822 E -.1 +(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F +F4($ENV)3.572 E F0(and)3.322 E F4($B)3.572 E(ASH_ENV)-.27 E F0 1.071 +(\214les are not pro-)3.322 F 1.5 +(cessed, shell functions are not inherited from the en)184 474 R 1.501 +(vironment, and the)-.4 F F4(SHELLOPTS)4.001 E/F5 9/Times-Roman@0 SF(,)A +F4 -.27(BA)184 486 S(SHOPTS).27 E F5(,)A F4(CDP)2.775 E -.855(AT)-.666 G +(H).855 E F5(,)A F0(and)2.775 E F4(GLOBIGNORE)3.025 E F0 -.25(va)2.775 G +.524(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F +(vironment,)-.4 E .379(are ignored.)184 498 R .379 +(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15 +(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462 +(user \(group\) id, and the)184 510 R F12.961 E F0 .461 +(option is not supplied, these actions are tak)2.961 F .461 +(en and the ef)-.1 F(fec-)-.25 E(ti)184 522 Q .694 -.15(ve u)-.25 H .394 +(ser id is set to the real user id.).15 F .395(If the)5.395 F F1 +2.895 E F0 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25 +E -.15(ve)-.25 G .387(user id is not reset.)184 534 R -.45(Tu)5.387 G +.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886 +F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F +(set to the real user and group ids.)184 546 Q F1144 558 Q F0 +(Enable restricted shell mode.)184 558 Q +(This option cannot be unset once it has been set.)5 E F1144 570 Q +F0(Exit after reading and e)184 570 Q -.15(xe)-.15 G +(cuting one command.).15 E F1144 582 Q F0 -.35(Tr)184 582 S .773 +(eat unset v).35 F .773(ariables and parameters other than the special \ +parameters "@" and "*", or)-.25 F .46(array v)184 594 R .459(ariables s\ +ubscripted with "@" or "*", as an error when performing parameter e)-.25 +F(x-)-.15 E 2.89(pansion. If)184 606 R -.15(ex)2.89 G .391 +(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25 +F 2.891(,t)-.4 G .391(he shell prints an)-2.891 F +(error message, and, if not interacti)184 618 Q -.15(ve)-.25 G 2.5(,e) +.15 G(xits with a non-zero status.)-2.65 E F1144 630 Q F0 +(Print shell input lines as the)184 630 Q 2.5(ya)-.15 G(re read.)-2.5 E +F1144 642 Q F0 .315(After e)184 642 R .315(xpanding each)-.15 F F3 +.315(simple command)2.815 F F0(,)A F1 -.25(fo)2.815 G(r).25 E F0 +(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E F1(select)2.815 E +F0(command,)2.815 E 1.235(or arithmetic)184 654 R F1 -.25(fo)3.736 G(r) +.25 E F0 1.236(command, display the e)3.736 F 1.236(xpanded v)-.15 F +1.236(alue of)-.25 F F4(PS4)3.736 E F5(,)A F0(follo)3.486 E 1.236 +(wed by the com-)-.25 F(mand and its e)184 666 Q(xpanded ar)-.15 E +(guments or associated w)-.18 E(ord list.)-.1 E F1144 678 Q F0 +1.206(The shell performs brace e)184 678 R 1.206(xpansion \(see)-.15 F +F1 1.205(Brace Expansion)3.705 F F0(abo)3.705 E -.15(ve)-.15 G 3.705 +(\). This).15 F 1.205(is on by de-)3.705 F -.1(fa)184 690 S(ult.).1 E F1 +144 702 Q F0 .213(If set,)184 702 R F1(bash)2.713 E F0 .213 +(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214 +(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 +2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F +3.054(tors. This)184 714 R .553(may be o)3.053 F -.15(ve)-.15 G .553 +(rridden when creating output \214les by using the redirection opera-) +.15 F(tor)184 726 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(74)185.955 E 0 Cg EP %%Page: 75 75 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(3.)184 84 Q F0 .841(If the command run by the)220 84 R F1(DEB)3.341 E -(UG)-.1 E F0 .841(trap returns a v)3.341 F .84 -(alue of 2, and the shell is)-.25 F -.15(exe)220 96 S .488 -(cuting in a subroutine \(a shell function or a shell script e).15 F --.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 -(sour)220 108 Q(ce)-.18 E F0 -.2(bu)2.5 G -(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E -(n)-.15 E F0(.)A F1(4.)184 124.8 Q/F2 9/Times-Bold@0 SF -.27(BA)220 -124.8 S(SH_ARGC).27 E F0(and)3.154 E F2 -.27(BA)3.404 G(SH_ARGV).27 E F0 -.904(are updated as described in their descriptions)3.154 F(abo)220 -136.8 Q -.15(ve)-.15 G(.).15 E F1(5.)184 153.6 Q F0 1.637(Function trac\ -ing is enabled: command substitution, shell functions, and sub-)220 -153.6 R(shells in)220 165.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith) --2.5 E F1(\()2.5 E/F3 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0 -(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0 -(traps.)2.5 E F1(6.)184 182.4 Q F0 1.082(Error tracing is enabled: comm\ -and substitution, shell functions, and subshells)220 182.4 R(in)220 -194.4 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3 -(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.) -2.5 E F1(extglob)144 211.2 Q F0 .4(If set, the e)184 211.2 R .4 -(xtended pattern matching features described abo)-.15 F .7 -.15(ve u) --.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 223.2 Q -F0(are enabled.)2.5 E F1(extquote)144 240 Q F0 .86(If set,)184 252 R F1 -($)3.36 E F0<08>A F3(string)A F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0 -(")A F3(string)A F0 3.36("q)C .86(uoting is performed within)-3.36 F F1 -(${)3.36 E F3(par)A(ameter)-.15 E F1(})A F0 -.15(ex)3.36 G .86 -(pansions en-).15 F(closed in double quotes.)184 264 Q -(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 280.8 Q -F0 .242(If set, patterns which f)184 280.8 R .243 -(ail to match \214lenames during pathname e)-.1 F .243 -(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 292.8 Q(.) --.55 E F1 -.25(fo)144 309.6 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 -.937(If set, the suf)184 321.6 R<8c78>-.25 E .936(es speci\214ed by the) --.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w) --.25 F .936(ords to be ignored)-.1 F .32(when performing w)184 333.6 R -.32(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G -.32(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.948 -(pletions. See)184 345.6 R F2 .448(SHELL V)2.948 F(ARIABLES)-1.215 E F0 -(abo)2.698 E .748 -.15(ve f)-.15 H .448(or a description of).15 F F2 -(FIGNORE)2.947 E/F4 9/Times-Roman@0 SF(.)A F0 .447(This option is)4.947 -F(enabled by def)184 357.6 Q(ault.)-.1 E F1(globasciiranges)144 374.4 Q -F0 2.518(If set, range e)184 386.4 R 2.519 -(xpressions used in pattern matching brack)-.15 F 2.519(et e)-.1 F 2.519 -(xpressions \(see)-.15 F F2 -.09(Pa)5.019 G(tter).09 E(n)-.135 E -(Matching)184 398.4 Q F0(abo)2.965 E -.15(ve)-.15 G 3.215(\)b).15 G(eha) --3.215 E 1.015 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214 G 3.214 -(nt)-3.214 G .714(he traditional C locale when performing comparisons.) --3.214 F 1.02(That is, the current locale')184 410.4 R 3.52(sc)-.55 G -1.02(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F -F1(b)3.52 E F0 1.02(will not)3.52 F .957(collate between)184 422.4 R F1 -(A)3.457 E F0(and)3.457 E F1(B)3.457 E F0 3.457(,a)C .957(nd upper) --3.457 F .957(-case and lo)-.2 F(wer)-.25 E .956 -(-case ASCII characters will collate)-.2 F(together)184 434.4 Q(.)-.55 E -F1(globstar)144 451.2 Q F0 .518(If set, the pattern)184 451.2 R F1(**) -3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F -.519(xt will match all \214les and zero)-.15 F .432 -(or more directories and subdirectories.)184 463.2 R .431 -(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0 -2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184 -475.2 Q F1(gnu_errfmt)144 492 Q F0(If set, shell error messages are wri\ -tten in the standard GNU error message format.)184 504 Q F1(histappend) -144 520.8 Q F0 .676 -(If set, the history list is appended to the \214le named by the v)184 -532.8 R .676(alue of the)-.25 F F2(HISTFILE)3.177 E F0 -.25(va)2.927 G -(ri-).25 E(able when the shell e)184 544.8 Q(xits, rather than o)-.15 E --.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 561.6 Q(eedit) --.18 E F0 .576(If set, and)184 573.6 R F1 -.18(re)3.076 G(adline).18 E -F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 -G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F -(tory substitution.)184 585.6 Q F1(histv)144 602.4 Q(erify)-.1 E F0 .402 -(If set, and)184 614.4 R F1 -.18(re)2.903 G(adline).18 E F0 .403 -(is being used, the results of history substitution are not immediately) -2.903 F .662(passed to the shell parser)184 626.4 R 5.662(.I)-.55 G .661 -(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 -G(adline).18 E F0(editing)3.161 E -.2(bu)184 638.4 S -.25(ff).2 G(er).25 -E 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 -(hostcomplete)144 655.2 Q F0 1.181(If set, and)184 667.2 R F1 -.18(re) -3.681 G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 -1.182(will attempt to perform hostname completion)3.682 F 1.381 -(when a w)184 679.2 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381 -(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E -F2(READLINE)3.88 E F0(abo)184 691.2 Q -.15(ve)-.15 G 2.5(\). This).15 F -(is enabled by def)2.5 E(ault.)-.1 E(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(75)190.395 E 0 Cg EP +SF144 84 Q F0 .103(If set, an)184 84 R 2.603(yt)-.15 G .103 +(rap on)-2.603 F F1(ERR)2.603 E F0 .104 +(is inherited by shell functions, command substitutions, and com-)2.603 +F .839(mands e)184 96 R -.15(xe)-.15 G .839(cuted in a subshell en).15 F +3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838 +(trap is normally not inherited in)3.338 F(such cases.)184 108 Q F1 +144 120 Q F0(Enable)184 120 Q F1(!)3.031 E F0 .531 +(style history substitution.)5.531 F .531(This option is on by def)5.531 +F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 132 Q -.15 +(ve)-.25 G(.).15 E F1144 144 Q F0 .96 +(If set, the shell does not resolv)184 144 R 3.459(es)-.15 G .959 +(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959 +(cuting commands such as).15 F F1(cd)3.459 E F0 1.452 +(that change the current w)184 156 R 1.452(orking directory)-.1 F 6.452 +(.I)-.65 G 3.953(tu)-6.452 G 1.453(ses the ph)-3.953 F 1.453 +(ysical directory structure in-)-.05 F 3.335(stead. By)184 168 R(def) +3.335 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834 +(ws the logical chain of directories when performing com-)-.25 F +(mands which change the current directory)184 180 Q(.)-.65 E F1144 +192 Q F0 .89(If set, an)184 192 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1 +(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 +(are inherited by shell functions, command)3.39 F 1.932 +(substitutions, and commands e)184 204 R -.15(xe)-.15 G 1.932 +(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E +(UG)-.1 E F0(and)4.432 E F1(RETURN)184 216 Q F0 +(traps are normally not inherited in such cases.)2.5 E F1144 228 Q +F0 .4(If no ar)184 228 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401 +(his option, then the positional parameters are unset.)-2.901 F +(Otherwise,)5.401 E(the positional parameters are set to the)184 240 Q +/F2 10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F1 +2.5 E F0(.)A F1144 252 Q F0 .797 +(Signal the end of options, cause all remaining)184 252 R F2(ar)3.297 E +(g)-.37 E F0 3.297(st)C 3.297(ob)-3.297 G 3.296(ea)-3.297 G .796 +(ssigned to the positional pa-)-3.296 F 3.021(rameters. The)184 264 R F1 +3.021 E F0(and)3.022 E F13.022 E F0 .522 +(options are turned of)3.022 F 3.022(f. If)-.25 F .522(there are no) +3.022 F F2(ar)3.022 E(g)-.37 E F0 .522(s, the positional pa-)B +(rameters remain unchanged.)184 276 Q .425(The options are of)144 292.8 +R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 +(ault unless otherwise noted.)-.1 F .425 +(Using + rather than \255 causes these options)5.425 F .177 +(to be turned of)144 304.8 R 2.677(f. The)-.25 F .178 +(options can also be speci\214ed as ar)2.678 F .178(guments to an in) +-.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066 +(current set of options may be found in)144 316.8 R F1<24ad>2.566 E F0 +5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 +(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F +(is encountered.)144 328.8 Q F1(shift)108 345.6 Q F0([)2.5 E F2(n)A F0 +(])A .428(The positional parameters from)144 357.6 R F2(n)2.928 E F0 +.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G +.429(rameters represented by the num-).15 F(bers)144 369.6 Q F1($#)2.583 +E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0A F2(n)A F0 .083 +(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga) +-.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to) +.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06 +(is 0, no parameters are changed.)144 381.6 R(If)5.06 E F2(n)2.92 E F0 +.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F +(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 +(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 393.6 R +.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0 +.143(is greater than)2.883 F F1($#)2.643 E F0 +(or less than zero; otherwise 0.)144 405.6 Q F1(shopt)108 422.4 Q F0([) +2.5 E F1(\255pqsu)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(optname) +-2.5 E F0(...])2.5 E -.8(To)144 434.4 S .639(ggle the v).8 F .639 +(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E +5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375 +(listed belo)144 446.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H +2.875(ft).4 G(he)-2.875 E F12.875 E F0 .375 +(option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 +F F12.875 E F0 .374(option to the)2.875 F F1(set)2.874 E F0 -.2 +(bu)2.874 G .374(iltin com-).2 F 2.565(mand. W)144 458.4 R .065 +(ith no options, or with the)-.4 F F12.566 E F0 .066 +(option, a list of all settable options is displayed, with an in-)2.566 +F .074(dication of whether or not each is set; if)144 470.4 R F2 +(optnames)2.574 E F0 .074 +(are supplied, the output is restricted to those op-)2.574 F 3.105 +(tions. The)144 482.4 R F13.105 E F0 .605(option causes output to\ + be displayed in a form that may be reused as input.)3.105 F(Other)5.605 +E(options ha)144 494.4 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 506.4 Q F0(Enable \(set\) each)180 +506.4 Q F2(optname)2.5 E F0(.)A F1144 518.4 Q F0 +(Disable \(unset\) each)180 518.4 Q F2(optname)2.5 E F0(.)A F1144 +530.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\ +tus indicates whether the)180 530.4 R F2(optname)2.503 E F0(is)2.503 E +.255(set or unset.)180 542.4 R .255(If multiple)5.255 F F2(optname)2.755 +E F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G +(ith)-2.756 E F12.756 E F0 2.756(,t)C .256 +(he return status is zero if)-2.756 F(all)180 554.4 Q F2(optnames)2.5 E +F0(are enabled; non-zero otherwise.)2.5 E F1144 566.4 Q F0 +(Restricts the v)180 566.4 Q(alues of)-.25 E F2(optname)2.5 E F0 +(to be those de\214ned for the)2.5 E F12.5 E F0(option to the)2.5 +E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 583.2 R F1 +3.125 E F0(or)3.124 E F13.124 E F0 .624(is used with no) +3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124 +E F0(sho)3.124 E .624(ws only those options which are)-.25 F .983 +(set or unset, respecti)144 595.2 R -.15(ve)-.25 G(ly).15 E 5.983(.U) +-.65 G .983(nless otherwise noted, the)-5.983 F F1(shopt)3.484 E F0 .984 +(options are disabled \(unset\) by de-)3.484 F -.1(fa)144 607.2 S(ult.) +.1 E 1.544(The return status when listing options is zero if all)144 624 +R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)4.044 F +.696 +(When setting or unsetting options, the return status is zero unless an) +144 636 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell) +-.25 F(option.)144 648 Q(The list of)144 664.8 Q F1(shopt)2.5 E F0 +(options is:)2.5 E F1(assoc_expand_once)144 682.8 Q F0 1.945 +(If set, the shell suppresses multiple e)184 694.8 R -.25(va)-.25 G +1.944(luation of associati).25 F 2.244 -.15(ve a)-.25 H 1.944 +(rray subscripts during).15 F .885(arithmetic e)184 706.8 R .885 +(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe) +-.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885 +(ariable as-)-.25 F(signments, and while e)184 718.8 Q -.15(xe)-.15 G +(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(75)185.955 E 0 Cg EP %%Page: 76 76 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(huponexit)144 84 Q F0(If set,)184 96 Q F1(bash)2.5 E F0(will send)2.5 -E/F2 9/Times-Bold@0 SF(SIGHUP)2.5 E F0(to all jobs when an interacti) -2.25 E .3 -.15(ve l)-.25 H(ogin shell e).15 E(xits.)-.15 E F1 -(inherit_err)144 112.8 Q(exit)-.18 E F0 .219 -(If set, command substitution inherits the v)184 124.8 R .219 -(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .22 -(option, instead of unsetting)2.719 F(it in the subshell en)184 136.8 Q -2.5(vironment. This)-.4 F(option is enabled when)2.5 E/F3 10 -/Times-Italic@0 SF(posix mode)2.5 E F0(is enabled.)2.5 E F1(interacti) -144 153.6 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 165.6 R -2.83(waw)-.25 G .33(ord be)-2.93 F .33(ginning with)-.15 F F1(#)2.83 E -F0 .33(to cause that w)2.83 F .33(ord and all remaining characters on) --.1 F .967(that line to be ignored in an interacti)184 177.6 R 1.267 --.15(ve s)-.25 H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 -E -.15(ve)-.15 G 3.467(\). This).15 F .968(option is)3.468 F -(enabled by def)184 189.6 Q(ault.)-.1 E F1(lastpipe)144 206.4 Q F0 .066 -(If set, and job control is not acti)184 206.4 R -.15(ve)-.25 G 2.566 -(,t).15 G .066(he shell runs the last command of a pipeline not e)-2.566 -F -.15(xe)-.15 G(-).15 E -(cuted in the background in the current shell en)184 218.4 Q(vironment.) --.4 E F1(lithist)144 235.2 Q F0 .654(If set, and the)184 235.2 R F1 -(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa) -3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history) --3.155 F(with embedded ne)184 247.2 Q -(wlines rather than using semicolon separators where possible.)-.25 E F1 -(localv)144 264 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 276 R -.422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422 -(utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184 -288 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673 -(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .174 -(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 300 Q -F1(localv)144 316.8 Q(ar_unset)-.1 E F0 .329(If set, calling)184 328.8 R -F1(unset)2.829 E F0 .329(on local v)2.829 F .329(ariables in pre)-.25 F -.328(vious function scopes marks them so subse-)-.25 F .543(quent looku\ -ps \214nd them unset until that function returns. This is identical to \ -the beha)184 340.8 R(v-)-.2 E(ior of unsetting local v)184 352.8 Q -(ariables at the current function scope.)-.25 E F1(login_shell)144 369.6 -Q F0 .486 -(The shell sets this option if it is started as a login shell \(see)184 -381.6 R F2(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve) --.15 G 2.986(\). The).15 F -.25(va)184 393.6 S(lue may not be changed.) -.25 E F1(mailwar)144 410.4 Q(n)-.15 E F0 .814(If set, and a \214le that) -184 422.4 R F1(bash)3.314 E F0 .815 -(is checking for mail has been accessed since the last time it)3.314 F --.1(wa)184 434.4 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E -(`The mail in)-.74 E F3(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i) --.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 -451.2 Q F0 .325(If set, and)184 463.2 R F1 -.18(re)2.825 G(adline).18 E -F0 .325(is being used,)2.825 F F1(bash)2.824 E F0 .324 -(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH)-.189 E -F0 .324(for possible)2.574 F -(completions when completion is attempted on an empty line.)184 475.2 Q -F1(nocaseglob)144 492 Q F0 .436(If set,)184 504 R F1(bash)2.936 E F0 -.436(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f) --.25 H .437(ashion when performing pathname).05 F -.15(ex)184 516 S -(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E --.15(ve)-.15 G(\).).15 E F1(nocasematch)144 532.8 Q F0 1.194(If set,)184 -544.8 R F1(bash)3.694 E F0 1.194 -(matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H -1.193(ashion when performing matching).05 F .551(while e)184 556.8 R --.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0(or)3.051 E F1([[)3.051 E -F0 .551(conditional commands, when performing pattern substitution)3.051 -F -.1(wo)184 568.8 S .623(rd e).1 F .623(xpansions, or when \214ltering\ - possible completions as part of programmable com-)-.15 F(pletion.)184 -580.8 Q F1(nullglob)144 597.6 Q F0 .854(If set,)184 609.6 R F1(bash) -3.354 E F0(allo)3.354 E .855(ws patterns which match no \214les \(see) --.25 F F1 -.1(Pa)3.355 G .855(thname Expansion).1 F F0(abo)3.355 E -.15 -(ve)-.15 G 3.355(\)t).15 G(o)-3.355 E -.15(ex)184 621.6 S -(pand to a null string, rather than themselv).15 E(es.)-.15 E F1(pr)144 -638.4 Q(ogcomp)-.18 E F0 .677(If set, the programmable completion f)184 -650.4 R .677(acilities \(see)-.1 F F1(Pr)3.176 E .676 -(ogrammable Completion)-.18 F F0(abo)3.176 E -.15(ve)-.15 G(\)).15 E -(are enabled.)184 662.4 Q(This option is enabled by def)5 E(ault.)-.1 E -F1(pr)144 679.2 Q(ogcomp_alias)-.18 E F0 2.124 -(If set, and programmable completion is enabled,)184 691.2 R F1(bash) -4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 703.2 Q -3.289(th)-.18 G -2.25 -.2(av e)-3.289 H(an)3.489 E 3.289(yc)-.15 G .789 -(ompletions as a possible alias and attempts alias e)-3.289 F .788 -(xpansion. If it has)-.15 F 1.473(an alias,)184 715.2 R F1(bash)3.973 E -F0 1.473(attempts programmable completion using the command w)3.973 F -1.473(ord resulting)-.1 F(from the e)184 727.2 Q(xpanded alias.)-.15 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(76)190.395 E 0 Cg EP +SF(autocd)144 84 Q F0 .2 +(If set, a command name that is the name of a directory is e)184 84 R +-.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E +(ment to the)184 96 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F +(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E +F1(cdable_v)144 108 Q(ars)-.1 E F0 .155(If set, an ar)184 120 R .155 +(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156 +(iltin command that is not a directory is assumed to be the).2 F +(name of a v)184 132 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E F1(cdspell)144 144 Q F0 +1.055 +(If set, minor errors in the spelling of a directory component in a)184 +144 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987 +(corrected. The)184 156 R 1.487(errors check)3.987 F 1.487 +(ed for are transposed characters, a missing character)-.1 F 3.988(,a) +-.4 G(nd)-3.988 E .77(one character too man)184 168 R 4.57 -.65(y. I) +-.15 H 3.27(fac).65 G .77 +(orrection is found, the corrected \214lename is printed, and)-3.27 F +(the command proceeds.)184 180 Q(This option is only used by interacti)5 +E .3 -.15(ve s)-.25 H(hells.).15 E F1(checkhash)144 192 Q F0 .736 +(If set,)184 204 R F1(bash)3.236 E F0 .736 +(checks that a command found in the hash table e)3.236 F .737 +(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 216 +Q(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 228 Q +F0 .449(If set,)184 240 R F1(bash)2.949 E F0 .449 +(lists the status of an)2.949 F 2.949(ys)-.15 G .448 +(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15 +F -.15(ve)-.25 G 2.661(shell. If)184 252 R(an)2.661 E 2.661(yj)-.15 G +.161(obs are running, this causes the e)-2.661 F .161 +(xit to be deferred until a second e)-.15 F .162(xit is at-)-.15 F 1.473 +(tempted without an interv)184 264 R 1.473(ening command \(see)-.15 F/F2 +9/Times-Bold@0 SF 1.473(JOB CONTR)3.973 F(OL)-.27 E F0(abo)3.723 E -.15 +(ve)-.15 G 3.973(\). The).15 F 1.472(shell al-)3.972 F -.1(wa)184 276 S +(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G(obs are stopped.) +-2.5 E F1(checkwinsize)144 288 Q F0 1.09(If set,)184 300 R F1(bash)3.59 +E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09(ize after each e) +-3.59 F 1.09(xternal \(non-b)-.15 F 1.09(uiltin\) command and, if)-.2 F +(necessary)184 312 Q 3.351(,u)-.65 G .851(pdates the v)-3.351 F .85 +(alues of)-.25 F F2(LINES)3.35 E F0(and)3.1 E F2(COLUMNS)3.35 E/F3 9 +/Times-Roman@0 SF(.)A F0 .85(This option is enabled by de-)5.35 F -.1 +(fa)184 324 S(ult.).1 E F1(cmdhist)144 336 Q F0 .172(If set,)184 336 R +F1(bash)2.672 E F0 .172(attempts to sa)2.672 F .472 -.15(ve a)-.2 H .173 +(ll lines of a multiple-line command in the same history en-).15 F(try) +184 348 Q 5.597(.T)-.65 G .597(his allo)-5.597 F .597 +(ws easy re-editing of multi-line commands.)-.25 F .597 +(This option is enabled by de-)5.597 F -.1(fa)184 360 S 1.287(ult, b).1 +F 1.288(ut only has an ef)-.2 F 1.288 +(fect if command history is enabled, as described abo)-.25 F 1.588 -.15 +(ve u)-.15 H(nder).15 E F2(HIST)184 372 Q(OR)-.162 E(Y)-.315 E F3(.)A F1 +(compat31)144 384 Q(compat32)144 396 Q(compat40)144 408 Q(compat41)144 +420 Q(compat42)144 432 Q(compat43)144 444 Q(compat44)144 456 Q(compat50) +144 468 Q F0 .889(These control aspects of the shell')184 480 R 3.389 +(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F2 .889(SHELL COMP) +3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 492 Q F0(belo)2.25 E +(w\).)-.25 E F1(complete_fullquote)144 508.8 Q F0 .653(If set,)184 520.8 +R F1(bash)3.153 E F0 .653(quotes all shell metacharacters in \214lename\ +s and directory names when per)3.153 F(-)-.2 E 1.525 +(forming completion.)184 532.8 R 1.524(If not set,)6.525 F F1(bash)4.024 +E F0(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524 +(etacharacters such as the dollar sign)-4.024 F 2.667(from the set of c\ +haracters that will be quoted in completed \214lenames when these)184 +544.8 R .029(metacharacters appear in shell v)184 556.8 R .028 +(ariable references in w)-.25 F .028(ords to be completed.)-.1 F .028 +(This means)5.028 F 1.072(that dollar signs in v)184 568.8 R 1.073 +(ariable names that e)-.25 F 1.073 +(xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25 +(ev e)184 580.8 T 1.923 -.4(r, a).25 H 1.423 -.15(ny d).4 H 1.123 +(ollar signs appearing in \214lenames will not be quoted, either).15 F +6.123(.T)-.55 G 1.122(his is acti)-6.123 F -.15(ve)-.25 G .59 +(only when bash is using backslashes to quote completed \214lenames.)184 +592.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 604.8 Q +(ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E +(ersions through 4.2.)-.15 E F1(dir)144 621.6 Q(expand)-.18 E F0 .487 +(If set,)184 633.6 R F1(bash)2.987 E F0 .486 +(replaces directory names with the results of w)2.986 F .486(ord e)-.1 F +.486(xpansion when perform-)-.15 F .179(ing \214lename completion.)184 +645.6 R .179(This changes the contents of the readline editing b)5.179 F +(uf)-.2 E(fer)-.25 E 5.18(.I)-.55 G 2.68(fn)-5.18 G(ot)-2.68 E(set,)184 +657.6 Q F1(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G +(hat the user typed.)-2.5 E F1(dirspell)144 674.4 Q F0 .859(If set,)184 +674.4 R F1(bash)3.359 E F0 .858 +(attempts spelling correction on directory names during w)3.359 F .858 +(ord completion if)-.1 F +(the directory name initially supplied does not e)184 686.4 Q(xist.)-.15 +E F1(dotglob)144 703.2 Q F0 .165(If set,)184 703.2 R F1(bash)2.665 E F0 +.165(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665 +('i)-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F +(xpansion.)-.15 E(The \214lenames)184 715.2 Q F1 -.63(``)2.5 G -.55(.') +.63 G(')-.08 E F0(and)5 E F1 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0 +(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5 +(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F1(dotglob)2.5 E F0 +(is set.)2.5 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(76) +185.955 E 0 Cg EP %%Page: 77 77 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(pr)144 84 Q(omptv)-.18 E(ars)-.1 E F0 1.448 -(If set, prompt strings under)184 96 R 1.448(go parameter e)-.18 F 1.447 -(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 108 S .17 -(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G .17 -(fter being e)-2.67 F .17(xpanded as described in)-.15 F/F2 9 -/Times-Bold@0 SF(PR)2.671 E(OMPTING)-.27 E F0(abo)2.421 E -.15(ve)-.15 G -(.).15 E(This option is enabled by def)184 120 Q(ault.)-.1 E F1 -.18(re) -144 136.8 S(stricted_shell).18 E F0 1.069 -(The shell sets this option if it is started in restricted mode \(see) -184 148.8 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 160.8 Q 2.86 -(w\). The)-.25 F -.25(va)2.86 G .36(lue may not be changed.).25 F .36 -(This is not reset when the startup \214les are e)5.36 F -.15(xe)-.15 G -(-).15 E(cuted, allo)184 172.8 Q(wing the startup \214les to disco)-.25 -E -.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 -E F1(shift_v)144 189.6 Q(erbose)-.1 E F0 .502(If set, the)184 201.6 R F1 -(shift)3.002 E F0 -.2(bu)3.002 G .501 -(iltin prints an error message when the shift count e).2 F .501 -(xceeds the number)-.15 F(of positional parameters.)184 213.6 Q F1(sour) -144 230.4 Q(cepath)-.18 E F0 .77(If set, the)184 242.4 R F1(sour)3.27 E -(ce)-.18 E F0(\()3.27 E F1(.)A F0 3.27(\)b)C .77(uiltin uses the v)-3.47 -F .771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771 -(to \214nd the directory containing the)3.021 F -(\214le supplied as an ar)184 254.4 Q 2.5(gument. This)-.18 F -(option is enabled by def)2.5 E(ault.)-.1 E F1(xpg_echo)144 271.2 Q F0 -(If set, the)184 283.2 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E -(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend) -108 300 Q F0([)2.5 E F1A F0(])A 1.002(Suspend the e)144 312 R -.15 -(xe)-.15 G 1.002(cution of this shell until it recei).15 F -.15(ve)-.25 -G 3.501(sa).15 G F2(SIGCONT)A F0 3.501(signal. A)3.251 F 1.001 -(login shell cannot be)3.501 F .022(suspended; the)144 324 R F1 -2.522 E F0 .022(option can be used to o)2.522 F -.15(ve)-.15 G .022 -(rride this and force the suspension.).15 F .023(The return status is) -5.023 F 2.5(0u)144 336 S(nless the shell is a login shell and)-2.5 E F1 -2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E -F1(test)108 352.8 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([) -108 364.8 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878 -(Return a status of 0 \(true\) or 1 \(f)144 364.8 R .877 -(alse\) depending on the e)-.1 F -.25(va)-.25 G .877 -(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 376.8 -S(pr).2 E F0 5.53(.E).73 G .53 -(ach operator and operand must be a separate ar)-5.53 F 3.03 -(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.361 -(primaries described abo)144 388.8 R 1.661 -.15(ve u)-.15 H(nder).15 E -F2(CONDITION)3.861 E 1.36(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.) -A F1(test)5.86 E F0 1.36(does not accept an)3.86 F 3.86(yo)-.15 G(p-) --3.86 E(tions, nor does it accept and ignore an ar)144 400.8 Q -(gument of)-.18 E F12.5 E F0(as signifying the end of options.)2.5 -E .785(Expressions may be combined using the follo)144 418.8 R .786 -(wing operators, listed in decreasing order of prece-)-.25 F 3.412 -(dence. The)144 430.8 R -.25(eva)3.412 G .912 -(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F -4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F -(used when there are \214v)144 442.8 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G -(ore ar)-2.5 E(guments.)-.18 E F1(!)144 454.8 Q F3 -.2(ex)2.5 G(pr).2 E -F0 -.35(Tr)180 454.8 S(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 -E(alse.)-.1 E F1(\()144 466.8 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 -.26(Returns the v)180 466.8 R .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 -E F0 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 -(rride the normal precedence of opera-).15 F(tors.)180 478.8 Q F3 -.2 -(ex)144 490.8 S(pr1).2 E F02.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 --.35(Tr)180 502.8 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 -E F3 -.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F3 -.2(ex)144 514.8 S -(pr1).2 E F02.5 E F1(o)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 -526.8 S(ue if either).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F3 -.2 -(ex)2.5 G(pr2).2 E F0(is true.)2.52 E F1(test)144 543.6 Q F0(and)2.5 E -F1([)2.5 E F0 -.25(eva)2.5 G(luate conditional e).25 E -(xpressions using a set of rules based on the number of ar)-.15 E -(guments.)-.18 E 2.5(0a)144 561.6 S -.18(rg)-2.5 G(uments).18 E(The e) -180 573.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 585.6 S -.18 -(rg)-2.5 G(ument).18 E(The e)180 597.6 Q -(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 -E 2.5(2a)144 609.6 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) -180 621.6 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87 -F .37(xpression is true if and only if the second ar)-.15 F .37 -(gument is null.)-.18 F .379(If the \214rst ar)180 633.6 R .38 -(gument is one of the unary conditional operators listed abo)-.18 F .68 --.15(ve u)-.15 H(nder).15 E F2(CONDI-)2.88 E(TION)180 645.6 Q .553 -(AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552 -(xpression is true if the unary test is true.)-.15 F .552 -(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 657.6 Q -(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E -(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 669.6 S -.18(rg)-2.5 G -(uments).18 E .236(The follo)180 681.6 R .236 -(wing conditions are applied in the order listed.)-.25 F .236 -(If the second ar)5.236 F .236(gument is one of)-.18 F .855 -(the binary conditional operators listed abo)180 693.6 R 1.155 -.15 -(ve u)-.15 H(nder).15 E F2(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F -F4(,)A F0(the)3.104 E .578(result of the e)180 705.6 R .578(xpression i\ -s the result of the binary test using the \214rst and third ar)-.15 F -(guments)-.18 E 1.333(as operands.)180 717.6 R(The)6.333 E F13.833 -E F0(and)3.833 E F13.832 E F0 1.332 -(operators are considered binary operators when there are)3.832 F .558 -(three ar)180 729.6 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058 -F .558(gument is)-.18 F F1(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F -.558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F -(o-ar)-.1 E(gument)-.18 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(77)190.395 E 0 Cg EP +SF(execfail)144 84 Q F0 .517(If set, a non-interacti)184 84 R .817 -.15 +(ve s)-.25 H .517(hell will not e).15 F .516(xit if it cannot e)-.15 F +-.15(xe)-.15 G .516(cute the \214le speci\214ed as an ar).15 F(-)-.2 E +(gument to the)184 96 Q F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 +E(An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 +E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 112.8 Q +F0 .716(If set, aliases are e)184 124.8 R .717(xpanded as described abo) +-.15 F 1.017 -.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(ALIASES) +3.217 E/F3 9/Times-Roman@0 SF(.)A F0 .717(This option is enabled)5.217 F +(by def)184 136.8 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.) +.15 E F1(extdeb)144 153.6 Q(ug)-.2 E F0 .17(If set at shell in)184 165.6 +R -.2(vo)-.4 G .17(cation, or in a shell startup \214le, arrange to e).2 +F -.15(xe)-.15 G .17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.081 +(before the shell starts, identical to the)184 177.6 R F1 +3.582 E(ugger)-.2 E F0 3.582(option. If)3.582 F 1.082(set after in)3.582 +F -.2(vo)-.4 G 1.082(cation, be-).2 F(ha)184 189.6 Q +(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184 +206.4 Q F0(The)220 206.4 Q F14.251 E F0 1.751(option to the)4.251 +F F1(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751 +(iltin displays the source \214le name and line).2 F +(number corresponding to each function name supplied as an ar)220 218.4 +Q(gument.)-.18 E F1(2.)184 235.2 Q F0 1.667(If the command run by the) +220 235.2 R F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v) +4.167 F 1.667(alue, the ne)-.25 F(xt)-.15 E +(command is skipped and not e)220 247.2 Q -.15(xe)-.15 G(cuted.).15 E F1 +(3.)184 264 Q F0 .841(If the command run by the)220 264 R F1(DEB)3.341 E +(UG)-.1 E F0 .841(trap returns a v)3.341 F .84 +(alue of 2, and the shell is)-.25 F -.15(exe)220 276 S .488 +(cuting in a subroutine \(a shell function or a shell script e).15 F +-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 +(sour)220 288 Q(ce)-.18 E F0 -.2(bu)2.5 G +(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E +(n)-.15 E F0(.)A F1(4.)184 304.8 Q F2 -.27(BA)220 304.8 S(SH_ARGC).27 E +F0(and)3.154 E F2 -.27(BA)3.404 G(SH_ARGV).27 E F0 .904 +(are updated as described in their descriptions)3.154 F(abo)220 316.8 Q +-.15(ve)-.15 G(.).15 E F1(5.)184 333.6 Q F0 1.637(Function tracing is e\ +nabled: command substitution, shell functions, and sub-)220 333.6 R +(shells in)220 345.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E +F1(\()2.5 E/F4 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0 +(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0 +(traps.)2.5 E F1(6.)184 362.4 Q F0 1.082(Error tracing is enabled: comm\ +and substitution, shell functions, and subshells)220 362.4 R(in)220 +374.4 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4 +(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.) +2.5 E F1(extglob)144 391.2 Q F0 .4(If set, the e)184 391.2 R .4 +(xtended pattern matching features described abo)-.15 F .7 -.15(ve u) +-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 403.2 Q +F0(are enabled.)2.5 E F1(extquote)144 420 Q F0 .86(If set,)184 432 R F1 +($)3.36 E F0<08>A F4(string)A F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0 +(")A F4(string)A F0 3.36("q)C .86(uoting is performed within)-3.36 F F1 +(${)3.36 E F4(par)A(ameter)-.15 E F1(})A F0 -.15(ex)3.36 G .86 +(pansions en-).15 F(closed in double quotes.)184 444 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 460.8 Q +F0 .242(If set, patterns which f)184 460.8 R .243 +(ail to match \214lenames during pathname e)-.1 F .243 +(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 472.8 Q(.) +-.55 E F1 -.25(fo)144 489.6 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 +.937(If set, the suf)184 501.6 R<8c78>-.25 E .936(es speci\214ed by the) +-.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w) +-.25 F .936(ords to be ignored)-.1 F .32(when performing w)184 513.6 R +.32(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G +.32(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.948 +(pletions. See)184 525.6 R F2 .448(SHELL V)2.948 F(ARIABLES)-1.215 E F0 +(abo)2.698 E .748 -.15(ve f)-.15 H .448(or a description of).15 F F2 +(FIGNORE)2.947 E F3(.)A F0 .447(This option is)4.947 F(enabled by def) +184 537.6 Q(ault.)-.1 E F1(globasciiranges)144 554.4 Q F0 2.518 +(If set, range e)184 566.4 R 2.519 +(xpressions used in pattern matching brack)-.15 F 2.519(et e)-.1 F 2.519 +(xpressions \(see)-.15 F F2 -.09(Pa)5.019 G(tter).09 E(n)-.135 E +(Matching)184 578.4 Q F0(abo)2.965 E -.15(ve)-.15 G 3.215(\)b).15 G(eha) +-3.215 E 1.015 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214 G 3.214 +(nt)-3.214 G .714(he traditional C locale when performing comparisons.) +-3.214 F 1.02(That is, the current locale')184 590.4 R 3.52(sc)-.55 G +1.02(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F +F1(b)3.52 E F0 1.02(will not)3.52 F .957(collate between)184 602.4 R F1 +(A)3.457 E F0(and)3.457 E F1(B)3.457 E F0 3.457(,a)C .957(nd upper) +-3.457 F .957(-case and lo)-.2 F(wer)-.25 E .956 +(-case ASCII characters will collate)-.2 F(together)184 614.4 Q(.)-.55 E +F1(globskipdots)144 631.2 Q F0 .284(If set, pathname e)184 643.2 R .284 +(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285 +(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E +F0(and)5.285 E F1 -.63(``)2.785 G(..).63 E -.63('')-.55 G F0 2.785(,e) +.63 G -.15(ve)-3.035 G 2.785(ni).15 G 2.785(ft)-2.785 G .285(he pat-) +-2.785 F(tern be)184 655.2 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55 +(.').63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 +E F1(globstar)144 672 Q F0 .519(If set, the pattern)184 672 R F1(**) +3.019 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F +.518(xt will match all \214les and zero)-.15 F .431 +(or more directories and subdirectories.)184 684 R .431 +(If the pattern is follo)5.431 F .432(wed by a)-.25 F F1(/)2.932 E F0 +2.932(,o)C .432(nly directories)-2.932 F(and subdirectories match.)184 +696 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(77)185.955 E 0 Cg +EP %%Page: 78 78 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .521 -(test using the second and third ar)180 84 R 3.021(guments. If)-.18 F -.521(the \214rst ar)3.021 F .52(gument is e)-.18 F(xactly)-.15 E/F1 10 -/Times-Bold@0 SF(\()3.02 E F0 .52(and the third)3.02 F(ar)180 96 Q .485 -(gument is e)-.18 F(xactly)-.15 E F1(\))2.985 E F0 2.985(,t)C .485 -(he result is the one-ar)-2.985 F .485(gument test of the second ar)-.18 -F 2.985(gument. Other)-.18 F(-)-.2 E(wise, the e)180 108 Q -(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 120 S -.18(rg)-2.5 G -(uments).18 E .385(If the \214rst ar)180 132 R .385(gument is)-.18 F F1 -(!)2.885 E F0 2.885(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15 -G .384(tion of the three-ar).05 F .384(gument e)-.18 F .384 -(xpression com-)-.15 F .284(posed of the remaining ar)180 144 R 2.784 -(guments. Otherwise,)-.18 F .284(the e)2.784 F .284 -(xpression is parsed and e)-.15 F -.25(va)-.25 G .285(luated ac-).25 F -(cording to precedence using the rules listed abo)180 156 Q -.15(ve)-.15 -G(.).15 E 2.5(5o)144 168 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18 E -1.635(The e)180 180 R 1.635(xpression is parsed and e)-.15 F -.25(va) --.25 G 1.635(luated according to precedence using the rules listed).25 F -(abo)180 192 Q -.15(ve)-.15 G(.).15 E(When used with)144 210 Q F1(test) -2.5 E F0(or)2.5 E F1([)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E F0(and)2.5 -E F1(>)2.5 E F0(operators sort le)2.5 E -(xicographically using ASCII ordering.)-.15 E F1(times)108 226.8 Q F0 -1.229(Print the accumulated user and system times for the shell and for\ - processes run from the shell.)144 226.8 R(The return status is 0.)144 -238.8 Q F1(trap)108 255.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E -/F2 10/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...]) -2.5 E .683(The command)144 267.6 R F2(ar)3.513 E(g)-.37 E F0 .683 -(is to be read and e)3.403 F -.15(xe)-.15 G .682 -(cuted when the shell recei).15 F -.15(ve)-.25 G 3.182(ss).15 G -(ignal\(s\))-3.182 E F2(sigspec)3.522 E F0 5.682(.I).31 G(f)-5.682 E F2 -(ar)3.512 E(g)-.37 E F0(is)3.402 E .608(absent \(and there is a single) -144 279.6 R F2(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F13.108 E -F0 3.108(,e)C .608 -(ach speci\214ed signal is reset to its original disposition)-3.108 F -.659(\(the v)144 291.6 R .659(alue it had upon entrance to the shell\).) --.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .658 -(is the null string the signal speci\214ed by each)3.378 F F2(sigspec) -144.34 303.6 Q F0 .58(is ignored by the shell and by the commands it in) -3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F2(ar)3.411 E(g)-.37 E -F0 .581(is not present and)3.301 F F13.081 E F0(has)3.081 E 1.215 -(been supplied, then the trap commands associated with each)144 315.6 R -F2(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214 -F(gu-)-.18 E .86(ments are supplied or if only)144 327.6 R F13.36 -E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86 -(prints the list of commands associated with each)3.36 F 2.83 -(signal. The)144 339.6 R F12.83 E F0 .33(option causes the shell \ -to print a list of signal names and their corresponding num-)2.83 F 4.31 -(bers. Each)144 351.6 R F2(sigspec)4.65 E F0 1.811 -(is either a signal name de\214ned in <)4.62 F F2(signal.h)A F0 1.811 -(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E -(names are case insensiti)144 363.6 Q .3 -.15(ve a)-.25 H(nd the).15 E -/F3 9/Times-Bold@0 SF(SIG)2.5 E F0(pre\214x is optional.)2.25 E .667 -(If a)144 381.6 R F2(sigspec)3.507 E F0(is)3.477 E F3(EXIT)3.167 E F0 -.667(\(0\) the command)2.917 F F2(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 -F -.15(xe)-.15 G .666(cuted on e).15 F .666(xit from the shell.)-.15 F -.666(If a)5.666 F F2(sigspec)3.506 E F0(is)3.476 E F3(DE-)3.166 E -.09 -(BU)144 393.6 S(G).09 E/F4 9/Times-Roman@0 SF(,)A F0 .483(the command) -2.733 F F2(ar)3.313 E(g)-.37 E F0 .483(is e)3.203 F -.15(xe)-.15 G .484 -(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F2 .484(simple command) -2.984 F F0(,)A F2(for)2.984 E F0(command,)2.984 E F2(case)2.984 E F0 -(command,)2.984 E F2(select)144 405.6 Q F0 .563(command, e)3.063 F -.15 -(ve)-.25 G .563(ry arithmetic).15 F F2(for)3.063 E F0 .563 -(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .562 -(cutes in a shell).15 F .622(function \(see)144 417.6 R F3 .622 -(SHELL GRAMMAR)3.122 F F0(abo)2.872 E -.15(ve)-.15 G 3.122(\). Refer).15 -F .622(to the description of the)3.122 F F1(extdeb)3.122 E(ug)-.2 E F0 -.622(option to the)3.122 F F1(shopt)144 429.6 Q F0 -.2(bu)2.996 G .496 -(iltin for details of its ef).2 F .496(fect on the)-.25 F F1(DEB)2.996 E -(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F2(sigspec)3.336 E F0(is) -3.306 E F3(RETURN)2.996 E F4(,)A F0 .496(the command)2.746 F F2(ar) -144.33 441.6 Q(g)-.37 E F0 .18(is e)2.9 F -.15(xe)-.15 G .18 -(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G .18 -(cuted with the).15 F F1(.)2.68 E F0(or)2.68 E F1(sour)2.68 E(ce)-.18 E -F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F -.15(exe)144 453.6 S -(cuting.).15 E .961(If a)144 471.6 R F2(sigspec)3.801 E F0(is)3.771 E F3 -(ERR)3.461 E F4(,)A F0 .961(the command)3.211 F F2(ar)3.791 E(g)-.37 E -F0 .961(is e)3.681 F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 -G 3.461(ra).15 G .96(pipeline \(which may consist of a)-.001 F .185(sin\ -gle simple command\), a list, or a compound command returns a non\255ze\ -ro e)144 483.6 R .185(xit status, subject to)-.15 F .452(the follo)144 -495.6 R .452(wing conditions.)-.25 F(The)5.452 E F3(ERR)2.952 E F0 .451 -(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .451 -(ailed command is part of the com-)-.1 F .387 -(mand list immediately follo)144 507.6 R .387(wing a)-.25 F F1(while) -2.887 E F0(or)2.887 E F1(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388 -(ord, part of the test in an)-.1 F F2(if)2.898 E F0 .388 -(statement, part)4.848 F .778(of a command e)144 519.6 R -.15(xe)-.15 G -.778(cuted in a).15 F F1(&&)3.278 E F0(or)3.278 E F1(||)3.278 E F0 .778 -(list e)3.278 F .778(xcept the command follo)-.15 F .778 -(wing the \214nal)-.25 F F1(&&)3.278 E F0(or)3.278 E F1(||)3.277 E F0 -3.277(,a)C -.15(ny)-3.277 G 1.28(command in a pipeline b)144 531.6 R -1.28(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v) --3.78 F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F -F1(!)3.78 E F0(.)A(These are the same conditions obe)144 543.6 Q -(yed by the)-.15 E F1(err)2.5 E(exit)-.18 E F0(\()2.5 E F1A F0 2.5 -(\)o)C(ption.)-2.5 E .133 -(Signals ignored upon entry to the shell cannot be trapped or reset.)144 -561.6 R -.35(Tr)5.132 G .132(apped signals that are not be-).35 F .117 -(ing ignored are reset to their original v)144 573.6 R .117 -(alues in a subshell or subshell en)-.25 F .117 -(vironment when one is cre-)-.4 F 2.5(ated. The)144 585.6 R -(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F2(sigspec)2.84 E F0 -(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F1(trap)2.5 E F0 -(returns true.)2.5 E F1(type)108 602.4 Q F0([)2.5 E F1(\255aftpP)A F0(]) -A F2(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5 E -.4(Wi)144 614.4 S -.174(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F2 -(name)3.034 E F0 -.1(wo)2.854 G .173 -(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F -F1144 626.4 Q F0 .715(option is used,)3.215 F F1(type)3.215 E F0 -.715(prints a string which is one of)3.215 F F2(alias)3.545 E F0(,).27 E -F2 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)5.185 E F0 -(,).24 E F2 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F2 -(\214le)5.125 E F0(if)3.395 E F2(name)144.36 638.4 Q F0 .087 -(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087 -(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15 -(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2 -(name)2.946 E F0 .086(is not)2.766 F .118 -(found, then nothing is printed, and an e)144 650.4 R .118 -(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F -F12.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855 -(either returns the name of the disk \214le that w)144 662.4 R .855 -(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0 -.855(were speci\214ed as a com-)3.535 F .528(mand name, or nothing if) -144 674.4 R/F5 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028 -G .528(uld not return).1 F F2(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528 -E F13.028 E F0 .529(option forces a)3.028 F F3 -.666(PA)3.029 G -(TH)-.189 E F0 .007(search for each)144 686.4 R F2(name)2.507 E F0 2.507 -(,e)C -.15(ve)-2.757 G 2.507(ni).15 G(f)-2.507 E F5 .007(type -t name) -2.507 F F0 -.1(wo)2.507 G .007(uld not return).1 F F2(\214le)4.417 E F0 -5.006(.I).18 G 2.506(fac)-5.006 G .006(ommand is hashed,)-2.506 F F1 -2.506 E F0(and)144 698.4 Q F13.23 E F0 .73 -(print the hashed v)3.23 F .731 -(alue, which is not necessarily the \214le that appears \214rst in)-.25 -F F3 -.666(PA)3.231 G(TH)-.189 E F4(.)A F0 .731(If the)5.231 F F1 -144 710.4 Q F0 .824(option is used,)3.324 F F1(type)3.324 E F0 .824 -(prints all of the places that contain an e)3.324 F -.15(xe)-.15 G .823 -(cutable named).15 F F2(name)3.683 E F0 5.823(.T).18 G .823(his in-) --5.823 F 1.176(cludes aliases and functions, if and only if the)144 -722.4 R F13.676 E F0 1.176(option is not also used.)3.676 F 1.177 -(The table of hashed)6.176 F(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(78)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(gnu_errfmt)144 84 Q F0(If set, shell error messages are written in t\ +he standard GNU error message format.)184 96 Q F1(histappend)144 112.8 Q +F0 .676 +(If set, the history list is appended to the \214le named by the v)184 +124.8 R .676(alue of the)-.25 F/F2 9/Times-Bold@0 SF(HISTFILE)3.176 E F0 +-.25(va)2.926 G(ri-).25 E(able when the shell e)184 136.8 Q +(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F1 +(histr)144 153.6 Q(eedit)-.18 E F0 .575(If set, and)184 165.6 R F1 -.18 +(re)3.075 G(adline).18 E F0 .575(is being used, a user is gi)3.075 F +-.15(ve)-.25 G 3.075(nt).15 G .576(he opportunity to re-edit a f)-3.075 +F .576(ailed his-)-.1 F(tory substitution.)184 177.6 Q F1(histv)144 +194.4 Q(erify)-.1 E F0 .403(If set, and)184 206.4 R F1 -.18(re)2.903 G +(adline).18 E F0 .403 +(is being used, the results of history substitution are not immediately) +2.903 F .661(passed to the shell parser)184 218.4 R 5.661(.I)-.55 G .662 +(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162 +G(adline).18 E F0(editing)3.162 E -.2(bu)184 230.4 S -.25(ff).2 G(er).25 +E 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 +(hostcomplete)144 247.2 Q F0 1.182(If set, and)184 259.2 R F1 -.18(re) +3.682 G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 +1.181(will attempt to perform hostname completion)3.681 F 1.38(when a w) +184 271.2 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381 +(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E +F2(READLINE)3.881 E F0(abo)184 283.2 Q -.15(ve)-.15 G 2.5(\). This).15 F +(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 300 Q F0(If set,) +184 312 Q F1(bash)2.5 E F0(will send)2.5 E F2(SIGHUP)2.5 E F0 +(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e) +.15 E(xits.)-.15 E F1(inherit_err)144 328.8 Q(exit)-.18 E F0 .22 +(If set, command substitution inherits the v)184 340.8 R .219 +(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .219 +(option, instead of unsetting)2.719 F(it in the subshell en)184 352.8 Q +2.5(vironment. This)-.4 F(option is enabled when)2.5 E/F3 10 +/Times-Italic@0 SF(posix mode)2.5 E F0(is enabled.)2.5 E F1(interacti) +144 369.6 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 381.6 R +2.83(waw)-.25 G .33(ord be)-2.93 F .33(ginning with)-.15 F F1(#)2.83 E +F0 .33(to cause that w)2.83 F .33(ord and all remaining characters on) +-.1 F .967(that line to be ignored in an interacti)184 393.6 R 1.267 +-.15(ve s)-.25 H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 +E -.15(ve)-.15 G 3.467(\). This).15 F .967(option is)3.467 F +(enabled by def)184 405.6 Q(ault.)-.1 E F1(lastpipe)144 422.4 Q F0 .066 +(If set, and job control is not acti)184 422.4 R -.15(ve)-.25 G 2.566 +(,t).15 G .066(he shell runs the last command of a pipeline not e)-2.566 +F -.15(xe)-.15 G(-).15 E +(cuted in the background in the current shell en)184 434.4 Q(vironment.) +-.4 E F1(lithist)144 451.2 Q F0 .655(If set, and the)184 451.2 R F1 +(cmdhist)3.155 E F0 .654(option is enabled, multi-line commands are sa) +3.154 F -.15(ve)-.2 G 3.154(dt).15 G 3.154(ot)-3.154 G .654(he history) +-3.154 F(with embedded ne)184 463.2 Q +(wlines rather than using semicolon separators where possible.)-.25 E F1 +(localv)144 480 Q(ar_inherit)-.1 E F0 .421(If set, local v)184 492 R +.422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422 +(utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184 +504 S .174(ists at a pre).15 F .174(vious scope before an)-.25 F 2.673 +(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .173 +(The nameref attrib)5.173 F .173(ute is not)-.2 F(inherited.)184 516 Q +F1(localv)144 532.8 Q(ar_unset)-.1 E F0 .328(If set, calling)184 544.8 R +F1(unset)2.828 E F0 .328(on local v)2.828 F .329(ariables in pre)-.25 F +.329(vious function scopes marks them so subse-)-.25 F .543(quent looku\ +ps \214nd them unset until that function returns. This is identical to \ +the beha)184 556.8 R(v-)-.2 E(ior of unsetting local v)184 568.8 Q +(ariables at the current function scope.)-.25 E F1(login_shell)144 585.6 +Q F0 .486 +(The shell sets this option if it is started as a login shell \(see)184 +597.6 R F2(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)2.737 E -.15(ve) +-.15 G 2.987(\). The).15 F -.25(va)184 609.6 S(lue may not be changed.) +.25 E F1(mailwar)144 626.4 Q(n)-.15 E F0 .815(If set, and a \214le that) +184 638.4 R F1(bash)3.315 E F0 .814 +(is checking for mail has been accessed since the last time it)3.315 F +-.1(wa)184 650.4 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E +(`The mail in)-.74 E F3(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i) +-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 +667.2 Q F0 .324(If set, and)184 679.2 R F1 -.18(re)2.824 G(adline).18 E +F0 .324(is being used,)2.824 F F1(bash)2.824 E F0 .324 +(will not attempt to search the)2.824 F F2 -.666(PA)2.825 G(TH)-.189 E +F0 .325(for possible)2.575 F +(completions when completion is attempted on an empty line.)184 691.2 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(78)185.955 E 0 Cg EP %%Page: 79 79 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.223 -(commands is not consulted when using)144 84 R/F1 10/Times-Bold@0 SF -3.723 E F0 6.223(.T)C(he)-6.223 E F13.723 E F0 1.223 -(option suppresses shell function lookup, as)3.723 F .325(with the)144 -96 R F1(command)2.825 E F0 -.2(bu)2.825 G(iltin.).2 E F1(type)5.325 E F0 -.325(returns true if all of the ar)2.825 F .326(guments are found, f) --.18 F .326(alse if an)-.1 F 2.826(ya)-.15 G .326(re not)-2.826 F -(found.)144 108 Q F1(ulimit)108 124.8 Q F0([)2.5 E F1(\255HS)A F0(])A F1 -2.5 E(ulimit)108 136.8 Q F0([)2.5 E F1(\255HS)A F0 2.5(][)C F1 -(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E/F2 10 -/Times-Italic@0 SF(limit)A F0(]])A(Pro)144 148.8 Q .244(vides control o) --.15 F -.15(ve)-.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25 -(va)-.2 G .244 -(ilable to the shell and to processes started by it, on systems).25 F -.943(that allo)144 160.8 R 3.443(ws)-.25 G .943(uch control.)-3.443 F -(The)5.943 E F13.443 E F0(and)3.443 E F13.444 E F0 .944 -(options specify that the hard or soft limit is set for the)3.444 F(gi) -144 172.8 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208 -(hard limit cannot be increased by a non-root user once it is set; a so\ -ft limit may)2.709 F .425(be increased up to the v)144 184.8 R .425 -(alue of the hard limit.)-.25 F .426(If neither)5.425 F F12.926 E -F0(nor)2.926 E F12.926 E F0 .426 -(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144 -196.8 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139 -(can be a number in the unit speci\214ed for the resource or one)3.319 F -.741(of the special v)144 208.8 R(alues)-.25 E F1(hard)3.241 E F0(,)A F1 -(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w) -C .741(hich stand for the current hard limit, the current)-3.241 F .024 -(soft limit, and no limit, respecti)144 220.8 R -.15(ve)-.25 G(ly).15 E -5.023(.I)-.65 G(f)-5.023 E F2(limit)2.613 E F0 .023 -(is omitted, the current v)3.203 F .023 -(alue of the soft limit of the re-)-.25 F .984 -(source is printed, unless the)144 232.8 R F13.484 E F0 .984 -(option is gi)3.484 F -.15(ve)-.25 G 3.484(n. When).15 F .985 -(more than one resource is speci\214ed, the)3.484 F .7 -(limit name and unit, if appropriate, are printed before the v)144 244.8 -R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 -256.8 Q(ws:)-.25 E F1144 268.8 Q F0 -(All current limits are reported; no limits are set)180 268.8 Q F1 -144 280.8 Q F0(The maximum sock)180 280.8 Q(et b)-.1 E(uf)-.2 E -(fer size)-.25 E F1144 292.8 Q F0 -(The maximum size of core \214les created)180 292.8 Q F1144 304.8 -Q F0(The maximum size of a process')180 304.8 Q 2.5(sd)-.55 G(ata se) --2.5 E(gment)-.15 E F1144 316.8 Q F0 -(The maximum scheduling priority \("nice"\))180 316.8 Q F1144 -328.8 Q F0 -(The maximum size of \214les written by the shell and its children)180 -328.8 Q F1144 340.8 Q F0(The maximum number of pending signals)180 -340.8 Q F1144 352.8 Q F0 -(The maximum number of kqueues that may be allocated)180 352.8 Q F1 -144 364.8 Q F0(The maximum size that may be lock)180 364.8 Q -(ed into memory)-.1 E F1144 376.8 Q F0 -(The maximum resident set size \(man)180 376.8 Q 2.5(ys)-.15 G -(ystems do not honor this limit\))-2.5 E F1144 388.8 Q F0 .791(Th\ -e maximum number of open \214le descriptors \(most systems do not allo) -180 388.8 R 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F -(be set\))180 400.8 Q F1144 412.8 Q F0 -(The pipe size in 512-byte blocks \(this may not be set\))180 412.8 Q F1 -144 424.8 Q F0 -(The maximum number of bytes in POSIX message queues)180 424.8 Q F1 -144 436.8 Q F0(The maximum real-time scheduling priority)180 436.8 -Q F1144 448.8 Q F0(The maximum stack size)180 448.8 Q F1144 -460.8 Q F0(The maximum amount of cpu time in seconds)180 460.8 Q F1 -144 472.8 Q F0(The maximum number of processes a)180 472.8 Q -.25 -(va)-.2 G(ilable to a single user).25 E F1144 484.8 Q F0 .47 -(The maximum amount of virtual memory a)180 484.8 R -.25(va)-.2 G .47 -(ilable to the shell and, on some systems, to).25 F(its children)180 -496.8 Q F1144 508.8 Q F0(The maximum number of \214le locks)180 -508.8 Q F1144 520.8 Q F0(The maximum number of pseudoterminals)180 -520.8 Q F1144 532.8 Q F0(The maximum time a real-time process can\ - run before blocking, in microseconds)180 532.8 Q F1144 544.8 Q F0 -(The maximum number of threads)180 544.8 Q(If)144 561.6 Q F2(limit)3.058 -E F0 .468(is gi)3.648 F -.15(ve)-.25 G .468(n, and the).15 F F1 -2.968 E F0 .468(option is not used,)2.968 F F2(limit)2.968 E F0 .468 -(is the ne)2.968 F 2.968(wv)-.25 G .468 -(alue of the speci\214ed resource.)-3.218 F(If)5.468 E .045 -(no option is gi)144 573.6 R -.15(ve)-.25 G .045(n, then).15 F F1 -2.545 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 -(lues are in 1024-byte increments, e)1.11 F .044(xcept for)-.15 F F1 -2.544 E F0 2.544(,w)C .044(hich is)-2.544 F .67(in seconds;)144 -585.6 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F -F13.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) --3.17 F F13.17 E F0(,)A F13.17 E F0(,)A F13.17 E F0(,) -A F1144 597.6 Q F0(,)A F13.737 E F0 3.737(,a)C(nd)-3.737 E -F13.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 -(alues; and, when in posix mode,)-.25 F F13.736 E F0(and)3.736 E -F13.736 E F0 3.736(,w)C 1.236(hich are in)-3.736 F .238 -(512-byte increments.)144 609.6 R .238 -(The return status is 0 unless an in)5.238 F -.25(va)-.4 G .238 -(lid option or ar).25 F .238(gument is supplied, or an)-.18 F -(error occurs while setting a ne)144 621.6 Q 2.5(wl)-.25 G(imit.)-2.5 E -F1(umask)108 638.4 Q F0([)2.5 E F1A F0 2.5(][)C F1-2.5 E F0 -2.5(][)C F2(mode)-2.5 E F0(])A .18 -(The user \214le-creation mask is set to)144 650.4 R F2(mode)3.06 E F0 -5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18 -(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ -therwise it is interpreted as a symbolic mode mask similar to that acce\ -pted by)144 662.4 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 -674.4 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382 -(alue of the mask is printed.)-.25 F(The)5.382 E F12.882 E F0 .382 -(option causes the mask to be)2.882 F .547 -(printed in symbolic form; the def)144 686.4 R .547 -(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G -(he)-3.047 E F13.047 E F0 .547(option is supplied, and)3.047 F F2 -(mode)144.38 698.4 Q F0 .552 -(is omitted, the output is in a form that may be reused as input.)3.232 -F .551(The return status is 0 if the)5.551 F(mode w)144 710.4 Q -(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E -(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E -(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(79)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(nocaseglob)144 84 Q F0 .437(If set,)184 96 R F1(bash)2.937 E F0 .436 +(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25 +H .436(ashion when performing pathname).05 F -.15(ex)184 108 S +(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 124.8 Q F0 1.193(If set,)184 +136.8 R F1(bash)3.693 E F0 1.194 +(matches patterns in a case\255insensiti)3.693 F 1.494 -.15(ve f)-.25 H +1.194(ashion when performing matching).05 F .551(while e)184 148.8 R +-.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0(or)3.051 E F1([[)3.051 E +F0 .551(conditional commands, when performing pattern substitution)3.051 +F -.1(wo)184 160.8 S .622(rd e).1 F .623(xpansions, or when \214ltering\ + possible completions as part of programmable com-)-.15 F(pletion.)184 +172.8 Q F1(noexpand_translation)144 189.6 Q F0 1.118(If set,)184 201.6 R +F1(bash)3.618 E F0 1.117(encloses the translated results of $"..." quot\ +ing in single quotes instead of)3.617 F(double quotes.)184 213.6 Q +(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1 +(nullglob)144 230.4 Q F0 .854(If set,)184 242.4 R F1(bash)3.354 E F0 +(allo)3.354 E .855(ws patterns which match no \214les \(see)-.25 F F1 +-.1(Pa)3.355 G .855(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G +3.355(\)t).15 G(o)-3.355 E -.15(ex)184 254.4 S +(pand to a null string, rather than themselv).15 E(es.)-.15 E F1 +(patsub_r)144 271.2 Q(eplacement)-.18 E F0 .106(If set,)184 283.2 R F1 +(bash)2.606 E F0 -.15(ex)2.606 G .106(pands occurrences of).15 F F1(&) +2.606 E F0 .105(in the replacement string of pattern substitution to) +2.606 F .527(the te)184 295.2 R .527 +(xt matched by the pattern, as described under)-.15 F F1 -.1(Pa)3.028 G +.528(rameter Expansion).1 F F0(abo)3.028 E -.15(ve)-.15 G 5.528(.T).15 G +(his)-5.528 E(option is enabled by def)184 307.2 Q(ault.)-.1 E F1(pr)144 +324 Q(ogcomp)-.18 E F0 .677(If set, the programmable completion f)184 +336 R .677(acilities \(see)-.1 F F1(Pr)3.176 E .676 +(ogrammable Completion)-.18 F F0(abo)3.176 E -.15(ve)-.15 G(\)).15 E +(are enabled.)184 348 Q(This option is enabled by def)5 E(ault.)-.1 E F1 +(pr)144 364.8 Q(ogcomp_alias)-.18 E F0 2.124 +(If set, and programmable completion is enabled,)184 376.8 R F1(bash) +4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 388.8 Q +3.289(th)-.18 G -2.25 -.2(av e)-3.289 H(an)3.489 E 3.289(yc)-.15 G .789 +(ompletions as a possible alias and attempts alias e)-3.289 F .788 +(xpansion. If it has)-.15 F 1.473(an alias,)184 400.8 R F1(bash)3.973 E +F0 1.473(attempts programmable completion using the command w)3.973 F +1.473(ord resulting)-.1 F(from the e)184 412.8 Q(xpanded alias.)-.15 E +F1(pr)144 429.6 Q(omptv)-.18 E(ars)-.1 E F0 1.448 +(If set, prompt strings under)184 441.6 R 1.448(go parameter e)-.18 F +1.447(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 +453.6 S .17(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G +.17(fter being e)-2.67 F .17(xpanded as described in)-.15 F/F2 9 +/Times-Bold@0 SF(PR)2.671 E(OMPTING)-.27 E F0(abo)2.421 E -.15(ve)-.15 G +(.).15 E(This option is enabled by def)184 465.6 Q(ault.)-.1 E F1 -.18 +(re)144 482.4 S(stricted_shell).18 E F0 1.069 +(The shell sets this option if it is started in restricted mode \(see) +184 494.4 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 506.4 Q 2.86 +(w\). The)-.25 F -.25(va)2.86 G .36(lue may not be changed.).25 F .36 +(This is not reset when the startup \214les are e)5.36 F -.15(xe)-.15 G +(-).15 E(cuted, allo)184 518.4 Q(wing the startup \214les to disco)-.25 +E -.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 +E F1(shift_v)144 535.2 Q(erbose)-.1 E F0 .502(If set, the)184 547.2 R F1 +(shift)3.002 E F0 -.2(bu)3.002 G .501 +(iltin prints an error message when the shift count e).2 F .501 +(xceeds the number)-.15 F(of positional parameters.)184 559.2 Q F1(sour) +144 576 Q(cepath)-.18 E F0 .77(If set, the)184 588 R F1(.)3.27 E F0(\() +3.27 E F1(sour)A(ce)-.18 E F0 3.27(\)b)C .77(uiltin uses the v)-3.47 F +.771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771 +(to \214nd the directory containing the)3.021 F +(\214le supplied as an ar)184 600 Q 2.5(gument. This)-.18 F +(option is enabled by def)2.5 E(ault.)-.1 E F1 -.1(va)144 616.8 S(rr).1 +E(edir_close)-.18 E F0 .74(If set, the shell automatically closes \214l\ +e descriptors assigned using the)184 628.8 R/F3 10/Times-Italic@0 SF +({varname})3.24 E F0(redi-)3.24 E .423(rection syntax \(see)184 640.8 R +F2(REDIRECTION)2.924 E F0(abo)2.674 E -.15(ve)-.15 G 2.924(\)i).15 G +.424(nstead of lea)-2.924 F .424(ving them open when the com-)-.2 F +(mand completes.)184 652.8 Q F1(xpg_echo)144 669.6 Q F0(If set, the)184 +681.6 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E +(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend) +108 698.4 Q F0([)2.5 E F1A F0(])A 1.002(Suspend the e)144 710.4 R +-.15(xe)-.15 G 1.002(cution of this shell until it recei).15 F -.15(ve) +-.25 G 3.501(sa).15 G F2(SIGCONT)A F0 3.501(signal. A)3.251 F 1.001 +(login shell cannot be)3.501 F .022(suspended; the)144 722.4 R F1 +2.522 E F0 .022(option can be used to o)2.522 F -.15(ve)-.15 G .022 +(rride this and force the suspension.).15 F .023(The return status is) +5.023 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(79)185.955 E 0 +Cg EP %%Page: 80 80 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(unalias)108 84 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C/F2 10 -/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E(Remo)144 96 Q 1.057 -.15 -(ve e)-.15 H(ach).15 E F2(name)3.257 E F0 .757 -(from the list of de\214ned aliases.)3.257 F(If)5.758 E F13.258 E -F0 .758(is supplied, all alias de\214nitions are re-)3.258 F(mo)144 108 -Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E -(alue is true unless a supplied)-.25 E F2(name)2.86 E F0 -(is not a de\214ned alias.)2.68 E F1(unset)108 124.8 Q F0<5bad>2.5 E F1 -(fv)A F0 2.5(][)C-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...]) -2.5 E -.15(Fo)144 136.8 S 3.804(re).15 G(ach)-3.804 E F2(name)4.164 E F0 -3.804(,r).18 G(emo)-3.804 E 1.604 -.15(ve t)-.15 H 1.304 -(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 -(If the)6.303 F F13.803 E F0 1.303(option is gi)3.803 F -.15(ve) --.25 G 1.303(n, each).15 F F2(name)144.36 148.8 Q F0 .464 -(refers to a shell v)3.144 F .464(ariable, and that v)-.25 F .464 -(ariable is remo)-.25 F -.15(ve)-.15 G 2.965(d. Read-only).15 F -.25(va) -2.965 G .465(riables may not be un-).25 F 2.769(set. If)144 160.8 R F1 -2.769 E F0 .269(is speci\214ed, each)2.769 F F2(name)3.129 E F0 -.269(refers to a shell function, and the function de\214nition is remo) -2.949 F -.15(ve)-.15 G(d.).15 E .403(If the)144 172.8 R F12.903 E -F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v) -2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0 -(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .404(will be unset)2.904 F -.72(rather than the v)144 184.8 R .72(ariable it references.)-.25 F F1 -5.72 E F0 .72(has no ef)3.22 F .719(fect if the)-.25 F F1 -3.219 E F0 .719(option is supplied.)3.219 F .719(If no options)5.719 F -.736(are supplied, each)144 196.8 R F2(name)3.236 E F0 .736 -(refers to a v)3.236 F .737(ariable; if there is no v)-.25 F .737 -(ariable by that name, a function with)-.25 F 1.762(that name, if an)144 -208.8 R 3.062 -.65(y, i)-.15 H 4.262(su).65 G 4.261(nset. Each)-4.262 F -1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve) --.15 G 4.261(df).15 G 1.761(rom the en)-4.261 F(vironment)-.4 E 3.171 -(passed to subsequent commands.)144 220.8 R 3.172(If an)8.172 F 5.672 -(yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES) -.27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.422 G(SH_ARGV0).27 E F4(,)A -F3 -.27(BA)5.422 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 232.8 S -(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.482 G(SH_SUBSHELL).27 E F4(,)A F3 --.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E -F4(,)A F3(DIRST)11.481 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL) -144 244.8 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN) -2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67 -E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144 -256.8 Q F4(,)A F0(or)4.03 E F3(SRANDOM)4.28 E F0 1.779(are unset, the) -4.03 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F --.15(ve)-.25 G 4.279(ni).15 G 4.279(ft)-4.279 G(he)-4.279 E 4.279(ya) --.15 G 1.779(re subse-)-4.279 F(quently reset.)144 268.8 Q(The e)5 E -(xit status is true unless a)-.15 E F2(name)2.86 E F0(is readonly)2.68 E -(.)-.65 E F1(wait)108 285.6 Q F0([)2.5 E F1(\255fn)A F0 2.5(][)C F1 --2.5 E F2(varname)2.5 E F0 2.5(][)C F2(id ...)-2.5 E F0(])A -.8 -(Wa)144 297.6 S .659(it for each speci\214ed child process and return i\ -ts termination status.).8 F(Each)5.659 E F2(id)3.169 E F0 .659 -(may be a process)3.929 F .009 -(ID or a job speci\214cation; if a job spec is gi)144 309.6 R -.15(ve) --.25 G .008(n, all processes in that job').15 F 2.508(sp)-.55 G .008 -(ipeline are w)-2.508 F .008(aited for)-.1 F 5.008(.I)-.55 G(f)-5.008 E -F2(id)144.01 321.6 Q F0 .441(is not gi)3.711 F -.15(ve)-.25 G(n,).15 E -F1(wait)2.941 E F0 -.1(wa)2.941 G .441 -(its for all running background jobs and the last-e).1 F -.15(xe)-.15 G -.442(cuted process substitu-).15 F .598 -(tion, if its process id is the same as)144 333.6 R F1($!)3.098 E F0 -3.098(,a)C .598(nd the return status is zero.)-3.098 F .597(If the)5.597 -F F13.097 E F0 .597(option is supplied,)3.097 F F1(wait)144 345.6 -Q F0 -.1(wa)3.082 G .583(its for a single job from the list of).1 F F2 -(id)3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 -E F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj) --.15 G .583(ob, to complete and)-3.083 F .404(returns its e)144 357.6 R -.404(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403 -(guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .572 -(are supplied and the shell has no unw)144 369.6 R .573 -(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .573 -(If the)5.573 F F13.073 E F0 .573(option is)3.073 F .39 -(supplied, the process or job identi\214er of the job for which the e) -144 381.6 R .39(xit status is returned is assigned to)-.15 F .905(the v) -144 393.6 R(ariable)-.25 E F2(varname)3.405 E F0 .905 -(named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G -.905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E -(an)144 405.6 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 -(is useful only when the)3.89 F F13.89 E F0 1.39 -(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F13.89 E F0 -(option,)3.89 E .574(when job control is enabled, forces)144 417.6 R F1 -(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0 -.575(to terminate before returning its status, in-)3.075 F .635 -(stead of returning when it changes status.)144 429.6 R(If)5.635 E F2 -(id)3.145 E F0 .635(speci\214es a non-e)3.905 F .635 -(xistent process or job, the return)-.15 F(status is 127.)144 441.6 Q -(Otherwise, the return status is the e)5 E -(xit status of the last process or job w)-.15 E(aited for)-.1 E(.)-.55 E -/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 458.4 Q -1.04(AT)-.81 G -(IBILITY MODE)1.04 E F0 .911 -(Bash-4.0 introduced the concept of a `shell compatibility le)108 470.4 -R -.15(ve)-.25 G .912(l', speci\214ed as a set of options to the shopt) -.15 F -.2(bu)108 482.4 S(iltin).2 E F1(compat31)3.378 E F0(,)A F1 -(compat32)3.378 E F0(,)A F1(compat40)3.378 E F0(,)A F1(compat41)3.378 E -F0 3.378(,a)C .878(nd so on\).)-3.378 F .877 -(There is only one current compatibility)5.878 F(le)108 494.4 Q -.15(ve) --.25 G 3.253(l-).15 G 3.253(-e)-3.253 G .753(ach option is mutually e) --3.253 F(xclusi)-.15 E -.15(ve)-.25 G 5.753(.T).15 G .753 -(he compatibility le)-5.753 F -.15(ve)-.25 G 3.254(li).15 G 3.254(si) --3.254 G .754(ntended to allo)-3.254 F 3.254(wu)-.25 G .754 -(sers to select be-)-3.254 F(ha)108 506.4 Q 1.084(vior from pre)-.2 F -1.084(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F -1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.583(ym)-.15 G 1.083 -(igrate scripts to use)-3.583 F(current features and beha)108 518.4 Q -(vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G -(ntended to be a temporary solution.)-2.5 E 1.456 -(This section does not mention beha)108 535.2 R 1.457 -(vior that is standard for a particular v)-.2 F 1.457 -(ersion \(e.g., setting)-.15 F F1(compat32)3.957 E F0 .887 -(means that quoting the rhs of the re)108 547.2 R(ge)-.15 E .886 -(xp matching operator quotes special re)-.15 F(ge)-.15 E .886 -(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 559.2 Q -(ault beha)-.1 E(vior in bash-3.2 and abo)-.2 E -.15(ve)-.15 G(\).).15 E -.522(If a user enables, say)108 576 R(,)-.65 E F1(compat32)3.023 E F0 -3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha)-.25 -F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .523 -(ls up to and includ-).15 F .26(ing the current compatibility le)108 588 -R -.15(ve)-.25 G 2.76(l. The).15 F .259 -(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.759(lc).15 -G .259(ontrols beha)-2.759 F .259(vior that changed)-.2 F 1.645 -(in that v)108 600 R 1.646(ersion of)-.15 F F1(bash)4.146 E F0 4.146(,b) -C 1.646(ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b) --.2 H 1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.646 -(or instance, the)-.15 F .761 -(change to use locale-based comparisons with the)108 612 R F1([[)3.261 E -F0 .76(command came in bash-4.1, and earlier v)3.261 F .76(ersions used) --.15 F 1.904(ASCII-based comparisons, so enabling)108 624 R F1(compat32) -4.404 E F0 1.905(will enable ASCII-based comparisons as well.)4.404 F -(That)6.905 E .296(granularity may not be suf)108 636 R .296 -(\214cient for all uses, and as a result users should emplo)-.25 F 2.796 -(yc)-.1 G .295(ompatibility le)-2.796 F -.15(ve)-.25 G .295(ls care-).15 -F(fully)108 648 Q 5(.R)-.65 G(ead the documentation for a particular fe\ -ature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .531 -(Bash-4.3 introduced a ne)108 664.8 R 3.031(ws)-.25 G .531(hell v)-3.031 -F(ariable:)-.25 E F3 -.27(BA)3.031 G(SH_COMP).27 E -.855(AT)-.666 G F4 -(.).855 E F0 .531(The v)5.031 F .531(alue assigned to this v)-.25 F .532 -(ariable \(a decimal)-.25 F -.15(ve)108 676.8 S .108(rsion number lik) -.15 F 2.608(e4)-.1 G .108(.2, or an inte)-2.608 F .108 -(ger corresponding to the)-.15 F F1(compat)2.607 E F2(NN)A F0 .107 -(option, lik)2.607 F 2.607(e4)-.1 G .107(2\) determines the com-)-2.607 -F(patibility le)108 688.8 Q -.15(ve)-.25 G(l.).15 E .387 -(Starting with bash-4.4, Bash has be)108 705.6 R .388 -(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.888 -(ls. Ev).15 F(entually)-.15 E 2.888(,t)-.65 G .388(he options will) --2.888 F(be remo)108 717.6 Q -.15(ve)-.15 G 2.5(di).15 G 2.5(nf)-2.5 G --.2(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F3 -.27(BA)2.5 G(SH_COMP).27 E -.855 -(AT)-.666 G F4(.).855 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(80)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 2.5(0u)144 84 S +(nless the shell is a login shell and)-2.5 E/F1 10/Times-Bold@0 SF +2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E F1 +(test)108 100.8 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)108 +112.8 Q F2 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878 +(Return a status of 0 \(true\) or 1 \(f)144 112.8 R .877 +(alse\) depending on the e)-.1 F -.25(va)-.25 G .877 +(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)144 124.8 +S(pr).2 E F0 5.53(.E).73 G .53 +(ach operator and operand must be a separate ar)-5.53 F 3.03 +(gument. Expressions)-.18 F .53(are composed of the)3.03 F 1.361 +(primaries described abo)144 136.8 R 1.661 -.15(ve u)-.15 H(nder).15 E +/F3 9/Times-Bold@0 SF(CONDITION)3.861 E 1.36(AL EXPRESSIONS)-.18 F/F4 9 +/Times-Roman@0 SF(.)A F1(test)5.86 E F0 1.36(does not accept an)3.86 F +3.86(yo)-.15 G(p-)-3.86 E(tions, nor does it accept and ignore an ar)144 +148.8 Q(gument of)-.18 E F12.5 E F0 +(as signifying the end of options.)2.5 E .785 +(Expressions may be combined using the follo)144 166.8 R .786 +(wing operators, listed in decreasing order of prece-)-.25 F 3.412 +(dence. The)144 178.8 R -.25(eva)3.412 G .912 +(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F +4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F +(used when there are \214v)144 190.8 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G +(ore ar)-2.5 E(guments.)-.18 E F1(!)144 202.8 Q F2 -.2(ex)2.5 G(pr).2 E +F0 -.35(Tr)180 202.8 S(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 +E(alse.)-.1 E F1(\()144 214.8 Q F2 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 +.26(Returns the v)180 214.8 R .26(alue of)-.25 F F2 -.2(ex)2.76 G(pr).2 +E F0 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26 +(rride the normal precedence of opera-).15 F(tors.)180 226.8 Q F2 -.2 +(ex)144 238.8 S(pr1).2 E F02.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 +-.35(Tr)180 250.8 S(ue if both).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 +E F2 -.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F2 -.2(ex)144 262.8 S +(pr1).2 E F02.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 +274.8 S(ue if either).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F2 -.2 +(ex)2.5 G(pr2).2 E F0(is true.)2.52 E F1(test)144 291.6 Q F0(and)2.5 E +F1([)2.5 E F0 -.25(eva)2.5 G(luate conditional e).25 E +(xpressions using a set of rules based on the number of ar)-.15 E +(guments.)-.18 E 2.5(0a)144 309.6 S -.18(rg)-2.5 G(uments).18 E(The e) +180 321.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 333.6 S -.18 +(rg)-2.5 G(ument).18 E(The e)180 345.6 Q +(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 +E 2.5(2a)144 357.6 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) +180 369.6 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87 +F .37(xpression is true if and only if the second ar)-.15 F .37 +(gument is null.)-.18 F .379(If the \214rst ar)180 381.6 R .38 +(gument is one of the unary conditional operators listed abo)-.18 F .68 +-.15(ve u)-.15 H(nder).15 E F3(CONDI-)2.88 E(TION)180 393.6 Q .553 +(AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552 +(xpression is true if the unary test is true.)-.15 F .552 +(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 405.6 Q +(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E +(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 417.6 S -.18(rg)-2.5 G +(uments).18 E .236(The follo)180 429.6 R .236 +(wing conditions are applied in the order listed.)-.25 F .236 +(If the second ar)5.236 F .236(gument is one of)-.18 F .855 +(the binary conditional operators listed abo)180 441.6 R 1.155 -.15 +(ve u)-.15 H(nder).15 E F3(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F +F4(,)A F0(the)3.104 E .578(result of the e)180 453.6 R .578(xpression i\ +s the result of the binary test using the \214rst and third ar)-.15 F +(guments)-.18 E 1.333(as operands.)180 465.6 R(The)6.333 E F13.833 +E F0(and)3.833 E F13.832 E F0 1.332 +(operators are considered binary operators when there are)3.832 F .558 +(three ar)180 477.6 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058 +F .558(gument is)-.18 F F1(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F +.558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F +(o-ar)-.1 E(gument)-.18 E .521(test using the second and third ar)180 +489.6 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .52 +(gument is e)-.18 F(xactly)-.15 E F1(\()3.02 E F0 .52(and the third)3.02 +F(ar)180 501.6 Q .485(gument is e)-.18 F(xactly)-.15 E F1(\))2.985 E F0 +2.985(,t)C .485(he result is the one-ar)-2.985 F .485 +(gument test of the second ar)-.18 F 2.985(gument. Other)-.18 F(-)-.2 E +(wise, the e)180 513.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 +525.6 S -.18(rg)-2.5 G(uments).18 E .43(The follo)180 537.6 R .43 +(wing conditions are applied in the order listed.)-.25 F .429 +(If the \214rst ar)5.429 F .429(gument is)-.18 F F1(!)2.929 E F0 2.929 +(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 549.6 R -.05(ga)-.15 +G 1.314(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314 +(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.745 +(ments. the)180 561.6 R(tw)2.745 E(o-ar)-.1 E .245 +(gument test using the second and third ar)-.18 F 2.744(guments. If)-.18 +F .244(the \214rst ar)2.744 F(gument)-.18 E .309(is e)180 573.6 R +(xactly)-.15 E F1(\()2.809 E F0 .309(and the fourth ar)2.809 F .309 +(gument is e)-.18 F(xactly)-.15 E F1(\))2.809 E F0 2.809(,t)C .31 +(he result is the tw)-2.809 F(o-ar)-.1 E .31(gument test of the)-.18 F +.184(second and third ar)180 585.6 R 2.684(guments. Otherwise,)-.18 F +.184(the e)2.684 F .183(xpression is parsed and e)-.15 F -.25(va)-.25 G +.183(luated according).25 F(to precedence using the rules listed abo)180 +597.6 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 609.6 S 2.5(rm)-2.5 G(ore ar) +-2.5 E(guments)-.18 E 1.635(The e)180 621.6 R 1.635 +(xpression is parsed and e)-.15 F -.25(va)-.25 G 1.635 +(luated according to precedence using the rules listed).25 F(abo)180 +633.6 Q -.15(ve)-.15 G(.).15 E(When used with)144 651.6 Q F1(test)2.5 E +F0(or)2.5 E F1([)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E F0(and)2.5 E F1 +(>)2.5 E F0(operators sort le)2.5 E +(xicographically using ASCII ordering.)-.15 E F1(times)108 668.4 Q F0 +1.229(Print the accumulated user and system times for the shell and for\ + processes run from the shell.)144 668.4 R(The return status is 0.)144 +680.4 Q F1(trap)108 697.2 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E +F2(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...])2.5 E .682(The command) +144 709.2 R F2(ar)3.512 E(g)-.37 E F0 .682(is to be read and e)3.402 F +-.15(xe)-.15 G .682(cuted when the shell recei).15 F -.15(ve)-.25 G +3.183(ss).15 G(ignal\(s\))-3.183 E F2(sigspec)3.523 E F0 5.683(.I).31 G +(f)-5.683 E F2(ar)3.513 E(g)-.37 E F0(is)3.403 E .609 +(absent \(and there is a single)144 721.2 R F2(sigspec)3.108 E F0 3.108 +(\)o)C(r)-3.108 E F13.108 E F0 3.108(,e)C .608 +(ach speci\214ed signal is reset to its original disposition)-3.108 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(80)185.955 E 0 Cg EP %%Page: 81 81 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.164 -(Bash-5.0 is the \214nal v)108 84 R 1.164 -(ersion for which there will be an indi)-.15 F 1.163 -(vidual shopt option for the pre)-.25 F 1.163(vious v)-.25 F(ersion.) --.15 E(Users should use)108 96 Q/F1 9/Times-Bold@0 SF -.27(BA)2.5 G -(SH_COMP).27 E -.855(AT)-.666 G F0(on bash-5.0 and later v)3.105 E -(ersions.)-.15 E 1.613(The follo)108 112.8 R 1.613 -(wing table describes the beha)-.25 F 1.613 -(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G -4.113(ls).15 G 4.114(etting. The)-4.113 F/F2 10/Times-Bold@0 SF(compat) -108 124.8 Q/F3 10/Times-Italic@0 SF(NN)A F0 1.186 -(tag is used as shorthand for setting the compatibility le)3.686 F -.15 -(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F3(NN)3.686 E F0 1.186 -(using one of the follo)3.686 F(wing)-.25 E 3.806(mechanisms. F)108 -136.8 R 1.306(or v)-.15 F 1.306 -(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G -3.807(lm).15 G 1.307(ay be set using the corresponding)-3.807 F F2 -(compat)108 148.8 Q F3(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502 -G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) --.15 F F1 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) -3.607 G .502(riable is preferred, and it).25 F -(is required for bash-5.1 and later v)108 160.8 Q(ersions.)-.15 E F2 -(compat31)108 177.6 Q F0<83>144 189.6 Q(quoting the rhs of the)180 189.6 -Q F2([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 -G 2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect) --.25 E F2(compat32)108 206.4 Q F0<83>144 218.4 Q .35 -(interrupting a command list such as "a ; b ; c" causes the e)180 218.4 -R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .018 -(in the list \(in bash-4.0 and later v)180 230.4 R .018 -(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.517(dt) -.15 G .017(he interrupt, so in-)-2.517 F -(terrupting one command in a list aborts the e)180 242.4 Q -.15(xe)-.15 -G(cution of the entire list\)).15 E F2(compat40)108 259.2 Q F0<83>144 -271.2 Q(the)180 271.2 Q F2(<)2.673 E F0(and)2.673 E F2(>)2.673 E F0 .173 -(operators to the)2.673 F F2([[)2.673 E F0 .173 -(command do not consider the current locale when compar)2.673 F(-)-.2 E -.068(ing strings; the)180 283.2 R 2.568(yu)-.15 G .068 -(se ASCII ordering.)-2.568 F .068(Bash v)5.068 F .067 -(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 295.2 Q F3 -(str)4.742 E(cmp)-.37 E F0 1.902 -(\(3\); bash-4.1 and later use the current locale').19 F 4.403(sc)-.55 G -1.903(ollation sequence and)-4.403 F F3(str)4.743 E(-)-.2 E(coll)180 -307.2 Q F0(\(3\).).51 E F2(compat41)108 324 Q F0<83>144 336 Q(in)180 336 -Q F3(posix)3.79 E F0(mode,)3.79 E F2(time)3.79 E F0 1.29(may be follo) -3.79 F 1.29(wed by options and still be recognized as a reserv)-.25 F -(ed)-.15 E -.1(wo)180 348 S(rd \(this is POSIX interpretation 267\)).1 E -<83>144 360 Q(in)180 360 Q F3(posix)2.708 E F0 .208 -(mode, the parser requires that an e)2.708 F -.15(ve)-.25 G 2.708(nn).15 -G .208(umber of single quotes occur in the)-2.708 F F3(wor)2.709 E(d) --.37 E F0 .282(portion of a double-quoted parameter e)180 372 R .282 -(xpansion and treats them specially)-.15 F 2.781(,s)-.65 G 2.781(ot) --2.781 G .281(hat charac-)-2.781 F(ters within the single quotes are co\ -nsidered quoted \(this is POSIX interpretation 221\))180 384 Q F2 -(compat42)108 400.8 Q F0<83>144 412.8 Q 1.055(the replacement string in\ - double-quoted pattern substitution does not under)180 412.8 R 1.056 -(go quote re-)-.18 F(mo)180 424.8 Q -.25(va)-.15 G(l, as it does in v) -.25 E(ersions after bash-4.2)-.15 E<83>144 436.8 Q .021 -(in posix mode, single quotes are considered special when e)180 436.8 R -.021(xpanding the)-.15 F F3(wor)2.52 E(d)-.37 E F0 .02(portion of a)2.52 -F .017(double-quoted parameter e)180 448.8 R .017 -(xpansion and can be used to quote a closing brace or other spe-)-.15 F -.999(cial character \(this is part of POSIX interpretation 221\); in la\ -ter v)180 460.8 R .998(ersions, single quotes)-.15 F -(are not special within double-quoted w)180 472.8 Q(ord e)-.1 E -(xpansions)-.15 E F2(compat43)108 489.6 Q F0<83>144 501.6 Q 1.07 -(the shell does not print a w)180 501.6 R 1.071 -(arning message if an attempt is made to use a quoted com-)-.1 F .249 -(pound assignment as an ar)180 513.6 R .248 -(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .248 -(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 525.6 Q -<83>144 537.6 Q -.1(wo)180 537.6 S .5(rd e).1 F .501 -(xpansion errors are considered non-f)-.15 F .501 -(atal errors that cause the current command to)-.1 F -.1(fa)180 549.6 S -.605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605 -(osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak) --.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605 -(atal errors that cause the)-.1 F(shell to e)180 561.6 Q(xit\))-.15 E -<83>144 573.6 Q .354(when e)180 573.6 R -.15(xe)-.15 G .354 -(cuting a shell function, the loop state \(while/until/etc.\)).15 F .355 -(is not reset, so)5.354 F F2(br)2.855 E(eak)-.18 E F0(or)2.855 E F2 -(continue)180 585.6 Q F0 .052 -(in that function will break or continue loops in the calling conte) -2.553 F .052(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) -180 597.6 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 614.4 Q F0<83> -144 626.4 Q .719(the shell sets up the v)180 626.4 R .719(alues used by) --.25 F F1 -.27(BA)3.219 G(SH_ARGV).27 E F0(and)2.969 E F1 -.27(BA)3.219 -G(SH_ARGC).27 E F0 .719(so the)2.969 F 3.219(yc)-.15 G .719(an e)-3.219 -F(xpand)-.15 E(to the shell')180 638.4 Q 2.5(sp)-.55 G -(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fe)-2.5 G -(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 650.4 Q -2.635(as)180 650.4 S .135(ubshell inherits loops from its parent conte) --2.635 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F0(or)2.635 E F2 -(continue)2.634 E F0 .134(will cause the sub-)2.634 F(shell to e)180 -662.4 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre) -2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 674.4 Q -.25(va) -180 674.4 S .618(riable assignments preceding b).25 F .618(uiltins lik) --.2 F(e)-.1 E F2(export)3.118 E F0(and)3.118 E F2 -.18(re)3.118 G -(adonly).18 E F0 .618(that set attrib)3.118 F .619(utes con-)-.2 F .12 -(tinue to af)180 686.4 R .12(fect v)-.25 F .119 -(ariables with the same name in the calling en)-.25 F .119(vironment e) --.4 F -.15(ve)-.25 G 2.619(ni).15 G 2.619(ft)-2.619 G .119(he shell is) --2.619 F(not in posix mode)180 698.4 Q(GNU Bash 5.1)72 768 Q -(2020 October 29)141.235 E(81)190.395 E 0 Cg EP +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .658(\(the v)144 +84 R .658(alue it had upon entrance to the shell\).)-.25 F(If)5.658 E/F1 +10/Times-Italic@0 SF(ar)3.488 E(g)-.37 E F0 .659 +(is the null string the signal speci\214ed by each)3.378 F F1(sigspec) +144.34 96 Q F0 .581(is ignored by the shell and by the commands it in) +3.391 F -.2(vo)-.4 G -.1(ke).2 G 3.08(s. If).1 F F1(ar)3.41 E(g)-.37 E +F0 .58(is not present and)3.3 F/F2 10/Times-Bold@0 SF3.08 E F0 +(has)3.08 E 1.214 +(been supplied, then the trap commands associated with each)144 108 R F1 +(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215 F +(gu-)-.18 E .86(ments are supplied or if only)144 120 R F23.36 E +F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F2(trap)3.36 E F0 .86 +(prints the list of commands associated with each)3.36 F 2.83 +(signal. The)144 132 R F22.83 E F0 .33(option causes the shell to\ + print a list of signal names and their corresponding num-)2.83 F 4.311 +(bers. Each)144 144 R F1(sigspec)4.651 E F0 1.811 +(is either a signal name de\214ned in <)4.621 F F1(signal.h)A F0 1.81 +(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E +(names are case insensiti)144 156 Q .3 -.15(ve a)-.25 H(nd the).15 E/F3 +9/Times-Bold@0 SF(SIG)2.5 E F0(pre\214x is optional.)2.25 E .666(If a) +144 174 R F1(sigspec)3.506 E F0(is)3.476 E F3(EXIT)3.166 E F0 .666 +(\(0\) the command)2.916 F F1(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F +-.15(xe)-.15 G .666(cuted on e).15 F .667(xit from the shell.)-.15 F +.667(If a)5.667 F F1(sigspec)3.507 E F0(is)3.477 E F3(DE-)3.167 E -.09 +(BU)144 186 S(G).09 E/F4 9/Times-Roman@0 SF(,)A F0 .484(the command) +2.734 F F1(ar)3.314 E(g)-.37 E F0 .484(is e)3.204 F -.15(xe)-.15 G .484 +(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F1 .483(simple command) +2.984 F F0(,)A F1(for)2.983 E F0(command,)2.983 E F1(case)2.983 E F0 +(command,)2.983 E F1(select)144 198 Q F0 .562(command, e)3.062 F -.15 +(ve)-.25 G .563(ry arithmetic).15 F F1(for)3.063 E F0 .563 +(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .563 +(cutes in a shell).15 F .623(function \(see)144 210 R F3 .622 +(SHELL GRAMMAR)3.122 F F0(abo)2.872 E -.15(ve)-.15 G 3.122(\). Refer).15 +F .622(to the description of the)3.122 F F2(extdeb)3.122 E(ug)-.2 E F0 +.622(option to the)3.122 F F2(shopt)144 222 Q F0 -.2(bu)2.996 G .496 +(iltin for details of its ef).2 F .496(fect on the)-.25 F F2(DEB)2.996 E +(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F1(sigspec)3.336 E F0(is) +3.306 E F3(RETURN)2.996 E F4(,)A F0 .496(the command)2.746 F F1(ar) +144.33 234 Q(g)-.37 E F0 .18(is e)2.9 F -.15(xe)-.15 G .18 +(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G .18 +(cuted with the).15 F F2(.)2.68 E F0(or)2.68 E F2(sour)2.68 E(ce)-.18 E +F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F -.15(exe)144 246 S(cuting.) +.15 E .96(If a)144 264 R F1(sigspec)3.8 E F0(is)3.77 E F3(ERR)3.46 E F4 +(,)A F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0 .961(is e)3.681 +F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G 3.461(rap).15 G +.961(ipeline \(which may consist of a)-3.461 F .185(single simple comma\ +nd\), a list, or a compound command returns a non\255zero e)144 276 R +.184(xit status, subject to)-.15 F .451(the follo)144 288 R .451 +(wing conditions.)-.25 F(The)5.451 E F3(ERR)2.951 E F0 .451 +(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .452 +(ailed command is part of the com-)-.1 F .388 +(mand list immediately follo)144 300 R .388(wing a)-.25 F F2(while)2.888 +E F0(or)2.888 E F2(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388 +(ord, part of the test in an)-.1 F F1(if)2.897 E F0 .387 +(statement, part)4.847 F .777(of a command e)144 312 R -.15(xe)-.15 G +.778(cuted in a).15 F F2(&&)3.278 E F0(or)3.278 E F2(||)3.278 E F0 .778 +(list e)3.278 F .778(xcept the command follo)-.15 F .778 +(wing the \214nal)-.25 F F2(&&)3.278 E F0(or)3.278 E F2(||)3.278 E F0 +3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 324 R 1.28 +(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v)-3.78 +F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F F2(!) +3.78 E F0(.)A(These are the same conditions obe)144 336 Q(yed by the) +-.15 E F2(err)2.5 E(exit)-.18 E F0(\()2.5 E F2A F0 2.5(\)o)C +(ption.)-2.5 E .132 +(Signals ignored upon entry to the shell cannot be trapped or reset.)144 +354 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117 +(ing ignored are reset to their original v)144 366 R .117 +(alues in a subshell or subshell en)-.25 F .117 +(vironment when one is cre-)-.4 F 2.5(ated. The)144 378 R +(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F1(sigspec)2.84 E F0 +(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F2(trap)2.5 E F0 +(returns true.)2.5 E F2(type)108 394.8 Q F0([)2.5 E F2(\255aftpP)A F0(]) +A F1(name)2.5 E F0([)2.5 E F1(name)A F0(...])2.5 E -.4(Wi)144 406.8 S +.173(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F1 +(name)3.033 E F0 -.1(wo)2.853 G .174 +(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F +F2144 418.8 Q F0 .715(option is used,)3.215 F F2(type)3.215 E F0 +.715(prints a string which is one of)3.215 F F1(alias)3.545 E F0(,).27 E +F1 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F1(function)5.185 E F0 +(,).24 E F1 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F1 +(\214le)5.125 E F0(if)3.395 E F1(name)144.36 430.8 Q F0 .086 +(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086 +(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15 +(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F1 +(name)2.947 E F0 .087(is not)2.767 F .119 +(found, then nothing is printed, and an e)144 442.8 R .118 +(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F +F22.618 E F0 .118(option is used,)2.618 F F2(type)2.618 E F0 .855 +(either returns the name of the disk \214le that w)144 454.8 R .855 +(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F1(name)3.715 E F0 +.855(were speci\214ed as a com-)3.535 F .529(mand name, or nothing if) +144 466.8 R/F5 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028 +G .528(uld not return).1 F F1(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528 +E F23.028 E F0 .528(option forces a)3.028 F F3 -.666(PA)3.028 G +(TH)-.189 E F0 .006(search for each)144 478.8 R F1(name)2.506 E F0 2.506 +(,e)C -.15(ve)-2.756 G 2.506(ni).15 G(f)-2.506 E F5 .007(type -t name) +2.506 F F0 -.1(wo)2.507 G .007(uld not return).1 F F1(\214le)4.417 E F0 +5.007(.I).18 G 2.507(fac)-5.007 G .007(ommand is hashed,)-2.507 F F2 +2.507 E F0(and)144 490.8 Q F23.231 E F0 .731 +(print the hashed v)3.231 F .73 +(alue, which is not necessarily the \214le that appears \214rst in)-.25 +F F3 -.666(PA)3.23 G(TH)-.189 E F4(.)A F0 .73(If the)5.23 F F2144 +502.8 Q F0 .823(option is used,)3.323 F F2(type)3.323 E F0 .824 +(prints all of the places that contain an e)3.323 F -.15(xe)-.15 G .824 +(cutable named).15 F F1(name)3.684 E F0 5.824(.T).18 G .824(his in-) +-5.824 F 1.176(cludes aliases and functions, if and only if the)144 +514.8 R F23.676 E F0 1.176(option is not also used.)3.676 F 1.176 +(The table of hashed)6.176 F 1.223(commands is not consulted when using) +144 526.8 R F23.723 E F0 6.223(.T)C(he)-6.223 E F23.723 E F0 +1.223(option suppresses shell function lookup, as)3.723 F .326(with the) +144 538.8 R F2(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F2(type) +5.326 E F0 .326(returns true if all of the ar)2.826 F .325 +(guments are found, f)-.18 F .325(alse if an)-.1 F 2.825(ya)-.15 G .325 +(re not)-2.825 F(found.)144 550.8 Q F2(ulimit)108 567.6 Q F0([)2.5 E F2 +(\255HS)A F0(])A F22.5 E(ulimit)108 579.6 Q F0([)2.5 E F2(\255HS)A +F0 2.5(][)C F2(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F1 +(limit)A F0(]])A(Pro)144 591.6 Q .243(vides control o)-.15 F -.15(ve) +-.15 G 2.743(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244 +(ilable to the shell and to processes started by it, on systems).25 F +.944(that allo)144 603.6 R 3.444(ws)-.25 G .944(uch control.)-3.444 F +(The)5.944 E F23.444 E F0(and)3.444 E F23.444 E F0 .943 +(options specify that the hard or soft limit is set for the)3.444 F(gi) +144 615.6 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208 +(hard limit cannot be increased by a non-root user once it is set; a so\ +ft limit may)2.708 F .426(be increased up to the v)144 627.6 R .426 +(alue of the hard limit.)-.25 F .425(If neither)5.426 F F22.925 E +F0(nor)2.925 E F22.925 E F0 .425 +(is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144 +639.6 R .139(The v)5.139 F .139(alue of)-.25 F F1(limit)2.729 E F0 .139 +(can be a number in the unit speci\214ed for the resource or one)3.319 F +.742(of the special v)144 651.6 R(alues)-.25 E F2(hard)3.242 E F0(,)A F2 +(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F2(unlimited)3.241 E F0 3.241(,w) +C .741(hich stand for the current hard limit, the current)-3.241 F .023 +(soft limit, and no limit, respecti)144 663.6 R -.15(ve)-.25 G(ly).15 E +5.023(.I)-.65 G(f)-5.023 E F1(limit)2.613 E F0 .023 +(is omitted, the current v)3.203 F .023 +(alue of the soft limit of the re-)-.25 F .985 +(source is printed, unless the)144 675.6 R F23.485 E F0 .984 +(option is gi)3.485 F -.15(ve)-.25 G 3.484(n. When).15 F .984 +(more than one resource is speci\214ed, the)3.484 F .7 +(limit name and unit, if appropriate, are printed before the v)144 687.6 +R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 +699.6 Q(ws:)-.25 E F2144 711.6 Q F0 +(All current limits are reported; no limits are set)180 711.6 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(81)185.955 E 0 Cg EP %%Page: 82 82 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(compat50)108 84 Q F0<83>144 96 Q 1.209(Bash-5.1 changed the w)180 96 -R(ay)-.1 E/F2 9/Times-Bold@0 SF($RANDOM)3.709 E F0 1.209 -(is generated to introduce slightly more random-)3.459 F 1.019 -(ness. If the shell compatibility le)180 108 R -.15(ve)-.25 G 3.518(li) -.15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E 3.518 -(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.018 -(rts to the method from).25 F .732(bash-5.0 and pre)180 120 R .732 -(vious v)-.25 F .733 -(ersions, so seeding the random number generator by assigning a)-.15 F --.25(va)180 132 S(lue to).25 E F2(RANDOM)2.5 E F0 -(will produce the same sequence as in bash-5.0)2.25 E<83>144 144 Q .696 -(If the command hash table is empty)180 144 R 3.196(,b)-.65 G .696 -(ash v)-3.196 F .695(ersions prior to bash-5.1 printed an informa-)-.15 -F 1.32(tional message to that ef)180 156 R 1.321(fect, e)-.25 F -.15(ve) --.25 G 3.821(nw).15 G 1.321 -(hen producing output that can be reused as input.)-3.821 F -(Bash-5.1 suppresses that message when the)180 168 Q F12.5 E F0 -(option is supplied.)2.5 E/F3 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 -184.8 Q F0(If)108 196.8 Q F1(bash)3.582 E F0 1.081 -(is started with the name)3.581 F F1(rbash)3.581 E F0 3.581(,o)C 3.581 -(rt)-3.581 G(he)-3.581 E F13.581 E F0 1.081 -(option is supplied at in)3.581 F -.2(vo)-.4 G 1.081 -(cation, the shell becomes re-).2 F 2.976(stricted. A)108 208.8 R .476 -(restricted shell is used to set up an en)2.976 F .476 -(vironment more controlled than the standard shell.)-.4 F .477(It be-) -5.477 F(ha)108 220.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E -F1(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E -(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 237.6 Q -(changing directories with)144 237.6 Q F1(cd)2.5 E F0<83>108 254.4 Q -(setting or unsetting the v)144 254.4 Q(alues of)-.25 E F2(SHELL)2.5 E -/F4 9/Times-Roman@0 SF(,)A F2 -.666(PA)2.25 G(TH)-.189 E F4(,)A F2 -(HISTFILE)2.25 E F4(,)A F2(ENV)2.25 E F4(,)A F0(or)2.25 E F2 -.27(BA)2.5 -G(SH_ENV).27 E F0<83>108 271.2 Q(specifying command names containing)144 -271.2 Q F1(/)2.5 E F0<83>108 288 Q(specifying a \214lename containing a) -144 288 Q F1(/)2.5 E F0(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E -F0 -.2(bu)5 G(iltin command).2 E<83>108 304.8 Q -(specifying a \214lename containing a slash as an ar)144 304.8 Q -(gument to the)-.18 E F1(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2 -E<83>108 321.6 Q .45 -(specifying a \214lename containing a slash as an ar)144 321.6 R .449 -(gument to the)-.18 F F12.949 E F0 .449(option to the)2.949 F F1 -(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 333.6 Q -<83>108 350.4 Q(importing function de\214nitions from the shell en)144 -350.4 Q(vironment at startup)-.4 E<83>108 367.2 Q(parsing the v)144 -367.2 Q(alue of)-.25 E F2(SHELLOPTS)2.5 E F0(from the shell en)2.25 E -(vironment at startup)-.4 E<83>108 384 Q(redirecting output using the >\ -, >|, <>, >&, &>, and >> redirection operators)144 384 Q<83>108 400.8 Q -(using the)144 400.8 Q F1(exec)2.5 E F0 -.2(bu)2.5 G -(iltin command to replace the shell with another command).2 E<83>108 -417.6 Q(adding or deleting b)144 417.6 Q(uiltin commands with the)-.2 E -F12.5 E F0(and)2.5 E F12.5 E F0(options to the)2.5 E F1 -(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 434.4 Q -(using the)144 434.4 Q F1(enable)2.5 E F0 -.2(bu)2.5 G -(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 -451.2 Q(specifying the)144 451.2 Q F12.5 E F0(option to the)2.5 E -F1(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 468 Q -(turning of)144 468 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F1 -(set +r)2.5 E F0(or)2.5 E F1(set +o r)2.5 E(estricted)-.18 E F0(.)A -(These restrictions are enforced after an)108 484.8 Q 2.5(ys)-.15 G -(tartup \214les are read.)-2.5 E 1.566 -(When a command that is found to be a shell script is e)108 501.6 R -.15 -(xe)-.15 G 1.567(cuted \(see).15 F F2 1.567(COMMAND EXECUTION)4.067 F F0 -(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1(rbash)108 513.6 Q F0(turns of) -2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15 -E(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E F3(SEE ALSO)72 -530.4 Q/F5 10/Times-Italic@0 SF(Bash Refer)108 542.4 Q(ence Manual)-.37 -E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F5 -(The Gnu Readline Libr)108 554.4 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E -(ox and Chet Rame)-.15 E(y)-.15 E F5(The Gnu History Libr)108 566.4 Q -(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E -F5 -.8(Po)108 578.4 S(rtable Oper).8 E -(ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities) --.8 E F0 2.5(,I)C(EEE --)-2.5 E(http://pubs.opengroup.or)144 590.4 Q -(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 602.4 Q -(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F5(sh) -108 614.4 Q F0(\(1\),)A F5(ksh)2.5 E F0(\(1\),)A F5(csh)2.5 E F0(\(1\))A -F5(emacs)108 626.4 Q F0(\(1\),)A F5(vi)2.5 E F0(\(1\))A F5 -.37(re)108 -638.4 S(adline).37 E F0(\(3\))A F3(FILES)72 655.2 Q F5(/bin/bash)109.666 -667.2 Q F0(The)144 679.2 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E -F5(/etc/pr)109.666 691.2 Q(o\214le)-.45 E F0 -(The systemwide initialization \214le, e)144 703.2 Q -.15(xe)-.15 G -(cuted for login shells).15 E(GNU Bash 5.1)72 768 Q(2020 October 29) -141.235 E(82)190.395 E 0 Cg EP +SF144 84 Q F0(The maximum sock)180 84 Q(et b)-.1 E(uf)-.2 E +(fer size)-.25 E F1144 96 Q F0 +(The maximum size of core \214les created)180 96 Q F1144 108 Q F0 +(The maximum size of a process')180 108 Q 2.5(sd)-.55 G(ata se)-2.5 E +(gment)-.15 E F1144 120 Q F0 +(The maximum scheduling priority \("nice"\))180 120 Q F1144 132 Q +F0(The maximum size of \214les written by the shell and its children)180 +132 Q F1144 144 Q F0(The maximum number of pending signals)180 144 +Q F1144 156 Q F0 +(The maximum number of kqueues that may be allocated)180 156 Q F1 +144 168 Q F0(The maximum size that may be lock)180 168 Q(ed into memory) +-.1 E F1144 180 Q F0(The maximum resident set size \(man)180 180 Q +2.5(ys)-.15 G(ystems do not honor this limit\))-2.5 E F1144 192 Q +F0 .791(The maximum number of open \214le descriptors \(most systems do\ + not allo)180 192 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F +(be set\))180 204 Q F1144 216 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))180 216 Q F1 +144 228 Q F0(The maximum number of bytes in POSIX message queues) +180 228 Q F1144 240 Q F0 +(The maximum real-time scheduling priority)180 240 Q F1144 252 Q +F0(The maximum stack size)180 252 Q F1144 264 Q F0 +(The maximum amount of cpu time in seconds)180 264 Q F1144 276 Q +F0(The maximum number of processes a)180 276 Q -.25(va)-.2 G +(ilable to a single user).25 E F1144 288 Q F0 .47 +(The maximum amount of virtual memory a)180 288 R -.25(va)-.2 G .47 +(ilable to the shell and, on some systems, to).25 F(its children)180 300 +Q F1144 312 Q F0(The maximum number of \214le locks)180 312 Q F1 +144 324 Q F0(The maximum number of pseudoterminals)180 324 Q F1 +144 336 Q F0(The maximum time a real-time process can run before \ +blocking, in microseconds)180 336 Q F1144 348 Q F0 +(The maximum number of threads)180 348 Q(If)144 364.8 Q/F2 10 +/Times-Italic@0 SF(limit)3.058 E F0 .468(is gi)3.648 F -.15(ve)-.25 G +.468(n, and the).15 F F12.968 E F0 .468(option is not used,)2.968 +F F2(limit)2.968 E F0 .468(is the ne)2.968 F 2.968(wv)-.25 G .468 +(alue of the speci\214ed resource.)-3.218 F(If)5.468 E .044 +(no option is gi)144 376.8 R -.15(ve)-.25 G .044(n, then).15 F F1 +2.544 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045 +(lues are in 1024-byte increments, e)1.11 F .045(xcept for)-.15 F F1 +2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 +388.8 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F +F13.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) +-3.17 F F13.17 E F0(,)A F13.17 E F0(,)A F13.17 E F0(,) +A F1144 400.8 Q F0(,)A F13.736 E F0 3.736(,a)C(nd)-3.736 E +F13.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236 +(alues; and, when in posix mode,)-.25 F F13.736 E F0(and)3.736 E +F13.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F .239 +(512-byte increments.)144 412.8 R .238 +(The return status is 0 unless an in)5.239 F -.25(va)-.4 G .238 +(lid option or ar).25 F .238(gument is supplied, or an)-.18 F +(error occurs while setting a ne)144 424.8 Q 2.5(wl)-.25 G(imit.)-2.5 E +F1(umask)108 441.6 Q F0([)2.5 E F1A F0 2.5(][)C F1-2.5 E F0 +2.5(][)C F2(mode)-2.5 E F0(])A .18 +(The user \214le-creation mask is set to)144 453.6 R F2(mode)3.06 E F0 +5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18 +(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ +therwise it is interpreted as a symbolic mode mask similar to that acce\ +pted by)144 465.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 +477.6 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382 +(alue of the mask is printed.)-.25 F(The)5.382 E F12.882 E F0 .382 +(option causes the mask to be)2.882 F .547 +(printed in symbolic form; the def)144 489.6 R .547 +(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G +(he)-3.047 E F13.047 E F0 .547(option is supplied, and)3.047 F F2 +(mode)144.38 501.6 Q F0 .551 +(is omitted, the output is in a form that may be reused as input.)3.231 +F .552(The return status is 0 if the)5.552 F(mode w)144 513.6 Q +(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E +(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1 +(unalias)108 530.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0 +(...])2.5 E(Remo)144 542.4 Q 1.058 -.15(ve e)-.15 H(ach).15 E F2(name) +3.258 E F0 .758(from the list of de\214ned aliases.)3.258 F(If)5.758 E +F13.258 E F0 .757(is supplied, all alias de\214nitions are re-) +3.258 F(mo)144 554.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E +(alue is true unless a supplied)-.25 E F2(name)2.86 E F0 +(is not a de\214ned alias.)2.68 E F1(unset)108 571.2 Q F0<5bad>2.5 E F1 +(fv)A F0 2.5(][)C-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...]) +2.5 E -.15(Fo)144 583.2 S 3.803(re).15 G(ach)-3.803 E F2(name)4.163 E F0 +3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H 1.303 +(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303 +(If the)6.303 F F13.804 E F0 1.304(option is gi)3.804 F -.15(ve) +-.25 G 1.304(n, each).15 F F2(name)144.36 595.2 Q F0 .465 +(refers to a shell v)3.145 F .464(ariable, and that v)-.25 F .464 +(ariable is remo)-.25 F -.15(ve)-.15 G 2.964(d. Read-only).15 F -.25(va) +2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 607.2 R F1 +2.768 E F0 .269(is speci\214ed, each)2.768 F F2(name)3.129 E F0 +.269(refers to a shell function, and the function de\214nition is remo) +2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 619.2 R F12.904 E +F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v) +2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0 +(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .403(will be unset)2.904 F +.719(rather than the v)144 631.2 R .719(ariable it references.)-.25 F F1 +5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1 +3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 +(are supplied, each)144 643.2 R F2(name)3.237 E F0 .737(refers to a v) +3.237 F .737(ariable; if there is no v)-.25 F .736 +(ariable by that name, a function with)-.25 F 1.761(that name, if an)144 +655.2 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F +1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve) +-.15 G 4.262(df).15 G 1.762(rom the en)-4.262 F(vironment)-.4 E 3.172 +(passed to subsequent commands.)144 667.2 R 3.172(If an)8.172 F 5.672 +(yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES) +.27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A +F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 679.2 S +(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3 +-.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E +F4(,)A F3(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL) +144 691.2 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN) +2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67 +E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144 +703.2 Q F4(,)A F0(or)4.029 E F3(SRANDOM)4.279 E F0 1.779(are unset, the) +4.029 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F +-.15(ve)-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G +1.78(re subse-)-4.28 F(quently reset.)144 715.2 Q(The e)5 E +(xit status is true unless a)-.15 E F2(name)2.86 E F0 +(is readonly or may not be unset.)2.68 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(82)185.955 E 0 Cg EP %%Page: 83 83 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF(~/.bash_pr)109.666 84 Q(o\214le)-.45 E F0 -(The personal initialization \214le, e)144 96 Q -.15(xe)-.15 G -(cuted for login shells).15 E F1(~/.bashr)109.666 108 Q(c)-.37 E F0 -(The indi)144 120 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G -(-shell startup \214le).15 E F1(~/.bash_lo)109.666 132 Q(gout)-.1 E F0 -(The indi)144 144 Q(vidual login shell cleanup \214le, e)-.25 E -.15(xe) --.15 G(cuted when a login shell e).15 E(xits)-.15 E F1(~/.inputr)109.666 -156 Q(c)-.37 E F0(Indi)144 168 Q(vidual)-.25 E F1 -.37(re)2.5 G(adline) -.37 E F0(initialization \214le)2.5 E/F2 10.95/Times-Bold@0 SF -.548(AU) -72 184.8 S(THORS).548 E F0(Brian F)108 196.8 Q(ox, Free Softw)-.15 E -(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 208.8 Q(g)-.18 E -(Chet Rame)108 225.6 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv) --.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet.rame)108 -237.6 Q(y@case.edu)-.15 E F2 -.11(BU)72 254.4 S 2.738(GR).11 G(EPOR) --2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108 266.4 R .568(ug in)-.2 -F/F3 10/Times-Bold@0 SF(bash,)3.068 E F0 .568(you should report it.) -3.068 F .568(But \214rst, you should mak)5.568 F 3.068(es)-.1 G .568 -(ure that it really is a b)-3.068 F .567(ug, and)-.2 F 5.625 -(that it appears in the latest v)108 278.4 R 5.625(ersion of)-.15 F F3 -(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(wait)108 84 Q F0([)2.5 E F1(\255fn)A F0 2.5(][)C F1-2.5 E/F2 10 +/Times-Italic@0 SF(varname)2.5 E F0 2.5(][)C F2(id ...)-2.5 E F0(])A -.8 +(Wa)144 96 S .659(it for each speci\214ed child process and return its \ +termination status.).8 F(Each)5.659 E F2(id)3.169 E F0 .658 +(may be a process)3.928 F .008 +(ID or a job speci\214cation; if a job spec is gi)144 108 R -.15(ve)-.25 +G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009 +(ipeline are w)-2.509 F .009(aited for)-.1 F 5.009(.I)-.55 G(f)-5.009 E +F2(id)144.01 120 Q F0 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E F1 +(wait)2.942 E F0 -.1(wa)2.942 G .441 +(its for all running background jobs and the last-e).1 F -.15(xe)-.15 G +.441(cuted process substitu-).15 F .597 +(tion, if its process id is the same as)144 132 R F1($!)3.098 E F0 3.098 +(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598 F F1 +3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 144 Q F0 +-.1(wa)3.083 G .583(its for a single job from the list of).1 F F2(id) +3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 E +F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj)-.15 +G .582(ob, to complete and)-3.083 F .403(returns its e)144 156 R .403 +(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403 +(guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .573 +(are supplied and the shell has no unw)144 168 R .573 +(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572 +(If the)5.573 F F13.072 E F0 .572(option is)3.072 F .39 +(supplied, the process or job identi\214er of the job for which the e) +144 180 R .39(xit status is returned is assigned to)-.15 F .905(the v) +144 192 R(ariable)-.25 E F2(varname)3.405 E F0 .905 +(named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G +.905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E +(an)144 204 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 +(is useful only when the)3.89 F F13.89 E F0 1.39 +(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F13.89 E F0 +(option,)3.89 E .575(when job control is enabled, forces)144 216 R F1 +(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0 +.574(to terminate before returning its status, in-)3.075 F .635 +(stead of returning when it changes status.)144 228 R(If)5.635 E F2(id) +3.145 E F0 .635(speci\214es a non-e)3.905 F .635 +(xistent process or job, the return)-.15 F(status is 127.)144 240 Q +(Otherwise, the return status is the e)5 E +(xit status of the last process or job w)-.15 E(aited for)-.1 E(.)-.55 E +/F3 10.95/Times-Bold@0 SF(SHELL COMP)72 256.8 Q -1.04(AT)-.81 G +(IBILITY MODE)1.04 E F0 .912 +(Bash-4.0 introduced the concept of a `shell compatibility le)108 268.8 +R -.15(ve)-.25 G .912(l', speci\214ed as a set of options to the shopt) +.15 F -.2(bu)108 280.8 S(iltin).2 E F1(compat31)3.377 E F0(,)A F1 +(compat32)3.377 E F0(,)A F1(compat40)3.377 E F0(,)A F1(compat41)3.377 E +F0 3.378(,a)C .878(nd so on\).)-3.378 F .878 +(There is only one current compatibility)5.878 F(le)108 292.8 Q -.15(ve) +-.25 G 3.254(l-).15 G 3.254(-e)-3.254 G .754(ach option is mutually e) +-3.254 F(xclusi)-.15 E -.15(ve)-.25 G 5.754(.T).15 G .754 +(he compatibility le)-5.754 F -.15(ve)-.25 G 3.253(li).15 G 3.253(si) +-3.253 G .753(ntended to allo)-3.253 F 3.253(wu)-.25 G .753 +(sers to select be-)-3.253 F(ha)108 304.8 Q 1.083(vior from pre)-.2 F +1.083(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F +1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.584(ym)-.15 G 1.084 +(igrate scripts to use)-3.584 F(current features and beha)108 316.8 Q +(vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G +(ntended to be a temporary solution.)-2.5 E 1.457 +(This section does not mention beha)108 333.6 R 1.457 +(vior that is standard for a particular v)-.2 F 1.456 +(ersion \(e.g., setting)-.15 F F1(compat32)3.956 E F0 .886 +(means that quoting the rhs of the re)108 345.6 R(ge)-.15 E .886 +(xp matching operator quotes special re)-.15 F(ge)-.15 E .887 +(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 357.6 Q +(ault beha)-.1 E(vior in bash-3.2 and abo)-.2 E -.15(ve)-.15 G(\).).15 E +.523(If a user enables, say)108 374.4 R(,)-.65 E F1(compat32)3.023 E F0 +3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha)-.25 +F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .522 +(ls up to and includ-).15 F .259(ing the current compatibility le)108 +386.4 R -.15(ve)-.25 G 2.759(l. The).15 F .259 +(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.76(lc).15 G +.26(ontrols beha)-2.76 F .26(vior that changed)-.2 F 1.646(in that v)108 +398.4 R 1.646(ersion of)-.15 F F1(bash)4.146 E F0 4.146(,b)C 1.646 +(ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b)-.2 H +1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.645 +(or instance, the)-.15 F .76 +(change to use locale-based comparisons with the)108 410.4 R F1([[)3.261 +E F0 .761(command came in bash-4.1, and earlier v)3.261 F .761 +(ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108 +422.4 R F1(compat32)4.405 E F0 1.904 +(will enable ASCII-based comparisons as well.)4.405 F(That)6.904 E .295 +(granularity may not be suf)108 434.4 R .296 +(\214cient for all uses, and as a result users should emplo)-.25 F 2.796 +(yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15 +F(fully)108 446.4 Q 5(.R)-.65 G(ead the documentation for a particular \ +feature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532 +(Bash-4.3 introduced a ne)108 463.2 R 3.032(ws)-.25 G .531(hell v)-3.032 +F(ariable:)-.25 E/F4 9/Times-Bold@0 SF -.27(BA)3.031 G(SH_COMP).27 E +-.855(AT)-.666 G/F5 9/Times-Roman@0 SF(.).855 E F0 .531(The v)5.031 F +.531(alue assigned to this v)-.25 F .531(ariable \(a decimal)-.25 F -.15 +(ve)108 475.2 S .107(rsion number lik).15 F 2.607(e4)-.1 G .107 +(.2, or an inte)-2.607 F .107(ger corresponding to the)-.15 F F1(compat) +2.608 E F2(NN)A F0 .108(option, lik)2.608 F 2.608(e4)-.1 G .108 +(2\) determines the com-)-2.608 F(patibility le)108 487.2 Q -.15(ve)-.25 +G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 504 R .388 +(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.887 +(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387(he options will) +-2.887 F(be remo)108 516 Q -.15(ve)-.15 G 2.5(di).15 G 2.5(nf)-2.5 G -.2 +(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F4 -.27(BA)2.5 G(SH_COMP).27 E -.855 +(AT)-.666 G F5(.).855 E F0 1.163(Bash-5.0 is the \214nal v)108 532.8 R +1.163(ersion for which there will be an indi)-.15 F 1.164 +(vidual shopt option for the pre)-.25 F 1.164(vious v)-.25 F(ersion.) +-.15 E(Users should use)108 544.8 Q F4 -.27(BA)2.5 G(SH_COMP).27 E -.855 +(AT)-.666 G F0(on bash-5.0 and later v)3.105 E(ersions.)-.15 E 1.614 +(The follo)108 561.6 R 1.613(wing table describes the beha)-.25 F 1.613 +(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G +4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 573.6 Q F2(NN)A +F0 1.186(tag is used as shorthand for setting the compatibility le)3.685 +F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F2(NN)3.686 E F0 1.186 +(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108 +585.6 R 1.307(or v)-.15 F 1.307 +(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G +3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1 +(compat)108 597.6 Q F2(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502 +G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) +-.15 F F4 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) +3.607 G .502(riable is preferred, and it).25 F +(is required for bash-5.1 and later v)108 609.6 Q(ersions.)-.15 E F1 +(compat31)108 626.4 Q F0<83>144 638.4 Q(quoting the rhs of the)180 638.4 +Q F1([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 +G 2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect) +-.25 E F1(compat32)108 655.2 Q F0<83>144 667.2 Q .35 +(interrupting a command list such as "a ; b ; c" causes the e)180 667.2 +R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .017 +(in the list \(in bash-4.0 and later v)180 679.2 R .018 +(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.518(dt) +.15 G .018(he interrupt, so in-)-2.518 F +(terrupting one command in a list aborts the e)180 691.2 Q -.15(xe)-.15 +G(cution of the entire list\)).15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(83)185.955 E 0 Cg EP +%%Page: 84 84 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(compat40)108 84 Q F0<83>144 96 Q(the)180 96 Q F1(<)2.674 E F0(and) +2.674 E F1(>)2.673 E F0 .173(operators to the)2.673 F F1([[)2.673 E F0 +.173(command do not consider the current locale when compar)2.673 F(-) +-.2 E .067(ing strings; the)180 108 R 2.567(yu)-.15 G .067 +(se ASCII ordering.)-2.567 F .068(Bash v)5.068 F .068 +(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 120 Q/F2 +10/Times-Italic@0 SF(str)4.743 E(cmp)-.37 E F0 1.903 +(\(3\); bash-4.1 and later use the current locale').19 F 4.402(sc)-.55 G +1.902(ollation sequence and)-4.402 F F2(str)4.742 E(-)-.2 E(coll)180 132 +Q F0(\(3\).).51 E F1(compat41)108 148.8 Q F0<83>144 160.8 Q(in)180 160.8 +Q F2(posix)3.79 E F0(mode,)3.79 E F1(time)3.79 E F0 1.29(may be follo) +3.79 F 1.29(wed by options and still be recognized as a reserv)-.25 F +(ed)-.15 E -.1(wo)180 172.8 S(rd \(this is POSIX interpretation 267\)).1 +E<83>144 184.8 Q(in)180 184.8 Q F2(posix)2.709 E F0 .208 +(mode, the parser requires that an e)2.709 F -.15(ve)-.25 G 2.708(nn).15 +G .208(umber of single quotes occur in the)-2.708 F F2(wor)2.708 E(d) +-.37 E F0 .281(portion of a double-quoted parameter e)180 196.8 R .282 +(xpansion and treats them specially)-.15 F 2.782(,s)-.65 G 2.782(ot) +-2.782 G .282(hat charac-)-2.782 F(ters within the single quotes are co\ +nsidered quoted \(this is POSIX interpretation 221\))180 208.8 Q F1 +(compat42)108 225.6 Q F0<83>144 237.6 Q 1.056(the replacement string in\ + double-quoted pattern substitution does not under)180 237.6 R 1.055 +(go quote re-)-.18 F(mo)180 249.6 Q -.25(va)-.15 G(l, as it does in v) +.25 E(ersions after bash-4.2)-.15 E<83>144 261.6 Q .021 +(in posix mode, single quotes are considered special when e)180 261.6 R +.021(xpanding the)-.15 F F2(wor)2.521 E(d)-.37 E F0 .021(portion of a) +2.521 F .018(double-quoted parameter e)180 273.6 R .017 +(xpansion and can be used to quote a closing brace or other spe-)-.15 F +.998(cial character \(this is part of POSIX interpretation 221\); in la\ +ter v)180 285.6 R .999(ersions, single quotes)-.15 F +(are not special within double-quoted w)180 297.6 Q(ord e)-.1 E +(xpansions)-.15 E F1(compat43)108 314.4 Q F0<83>144 326.4 Q 1.071 +(the shell does not print a w)180 326.4 R 1.07 +(arning message if an attempt is made to use a quoted com-)-.1 F .248 +(pound assignment as an ar)180 338.4 R .249 +(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .249 +(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 350.4 Q +<83>144 362.4 Q -.1(wo)180 362.4 S .501(rd e).1 F .501 +(xpansion errors are considered non-f)-.15 F .501 +(atal errors that cause the current command to)-.1 F -.1(fa)180 374.4 S +.605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605 +(osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak) +-.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605 +(atal errors that cause the)-.1 F(shell to e)180 386.4 Q(xit\))-.15 E +<83>144 398.4 Q .355(when e)180 398.4 R -.15(xe)-.15 G .354 +(cuting a shell function, the loop state \(while/until/etc.\)).15 F .354 +(is not reset, so)5.354 F F1(br)2.854 E(eak)-.18 E F0(or)2.854 E F1 +(continue)180 410.4 Q F0 .052 +(in that function will break or continue loops in the calling conte) +2.552 F .053(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) +180 422.4 Q -.15(ve)-.25 G(nt this).15 E F1(compat44)108 439.2 Q F0<83> +144 451.2 Q .719(the shell sets up the v)180 451.2 R .719(alues used by) +-.25 F/F3 9/Times-Bold@0 SF -.27(BA)3.219 G(SH_ARGV).27 E F0(and)2.969 E +F3 -.27(BA)3.219 G(SH_ARGC).27 E F0 .719(so the)2.969 F 3.218(yc)-.15 G +.718(an e)-3.218 F(xpand)-.15 E(to the shell')180 463.2 Q 2.5(sp)-.55 G +(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fe)-2.5 G +(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 475.2 Q +2.634(as)180 475.2 S .134(ubshell inherits loops from its parent conte) +-2.634 F .135(xt, so)-.15 F F1(br)2.635 E(eak)-.18 E F0(or)2.635 E F1 +(continue)2.635 E F0 .135(will cause the sub-)2.635 F(shell to e)180 +487.2 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre) +2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 499.2 Q -.25(va) +180 499.2 S .619(riable assignments preceding b).25 F .618(uiltins lik) +-.2 F(e)-.1 E F1(export)3.118 E F0(and)3.118 E F1 -.18(re)3.118 G +(adonly).18 E F0 .618(that set attrib)3.118 F .618(utes con-)-.2 F .119 +(tinue to af)180 511.2 R .119(fect v)-.25 F .119 +(ariables with the same name in the calling en)-.25 F .12(vironment e) +-.4 F -.15(ve)-.25 G 2.62(ni).15 G 2.62(ft)-2.62 G .12(he shell is)-2.62 +F(not in posix mode)180 523.2 Q F1(compat50)108 540 Q F0<83>144 552 Q +1.209(Bash-5.1 changed the w)180 552 R(ay)-.1 E F3($RANDOM)3.709 E F0 +1.209(is generated to introduce slightly more random-)3.459 F 1.018 +(ness. If the shell compatibility le)180 564 R -.15(ve)-.25 G 3.518(li) +.15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E 3.518 +(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.019 +(rts to the method from).25 F .733(bash-5.0 and pre)180 576 R .733 +(vious v)-.25 F .732 +(ersions, so seeding the random number generator by assigning a)-.15 F +-.25(va)180 588 S(lue to).25 E F3(RANDOM)2.5 E F0 +(will produce the same sequence as in bash-5.0)2.25 E<83>144 600 Q .695 +(If the command hash table is empty)180 600 R 3.196(,b)-.65 G .696 +(ash v)-3.196 F .696(ersions prior to bash-5.1 printed an informa-)-.15 +F 1.321(tional message to that ef)180 612 R 1.321(fect, e)-.25 F -.15 +(ve)-.25 G 3.821(nw).15 G 1.321 +(hen producing output that can be reused as input.)-3.821 F +(Bash-5.1 suppresses that message when the)180 624 Q F12.5 E F0 +(option is supplied.)2.5 E F1(compat51)108 640.8 Q F0<83>144 652.8 Q +(The)180 652.8 Q F1(unset)2.954 E F0 -.2(bu)2.954 G .454 +(iltin treats attempts to unset array subscripts).2 F F1(@)2.955 E F0 +(and)2.955 E F1(*)2.955 E F0(dif)2.955 E .455(ferently depending)-.25 F +(on whether the array is inde)180 664.8 Q -.15(xe)-.15 G 2.5(do).15 G +2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5(,a).15 G(nd dif)-2.5 E +(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E/F4 10.95 +/Times-Bold@0 SF(RESTRICTED SHELL)72 681.6 Q F0(If)108 693.6 Q F1(bash) +3.582 E F0 1.081(is started with the name)3.581 F F1(rbash)3.581 E F0 +3.581(,o)C 3.581(rt)-3.581 G(he)-3.581 E F13.581 E F0 1.081 +(option is supplied at in)3.581 F -.2(vo)-.4 G 1.081 +(cation, the shell becomes re-).2 F 2.976(stricted. A)108 705.6 R .476 +(restricted shell is used to set up an en)2.976 F .476 +(vironment more controlled than the standard shell.)-.4 F .477(It be-) +5.477 F(ha)108 717.6 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E +F1(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E +(wing are disallo)-.25 E(wed or not performed:)-.25 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(84)185.955 E 0 Cg EP +%%Page: 85 85 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>108 84 Q +(changing directories with)144 84 Q/F1 10/Times-Bold@0 SF(cd)2.5 E F0 +<83>108 100.8 Q(setting or unsetting the v)144 100.8 Q(alues of)-.25 E +/F2 9/Times-Bold@0 SF(SHELL)2.5 E/F3 9/Times-Roman@0 SF(,)A F2 -.666(PA) +2.25 G(TH)-.189 E F3(,)A F2(HISTFILE)2.25 E F3(,)A F2(ENV)2.25 E F3(,)A +F0(or)2.25 E F2 -.27(BA)2.5 G(SH_ENV).27 E F0<83>108 117.6 Q +(specifying command names containing)144 117.6 Q F1(/)2.5 E F0<83>108 +134.4 Q(specifying a \214lename containing a)144 134.4 Q F1(/)2.5 E F0 +(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E F0 -.2(bu)5 G +(iltin command).2 E<83>108 151.2 Q +(specifying a \214lename containing a slash as an ar)144 151.2 Q +(gument to the)-.18 E F1(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2 +E<83>108 168 Q .45(specifying a \214lename containing a slash as an ar) +144 168 R .449(gument to the)-.18 F F12.949 E F0 .449 +(option to the)2.949 F F1(hash)2.949 E F0 -.2(bu)2.949 G .449 +(iltin com-).2 F(mand)144 180 Q<83>108 196.8 Q +(importing function de\214nitions from the shell en)144 196.8 Q +(vironment at startup)-.4 E<83>108 213.6 Q(parsing the v)144 213.6 Q +(alue of)-.25 E F2(SHELLOPTS)2.5 E F0(from the shell en)2.25 E +(vironment at startup)-.4 E<83>108 230.4 Q(redirecting output using the\ + >, >|, <>, >&, &>, and >> redirection operators)144 230.4 Q<83>108 +247.2 Q(using the)144 247.2 Q F1(exec)2.5 E F0 -.2(bu)2.5 G +(iltin command to replace the shell with another command).2 E<83>108 264 +Q(adding or deleting b)144 264 Q(uiltin commands with the)-.2 E F1 +2.5 E F0(and)2.5 E F12.5 E F0(options to the)2.5 E F1(enable)2.5 E +F0 -.2(bu)2.5 G(iltin command).2 E<83>108 280.8 Q(using the)144 280.8 Q +F1(enable)2.5 E F0 -.2(bu)2.5 G +(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 +297.6 Q(specifying the)144 297.6 Q F12.5 E F0(option to the)2.5 E +F1(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 314.4 Q +(turning of)144 314.4 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F1 +(set +r)2.5 E F0(or)2.5 E F1(shopt -u r)2.5 E(estricted_shell)-.18 E F0 +(.)A(These restrictions are enforced after an)108 331.2 Q 2.5(ys)-.15 G +(tartup \214les are read.)-2.5 E 1.566 +(When a command that is found to be a shell script is e)108 348 R -.15 +(xe)-.15 G 1.567(cuted \(see).15 F F2 1.567(COMMAND EXECUTION)4.067 F F0 +(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1(rbash)108 360 Q F0(turns of)2.5 +E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15 E +(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E/F4 10.95 +/Times-Bold@0 SF(SEE ALSO)72 376.8 Q/F5 10/Times-Italic@0 SF(Bash Refer) +108 388.8 Q(ence Manual)-.37 E F0 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F5(The Gnu Readline Libr)108 400.8 Q +(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E +F5(The Gnu History Libr)108 412.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F5 -.8(Po)108 424.8 S(rtable Oper).8 E +(ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities) +-.8 E F0 2.5(,I)C(EEE --)-2.5 E(http://pubs.opengroup.or)144 436.8 Q +(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 448.8 Q +(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F5(sh) +108 460.8 Q F0(\(1\),)A F5(ksh)2.5 E F0(\(1\),)A F5(csh)2.5 E F0(\(1\))A +F5(emacs)108 472.8 Q F0(\(1\),)A F5(vi)2.5 E F0(\(1\))A F5 -.37(re)108 +484.8 S(adline).37 E F0(\(3\))A F4(FILES)72 501.6 Q F5(/bin/bash)109.666 +513.6 Q F0(The)144 525.6 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E +F5(/etc/pr)109.666 537.6 Q(o\214le)-.45 E F0 +(The systemwide initialization \214le, e)144 549.6 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bash_pr)109.666 561.6 Q(o\214le)-.45 +E F0(The personal initialization \214le, e)144 573.6 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bashr)109.666 585.6 Q(c)-.37 E F0 +(The indi)144 597.6 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G +(-shell startup \214le).15 E F5(~/.bash_lo)109.666 609.6 Q(gout)-.1 E F0 +(The indi)144 621.6 Q(vidual login shell cleanup \214le, e)-.25 E -.15 +(xe)-.15 G(cuted when a login shell e).15 E(xits)-.15 E F5 +(~/.bash_history)109.666 633.6 Q F0(The def)144 645.6 Q(ault v)-.1 E +(alue of)-.25 E F1(HISTFILE)2.5 E F0 2.5(,t)C +(he \214le in which bash sa)-2.5 E -.15(ve)-.2 G 2.5(st).15 G +(he command history)-2.5 E F5(~/.inputr)109.666 657.6 Q(c)-.37 E F0 +(Indi)144 669.6 Q(vidual)-.25 E F5 -.37(re)2.5 G(adline).37 E F0 +(initialization \214le)2.5 E F4 -.548(AU)72 686.4 S(THORS).548 E F0 +(Brian F)108 698.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E +(bfox@gnu.or)108 710.4 Q(g)-.18 E(Chet Rame)108 727.2 Q 1.3 -.65(y, C) +-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) +-.25 G(rsity).15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(85) +185.955 E 0 Cg EP +%%Page: 86 86 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(chet.rame)108 84 Q +(y@case.edu)-.15 E/F1 10.95/Times-Bold@0 SF -.11(BU)72 100.8 S 2.738(GR) +.11 G(EPOR)-2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108 112.8 R +.568(ug in)-.2 F/F2 10/Times-Bold@0 SF(bash,)3.068 E F0 .568 +(you should report it.)3.068 F .568(But \214rst, you should mak)5.568 F +3.068(es)-.1 G .568(ure that it really is a b)-3.068 F .567(ug, and)-.2 +F 5.625(that it appears in the latest v)108 124.8 R 5.625(ersion of)-.15 +F F2(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 (ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626 -(ilable from).25 F F1(ftp://ftp.gnu.or)108 290.4 Q(g/pub/gnu/bash/)-.37 -E F0(.)A .411(Once you ha)108 307.2 R .711 -.15(ve d)-.2 H .411 +(ilable from).25 F/F3 10/Times-Italic@0 SF(ftp://ftp.gnu.or)108 136.8 Q +(g/pub/gnu/bash/)-.37 E F0(and)2.5 E F3(http://git.savannah.gnu.or)2.5 E +(g/cgit/bash.git/snapshot/bash-master)-.37 E(.tar)-1.11 E(.gz)-1.11 E F0 +(.)A .411(Once you ha)108 153.6 R .711 -.15(ve d)-.2 H .411 (etermined that a b).15 F .411(ug actually e)-.2 F .411(xists, use the) --.15 F F1(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41 -(ug report.)-.2 F(If)5.41 E .594(you ha)108 319.2 R .894 -.15(ve a \214) +-.15 F F3(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41 +(ug report.)-.2 F(If)5.41 E .594(you ha)108 165.6 R .894 -.15(ve a \214) -.2 H .595(x, you are encouraged to mail that as well!).15 F .595 (Suggestions and `philosophical' b)5.595 F .595(ug reports may)-.2 F -(be mailed to)108 331.2 Q F1 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0 -(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3(gnu.bash.b)2.5 E(ug) --.2 E F0(.)A(ALL b)108 348 Q(ug reports should include:)-.2 E(The v)108 -364.8 Q(ersion number of)-.15 E F3(bash)2.5 E F0(The hardw)108 376.8 Q -(are and operating system)-.1 E(The compiler used to compile)108 388.8 Q -2.5(Ad)108 400.8 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E -2.5(As)108 412.8 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G -(rcises the b).15 E(ug)-.2 E F1(bashb)108.27 429.6 Q(ug)-.2 E F0 +(be mailed to)108 177.6 Q F3 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0 +(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2(gnu.bash.b)2.5 E(ug) +-.2 E F0(.)A(ALL b)108 194.4 Q(ug reports should include:)-.2 E(The v) +108 211.2 Q(ersion number of)-.15 E F2(bash)2.5 E F0(The hardw)108 223.2 +Q(are and operating system)-.1 E(The compiler used to compile)108 235.2 +Q 2.5(Ad)108 247.2 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 +E 2.5(As)108 259.2 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 +G(rcises the b).15 E(ug)-.2 E F3(bashb)108.27 276 Q(ug)-.2 E F0 (inserts the \214rst three items automatically into the template it pro) 2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108 -446.4 Q(ug reports concerning this manual page should be directed to)-.2 -E F1 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.) -.25 E F2 -.11(BU)72 463.2 S(GS).11 E F0(It')108 475.2 Q 2.5(st)-.55 G +292.8 Q(ug reports concerning this manual page should be directed to)-.2 +E F3 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.) +.25 E F1 -.11(BU)72 309.6 S(GS).11 E F0(It')108 321.6 Q 2.5(st)-.55 G (oo big and too slo)-2.5 E -.65(w.)-.25 G 1.869 -(There are some subtle dif)108 492 R 1.869(ferences between)-.25 F F3 +(There are some subtle dif)108 338.4 R 1.869(ferences between)-.25 F F2 (bash)4.369 E F0 1.869(and traditional v)4.369 F 1.869(ersions of)-.15 F -F3(sh)4.368 E F0 4.368(,m)C 1.868(ostly because of the)-4.368 F/F4 9 -/Times-Bold@0 SF(POSIX)108 504 Q F0(speci\214cation.)2.25 E -(Aliases are confusing in some uses.)108 520.8 Q(Shell b)108 537.6 Q +F2(sh)4.368 E F0 4.368(,m)C 1.868(ostly because of the)-4.368 F/F4 9 +/Times-Bold@0 SF(POSIX)108 350.4 Q F0(speci\214cation.)2.25 E +(Aliases are confusing in some uses.)108 367.2 Q(Shell b)108 384 Q (uiltin commands and functions are not stoppable/restartable.)-.2 E 1.315(Compound commands and command sequences of the form `a ; b ; c' a\ -re not handled gracefully when)108 554.4 R .39 -(process suspension is attempted.)108 566.4 R .389 +re not handled gracefully when)108 400.8 R .39 +(process suspension is attempted.)108 412.8 R .389 (When a process is stopped, the shell immediately e)5.39 F -.15(xe)-.15 G .389(cutes the ne).15 F .389(xt com-)-.15 F .192 -(mand in the sequence.)108 578.4 R .192(It suf)5.192 F .192(\214ces to \ +(mand in the sequence.)108 424.8 R .192(It suf)5.192 F .192(\214ces to \ place the sequence of commands between parentheses to force it into a) --.25 F(subshell, which may be stopped as a unit.)108 590.4 Q(Array v)108 -607.2 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E -(There may be only one acti)108 624 Q .3 -.15(ve c)-.25 H -(oprocess at a time.).15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 -E(83)190.395 E 0 Cg EP +-.25 F(subshell, which may be stopped as a unit.)108 436.8 Q(Array v)108 +453.6 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E +(There may be only one acti)108 470.4 Q .3 -.15(ve c)-.25 H +(oprocess at a time.).15 E(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(86)185.955 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/bashref.dvi b/doc/bashref.dvi index 2b682d27696646a1393ebce7d4d6520eedfb49d7..94e70660e5402c75eccc4e83d1a8b0ce4e066c2b 100644 GIT binary patch delta 88463 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 delta 64281 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 VFQJ#%#{<(nHywt1s`CQ<`+pgo=j{Lh diff --git a/doc/bashref.html b/doc/bashref.html index 6a4c3ab8..8fd873fa 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -1,13 +1,16 @@ + + + - - - Bash Reference Manual @@ -25,17 +25,21 @@ A copy of the license is included in the section entitled + + + + @@ -63,7 +68,36 @@ ul.no-bullet {list-style: none} - + +

+ +

Bash Features

+ +

This text is a brief description of the features that are present in +the Bash shell (version 5.2, 26 December 2021). +The Bash home page is http://www.gnu.org/software/bash/. +

+

This is Edition 5.2, last updated 26 December 2021, +of The GNU Bash Reference Manual, +for Bash, Version 5.2. +

+

Bash contains features that appear in other popular shells, and some +features that only appear in Bash. Some of the shells that Bash has +borrowed concepts from are the Bourne Shell (sh), the Korn Shell +(ksh), and the C-shell (csh and its successor, +tcsh). The following menu breaks the features up into +categories, noting which features were inspired by other shells and +which are specific to Bash. +

+

This manual is meant as a brief introduction to features found in +Bash. The Bash manual page should be used as the definitive +reference on shell behavior. +

+ +

Table of Contents

@@ -266,85 +300,22 @@ ul.no-bullet {list-style: none}
- - -
-

-Next: , Previous: , Up: (dir)   [Contents][Index]

-

Bash Features

- -

This text is a brief description of the features that are present in -the Bash shell (version 5.1, 29 October 2020). -The Bash home page is http://www.gnu.org/software/bash/. -

-

This is Edition 5.1, last updated 29 October 2020, -of The GNU Bash Reference Manual, -for Bash, Version 5.1. -

-

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 (sh), the Korn Shell -(ksh), and the C-shell (csh and its successor, -tcsh). The following menu breaks the features up into -categories, noting which features were inspired by other shells and -which are specific to Bash. -

-

This manual is meant as a brief introduction to features found in -Bash. The Bash manual page should be used as the definitive -reference on shell behavior. -

- - - - - - - - - - - - - - - - -
-
+
+

-Next: , Up: Top   [Contents][Index]

+Next: , Up: Bash Features   [Contents][Index]

1 Introduction

- - - - +
-
+
+ @@ -374,7 +345,9 @@ independently-supported ports exist for MS-DOS, OS/2
-
+
+
+

Previous: , Up: Introduction   [Contents][Index]

@@ -433,146 +406,132 @@ editing, command history and aliases. Each of these features is described in this manual.


-
+
+
+
+

2 Definitions

These definitions are used throughout the remainder of this manual.

-
POSIX
-
-

A family of open system standards based on Unix. Bash +

POSIX
+

A family of open system standards based on Unix. Bash is primarily concerned with the Shell and Utilities portion of the POSIX 1003.1 standard.

-
blank
+
blank

A space or tab character.

-
builtin
-
-

A command that is implemented internally by the shell itself, rather +

builtin
+

A command that is implemented internally by the shell itself, rather than by an executable program somewhere in the file system.

-
control operator
-
-

A token that performs a control function. It is a newline +

control operator
+

A token that performs a control function. It is a newline or one of the following: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, ‘|&’, ‘(’, or ‘)’.

-
exit status
-
-

The value returned by a command to its caller. The value is restricted +

exit status
+

The value returned by a command to its caller. The value is restricted to eight bits, so the maximum value is 255.

-
field
-
-

A unit of text that is the result of one of the shell expansions. After +

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.

-
filename
-
-

A string of characters used to identify a file. +

filename
+

A string of characters used to identify a file.

-
job
-
-

A set of processes comprising a pipeline, and any processes descended +

job
+

A set of processes comprising a pipeline, and any processes descended from it, that are all in the same process group.

-
job control
-
-

A mechanism by which users can selectively stop (suspend) and restart +

job control
+

A mechanism by which users can selectively stop (suspend) and restart (resume) execution of processes.

-
metacharacter
-
-

A character that, when unquoted, separates words. A metacharacter is +

metacharacter
+

A character that, when unquoted, separates words. A metacharacter is a space, tab, newline, or one of the following characters: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’.

-
name
-
- +
name
+

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

-
operator
-
-

A control operator or a redirection operator. +

operator
+

A control operator or a redirection operator. See Redirections, for a list of redirection operators. Operators contain at least one unquoted metacharacter.

-
process group
-
-

A collection of related processes each having the same process +

process group
+

A collection of related processes each having the same process group ID.

-
process group ID
-
-

A unique identifier that represents a process group +

process group ID
+

A unique identifier that represents a process group during its lifetime.

-
reserved word
-
-

A word that has a special meaning to the shell. Most reserved +

reserved word
+

A word that has a special meaning to the shell. Most reserved words introduce shell flow control constructs, such as for and while.

-
return status
-
-

A synonym for exit status. +

return status
+

A synonym for exit status.

-
signal
-
-

A mechanism by which a process may be notified by the kernel +

signal
+

A mechanism by which a process may be notified by the kernel of an event occurring in the system.

-
special builtin
-
-

A shell builtin command that has been classified as special by the +

special builtin
+

A shell builtin command that has been classified as special by the POSIX standard.

-
token
-
-

A sequence of characters considered a single unit by the shell. +

token
+

A sequence of characters considered a single unit by the shell. It is either a word or an operator.

-
word
-
-

A sequence of characters treated as a unit by the shell. +

word
+

A sequence of characters treated as a unit by the shell. Words may not include unquoted metacharacters.


-
+
+
+

3 Basic Shell Features

@@ -590,40 +549,24 @@ shell expansions, redirections, which are a way to direct input and output from and to named files, and how the shell executes commands.

- - - - - - - - - - +
-
+
+

3.1 Shell Syntax

- - - - -

When the shell reads input, it proceeds through a sequence of operations. If the input indicates the beginning of a @@ -640,8 +583,14 @@ 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.

+
-
+
+

Next: , Up: Shell Syntax   [Contents][Index]

@@ -679,27 +628,14 @@ status (see Exit Status).
-
+
+
+

Next: , Previous: , Up: Shell Syntax   [Contents][Index]

3.1.2 Quoting

- - - - - - -

Quoting is used to remove the special meaning of certain characters or words to the shell. Quoting can be used to @@ -711,16 +647,24 @@ parameter expansion. 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 -(see History Interaction), the -history expansion character, usually ‘!’, must be quoted +(see History Expansion), the +history expansion character, usually ‘!’, must be quoted to prevent history expansion. See Bash History Facilities, for more details concerning history expansion.

There are three quoting mechanisms: the -escape character, single quotes, and double quotes. +escape character, single quotes, and double quotes.

+
-
+
+

Next: , Up: Quoting   [Contents][Index]

@@ -733,7 +677,9 @@ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).


-
+
+
+

Next: , Previous: , Up: Quoting   [Contents][Index]

@@ -744,7 +690,9 @@ of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.


-
+
+
+

Next: , Previous: , Up: Quoting   [Contents][Index]

@@ -776,73 +724,76 @@ The backslash preceding the ‘!’ is not removed. when in double quotes (see Shell Parameter Expansion).


-
+
+
+

3.1.2.4 ANSI-C Quoting

-

Words of the form $'string' are treated specially. The -word expands to string, with backslash-escaped characters replaced -as specified by the ANSI C standard. Backslash escape sequences, if -present, are decoded as follows: +

Character sequences of the form $’string’ are treated as a special +kind of single quotes. +The sequence expands to string, with backslash-escaped characters +in string replaced as specified by the ANSI C standard. +Backslash escape sequences, if present, are decoded as follows:

-
\a
+
\a

alert (bell)

-
\b
+
\b

backspace

-
\e
-
\E
+
\e
+
\E

an escape character (not ANSI C)

-
\f
+
\f

form feed

-
\n
+
\n

newline

-
\r
+
\r

carriage return

-
\t
+
\t

horizontal tab

-
\v
+
\v

vertical tab

-
\\
+
\\

backslash

-
\'
+
\'

single quote

-
\"
+
\"

double quote

-
\?
+
\?

question mark

-
\nnn
+
\nnn

the eight-bit character whose value is the octal value nnn (one to three octal digits)

-
\xHH
+
\xHH

the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

-
\uHHHH
+
\uHHHH

the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

-
\UHHHHHHHH
+
\UHHHHHHHH

the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

-
\cx
+
\cx

a control-x character

@@ -851,7 +802,9 @@ present, are decoded as follows: been present.


-
+
+
+

Previous: , Up: Quoting   [Contents][Index]

@@ -861,32 +814,142 @@ Previous:

The Shopt Builtin), +translated strings are single-quoted instead of double-quoted.

+

The rest of this section is a brief overview of how you use gettext to +create translations for strings in a shell script named scriptname. +There are more details in the gettext documentation. +

+
+
+

+   [Contents][Index]

+
+

Creating Internationalized Scripts

+ + +

Once you’ve marked the strings in your script +that you want to translate using $"...", +you create a gettext "template" file using the command +

+
+
bash --dump-po-strings scriptname > domain.pot
+
+ +

The domain is your message domain. +It’s just an arbitrary string that’s used to identify the files gettext +needs, like a package or script name. +It needs to be unique among all +the message domains on systems where you install the translations, so +gettext knows which translations correspond to your script. +You’ll use the template file to create translations for each target language. +The template file conventionally has the suffix ‘.pot’. +

+

You copy this template file to a separate file for each target language +you want to support (called "PO" files, which use the suffix ‘.po’). +PO files use various naming conventions, but +when you are working to translate a template file into a particular +language, you first copy the template file to a file whose name is the +language you want to target, with the ‘.po’ suffix. +For instance, the Spanish translations of your strings would be +in a file named ‘es.po’, and to get started using a message +domain named "example," you would run +

+
+
cp example.pot es.po
+
+ +

Ultimately, PO files are often named domain.po and installed in +directories that contain multiple translation files for a particular language. +

+

Whichever naming convention you choose, you will need to translate the +strings in the PO files into the appropriate languages. +This has to be done manually. +

+

When you have the translations and PO files complete, you’ll use the +gettext tools to produce what are called "MO" files, which are compiled +versions of the PO files the gettext tools use to look up translations +efficiently. +MO files are also called "message catalog" files. +You use the msgfmt program to do this. +For instance, if you had a file with Spanish translations, you could run +

+
+
msgfmt -o es.mo es.po
+
+ +

to produce the corresponding MO file. +

+

Once you have the MO files, you decide where to install them and use the +TEXTDOMAINDIR shell variable to tell the gettext tools where they are. +Make sure to use the same message domain to name the MO files +as you did for the PO files when you install them. +

+ -

Some systems use the message catalog selected by the LC_MESSAGES -shell variable. Others create the name of the message catalog from the -value of the TEXTDOMAIN shell variable, possibly adding a -suffix of ‘.mo’. If you use the TEXTDOMAIN variable, you -may need to set the TEXTDOMAINDIR variable to the location of -the message catalog files. Still others use both variables in this -fashion: -TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/TEXTDOMAIN.mo. +

Your users will use the LANG or LC_MESSAGES shell variables to +select the desired language. +

+

You set the TEXTDOMAIN variable to the script’s message domain. +As above, you use the message domain to name your translation files. +

+

You, or possibly your users, set the TEXTDOMAINDIR variable to the +name of a directory where the message catalog files are stored. +If you install the message files into the system’s standard message catalog +directory, you don’t need to worry about this variable. +

+

The directory where the message catalog files are stored varies between +systems. +Some use the message catalog selected by the LC_MESSAGES +shell variable. +Others create the name of the message catalog from the value of the +TEXTDOMAIN shell variable, possibly adding the ‘.mo’ suffix. +If you use the TEXTDOMAIN variable, you may need to set the +TEXTDOMAINDIR variable to the location of the message catalog files, +as above. +It’s common to use both variables in this fashion: +$TEXTDOMAINDIR/$LC_MESSAGES/LC_MESSAGES/$TEXTDOMAIN.mo. +

+

If you used that last convention, and you wanted to store the message +catalog files with Spanish (es) and Esperanto (eo) translations into a +local directory you use for custom translation files, you could run +

+
+
TEXTDOMAIN=example
+TEXTDOMAINDIR=/usr/local/share/locale
+
+cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
+cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
+
+ +

When all of this is done, and the message catalog files containing the +compiled translations are installed in the correct location, +your users will be able to see translated strings +in any of the supported languages by setting the LANG or +LC_MESSAGES environment variables before running your script.


-
+
+
+
+

Previous: , Up: Shell Syntax   [Contents][Index]

@@ -905,7 +968,10 @@ See Interactive Shells, for a description of w a shell interactive.


-
+
+
+
+ @@ -920,26 +986,19 @@ 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.

- - - - - - - - - +
-
+
+ @@ -965,7 +1024,9 @@ the first word of a command (see below for exceptions): words if they are the third word in a for command.


-
+
+
+

Next: , Previous: , Up: Shell Commands   [Contents][Index]

@@ -984,9 +1045,11 @@ by the POSIX 1003.1 waitpid function, or 128+n< the command was terminated by signal n.


-
+
+
+

3.2.3 Pipelines

@@ -1006,15 +1069,15 @@ one of the control operators ‘|’ or ‘|&

The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command’s output. This -connection is performed before any redirections specified by the -command. +connection is performed before any redirections specified by +command1.

If ‘|&’ is used, command1’s standard error, in addition to its standard output, is connected to command2’s standard input through the pipe; it is shorthand for 2>&1 |. This implicit redirection of the standard error to the standard output is -performed after any redirections specified by the command. +performed after any redirections specified by command1.

The reserved word time causes timing statistics to be printed for the pipeline once it finishes. @@ -1038,14 +1101,15 @@ total user and system time consumed by the shell and its children. The TIMEFORMAT variable may be used to specify the format of the time information.

-

If the pipeline is not executed asynchronously (see Lists), the +

If the pipeline is not executed asynchronously (see Lists of Commands), the shell waits for all commands in the pipeline to complete.

-

Each command in a pipeline is executed in its own subshell, which is a +

Each command in a pipeline is executed in its own subshell, which is a separate process (see Command Execution Environment). If the lastpipe option is enabled using the shopt builtin (see The Shopt Builtin), -the last element of a pipeline may be run by the shell process. +the last element of a pipeline may be run by the shell process +when job control is not active.

The exit status of a pipeline is the exit status of the last command in the @@ -1061,7 +1125,9 @@ The shell waits for all commands in the pipeline to terminate before returning a value.


-
+
+
+ @@ -1082,8 +1148,8 @@ to delimit commands, equivalent to a semicolon.

If a command is terminated by the control operator ‘&’, the shell executes the command asynchronously in a subshell. -This is known as executing the command in the background, -and these are referred to as asynchronous commands. +This is known as executing the command in the background, +and these are referred to as asynchronous commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (see Job Control), @@ -1120,21 +1186,15 @@ returns a non-zero exit status. executed in the list.


-
+
+
+

-Next: , Previous: , Up: Shell Commands   [Contents][Index]

+Next: , Previous: , Up: Shell Commands   [Contents][Index]

3.2.5 Compound Commands

- - - - -

Compound commands are the shell programming language constructs. Each construct begins with a reserved word or control operator and is @@ -1149,8 +1209,14 @@ followed by a newline in place of a semicolon.

Bash provides looping constructs, conditional commands, and mechanisms to group commands and execute them as a unit.

+
-
+
+ @@ -1163,9 +1229,8 @@ Next:
+

The syntax of the until command is:

@@ -1179,9 +1244,8 @@ The return status is the exit status of the last command executed in consequent-commands, or zero if none was executed.

-
while
-
-

The syntax of the while command is: +

while
+

The syntax of the while command is:

while test-commands; do consequent-commands; done
@@ -1193,9 +1257,8 @@ The return status is the exit status of the last command executed
 in consequent-commands, or zero if none was executed.
 

-
for
-
-

The syntax of the for command is: +

for
+

The syntax of the for command is:

for name [ [in [words …] ] ; ] do commands; done
@@ -1235,17 +1298,18 @@ that is executed, or false if any of the expressions is invalid.
 may be used to control loop execution.
 


-
+
+
+

3.2.5.2 Conditional Constructs

-
if
-
- +
if
+
@@ -1273,9 +1337,8 @@ The return status is the exit status of the last command executed, or zero if no condition tested true.

-
case
-
- +
case
+

The syntax of the case command is:

@@ -1302,9 +1365,10 @@ as a clause. The word undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal (see Shell Parameter Expansion) -before matching is -attempted. Each pattern undergoes tilde expansion, parameter -expansion, command substitution, and arithmetic expansion. +before matching is attempted. +Each pattern undergoes tilde expansion, parameter expansion, +command substitution, arithmetic expansion, process substitution, and +quote removal.

There may be an arbitrary number of case clauses, each terminated by a ‘;;’, ‘;&’, or ‘;;&’. @@ -1342,9 +1406,8 @@ continuing the case statement execution as if the pattern list had not matched. return status is the exit status of the command-list executed.

-
select
-
- +
select
+

The select construct allows the easy generation of menus. It has almost the same syntax as the for command:

@@ -1383,24 +1446,24 @@ done
-
((…))
+
((…))
(( expression ))
 

The arithmetic expression is evaluated according to the rules described below (see Shell Arithmetic). +The expression undergoes the same expansions +as if it were within double quotes, +but double quote characters in expression are not treated specially +are removed. 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 -

-
let "expression"
-
-

See Bash Builtins, for a full description of the let builtin. +otherwise the return status is 1.

+
-
[[…]]
-
- +
[[…]]
+
[[ expression ]]
 
@@ -1409,10 +1472,12 @@ otherwise the return status is 1. This is exactly equivalent to the conditional expression expression. Expressions are composed of the primaries described below in Bash Conditional Expressions. -Word splitting and filename expansion are not performed on the words -between the [[ and ]]; tilde expansion, parameter and +The words between the [[ and ]] do not undergo word splitting +and filename expansion. +The shell performs tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process -substitution, and quote removal are performed. +substitution, and quote removal on those words +(the expansions that would occur if the words were enclosed in double quotes). Conditional operators such as ‘-f’ must be unquoted to be recognized as primaries.

@@ -1430,78 +1495,110 @@ is enabled, the match is performed without regard to the case of alphabetic characters. The return value is 0 if the string matches (‘==’) or does not match (‘!=’) the pattern, and 1 otherwise. -Any part of the pattern may be quoted to force the quoted portion -to be matched as a string. +

+

If you quote any part of the pattern, +using any of the shell’s quoting mechanisms, +the quoted portion is matched literally. +This means every character in the quoted portion matches itself, +instead of having any special pattern matching meaning.

An additional binary operator, ‘=~’, is available, with the same precedence as ‘==’ and ‘!=’. -When it is used, the string to the right of the operator is considered -a POSIX extended regular expression and matched accordingly +When you use ‘=~’, the string to the right of the operator is considered +a POSIX extended regular expression pattern and matched accordingly (using the POSIX regcomp and regexec interfaces usually described in regex(3)). -The return value is 0 if the string matches -the pattern, and 1 otherwise. +The return value is 0 if the string matches the pattern, and 1 if it does not. If the regular expression is syntactically incorrect, the conditional -expression’s return value is 2. +expression returns 2. If the nocasematch shell option (see the description of shopt in The Shopt Builtin) is enabled, the match is performed without regard to the case of alphabetic characters. -Any part of the pattern may be quoted to force the quoted portion -to be matched as a string. -Bracket expressions in regular expressions must be treated carefully, -since normal quoting characters lose their meanings between brackets. +

+

You can quote any part of the pattern +to force the quoted portion to be matched literally +instead of as a regular expression (see above). If the pattern is stored in a shell variable, quoting the variable -expansion forces the entire pattern to be matched as a string. +expansion forces the entire pattern to be matched literally.

The pattern will match if it matches any part of the string. -Anchor the pattern using the ‘^’ and ‘$’ regular expression -operators to force it to match the entire string. -The array variable BASH_REMATCH records which parts of the string -matched the pattern. -The element of BASH_REMATCH with index 0 contains the portion of -the string matching the entire regular expression. -Substrings matched by parenthesized subexpressions within the regular -expression are saved in the remaining BASH_REMATCH indices. -The element of BASH_REMATCH with index n is the portion of the -string matching the nth parenthesized subexpression. +If you want to force the pattern to match the entire string, +anchor the pattern using the ‘^’ and ‘$’ regular expression +operators.

For example, the following will match a line -(stored in the shell variable line) +(stored in the shell variable line) if there is a sequence of characters anywhere in the value consisting of any number, including zero, of characters in the space character class, -zero or one instances of ‘a’, then a ‘b’: -

+immediately followed by zero or one instances of ‘a’, +then a ‘b’: +

+
[[ $line =~ [[:space:]]*(a)?b ]]
 
-

That means values like ‘aab’ and ‘ aaaaaab’ will match, as -will a line containing a ‘b’ anywhere in its value. +

That means values for line like +‘aab’, ‘ aaaaaab’, ‘xaby’, and ‘ ab’ +will all match, +as will a line containing a ‘b’ anywhere in its value.

-

Storing the regular expression in a shell variable is often a useful +

If you want to match a character that’s special to the regular expression +grammar (‘^$|[]()\.*+?’), it has to be quoted to remove its special +meaning. +This means that in the pattern ‘xxx.txt’, the ‘.’ matches any +character in the string (its usual regular expression meaning), but in the +pattern ‘"xxx.txt"’, it can only match a literal ‘.’. +

+

Likewise, if you want to include a character in your pattern that has a +special meaning to the regular expression grammar, you must make sure it’s +not quoted. +If you want to anchor a pattern at the beginning or end of the string, +for instance, you cannot quote the ‘^’ or ‘$’ +characters using any form of shell quoting. +

+

If you want to match ‘initial string’ at the start of a line, +the following will work: +

+
[[ $line =~ ^"initial string" ]]
+
+

but this will not: +

+
[[ $line =~ "^initial string" ]]
+
+

because in the second example the ‘^’ is quoted and doesn’t have its +usual special meaning. +

+

It is sometimes difficult to specify a regular expression properly +without using quotes, or to keep track of the quoting used by regular +expressions while paying attention to +shell quoting and the shell’s quote removal. +Storing the regular expression in a shell variable is often a useful way to avoid problems with quoting characters that are special to the shell. -It is sometimes difficult to specify a regular expression literally -without using quotes, or to keep track of the quoting used by regular -expressions while paying attention to the shell’s quote removal. -Using a shell variable to store the pattern decreases these problems. -For example, the following is equivalent to the above: -

+For example, the following is equivalent to the pattern used above: +

+
pattern='[[:space:]]*(a)?b'
 [[ $line =~ $pattern ]]
 
-

If you want to match a character that’s special to the regular expression -grammar, it has to be quoted to remove its special meaning. -This means that in the pattern ‘xxx.txt’, the ‘.’ matches any -character in the string (its usual regular expression meaning), but in the -pattern ‘"xxx.txt"’ it can only match a literal ‘.’. -Shell programmers should take special care with backslashes, since backslashes -are used both by the shell and regular expressions to remove the special -meaning from the following character. -The following two sets of commands are not equivalent: -

+

Shell programmers should take special care with backslashes, since +backslashes are used by both the shell and regular expressions to remove +the special meaning from the following character. +This means that after the shell’s word expansions complete +(see Shell Expansions), +any backslashes remaining in parts of the pattern +that were originally not quoted can remove the +special meaning of pattern characters. +If any part of the pattern is quoted, the shell does its best to ensure that +the regular expression treats those remaining backslashes as literal, +if they appeared in a quoted portion. +

+

The following two sets of commands are not equivalent: +

+
pattern='\.'
 
 [[ . =~ $pattern ]]
@@ -1513,30 +1610,66 @@ The following two sets of commands are not equivalent:
 
 

The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern to be matched. -In the first two examples, the backslash removes the special meaning from +In the first two examples, the pattern passed to the regular expression +parser is ‘\.’. The backslash removes the special meaning from ‘.’, so the literal ‘.’ matches. +In the second two examples, the pattern passed to the regular expression +parser has the backslash quoted (e.g., ‘\\\.’), which will not match +the string, since it does not contain a backslash. If the string in the first examples were anything other than ‘.’, say ‘a’, the pattern would not match, because the quoted ‘.’ in the pattern loses its special meaning of matching any single character.

+

Bracket expressions in regular expressions can be sources of errors as well, +since characters that are normally special in regular expressions +lose their special meanings between brackets. +However, you can use bracket expressions to match special pattern characters +without quoting them, so they are sometimes useful for this purpose. +

+

Though it might seem like a strange way to write it, the following pattern +will match a ‘.’ in the string: +

+
+
[[ . =~ [.] ]]
+
+ +

The shell performs any word expansions before passing the pattern +to the regular expression functions, +so you can assume that the shell’s quoting takes precedence. +As noted above, the regular expression parser will interpret any +unquoted backslashes remaining in the pattern after shell expansion +according to its own rules. +The intention is to avoid making shell programmers quote things twice +as much as possible, so shell quoting should be sufficient to quote +special pattern characters where that’s necessary. +

+

The array variable BASH_REMATCH records which parts of the string +matched the pattern. +The element of BASH_REMATCH with index 0 contains the portion of +the string matching the entire regular expression. +Substrings matched by parenthesized subexpressions within the regular +expression are saved in the remaining BASH_REMATCH indices. +The element of BASH_REMATCH with index n is the portion of the +string matching the nth parenthesized subexpression. +

Expressions may be combined using the following operators, listed in decreasing order of precedence:

-
( expression )
+
( expression )

Returns the value of expression. This may be used to override the normal precedence of operators.

-
! expression
+
! expression

True if expression is false.

-
expression1 && expression2
+
expression1 && expression2

True if both expression1 and expression2 are true.

-
expression1 || expression2
+
expression1 || expression2

True if either expression1 or expression2 is true.

@@ -1548,7 +1681,9 @@ value of the entire conditional expression.

-
+
+
+ @@ -1561,21 +1696,20 @@ to the entire command list. For example, the output of all the commands in the list may be redirected to a single stream.

-
()
+
()
( list )
 
-

Placing a list of commands between parentheses causes a subshell -environment to be created (see Command Execution Environment), and each -of the commands in list to be executed in that subshell. Since the -list is executed in a subshell, variable assignments do not remain in -effect after the subshell completes. +

Placing a list of commands between parentheses forces the shell to create +a subshell (see Command Execution Environment), and each +of the commands in list is executed in that subshell environment. +Since the list is executed in a subshell, variable assignments do not +remain in effect after the subshell completes.

-
{}
-
- +
{}
+
{ list; }
 
@@ -1588,9 +1722,9 @@ The semicolon (or newline) following list is required.

In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The braces -are reserved words, so they must be separated from the list +are reserved words, so they must be separated from the list by blanks or other shell metacharacters. -The parentheses are operators, and are +The parentheses are operators, and are recognized as separate tokens by the shell even if they are not separated from the list by whitespace.

@@ -1598,7 +1732,10 @@ from the list by whitespace. list.


-
+
+
+
+ @@ -1611,26 +1748,53 @@ A coprocess is executed asynchronously in a subshell, as if the command had been terminated with the ‘&’ control operator, with a two-way pipe established between the executing shell and the coprocess.

-

The format for a coprocess is: -

+

The syntax for a coprocess is: +

+
coproc [NAME] command [redirections]
 

This creates a coprocess named NAME. -If NAME is not supplied, the default name is COPROC. -NAME must not be supplied if command is a simple -command (see Simple Commands); otherwise, it is interpreted as -the first word of the simple command. +command may be either a simple command (see Simple Commands) +or a compound command (see Compound Commands). +NAME is a shell variable name. +If NAME is not supplied, the default name is COPROC. +

+

The recommended form to use for a coprocess is +

+
+
coproc NAME { command; }
+
+ +

This form is recommended because simple commands result in the coprocess +always being named COPROC, and it is simpler to use and more complete +than the other compound commands. +

+

There are other forms of coprocesses: +

+
+
coproc NAME compound-command
+coproc compound-command
+coproc simple-command
+
+ +

If command is a compound command, NAME is optional. The +word following coproc determines whether that word is interpreted +as a variable name: it is interpreted as NAME if it is not a +reserved word that introduces a compound command. +If command is a simple command, NAME is not allowed; this +is to avoid confusion between NAME and the first word of the simple +command.

When the coprocess is executed, the shell creates an array variable (see Arrays) -named NAME in the context of the executing shell. +named NAME in the context of the executing shell. The standard output of command is connected via a pipe to a file descriptor in the executing shell, -and that file descriptor is assigned to NAME[0]. +and that file descriptor is assigned to NAME[0]. The standard input of command is connected via a pipe to a file descriptor in the executing shell, -and that file descriptor is assigned to NAME[1]. +and that file descriptor is assigned to NAME[1]. This pipe is established before any redirections specified by the command (see Redirections). The file descriptors can be utilized as arguments to shell commands @@ -1639,7 +1803,7 @@ Other than those created to execute command and process substitutions, the file descriptors are not available in subshells.

The process ID of the shell spawned to execute the coprocess is -available as the value of the variable NAME_PID. +available as the value of the variable NAME_PID. The wait builtin command may be used to wait for the coprocess to terminate.

@@ -1648,7 +1812,9 @@ the coproc command always returns success. The return status of a coprocess is the exit status of command.


-
+
+
+

Previous: , Up: Shell Commands   [Contents][Index]

@@ -1665,113 +1831,15 @@ Parallel provides shorthand references to many of the most common operations the input source, and so on). Parallel can replace xargs or feed commands from its input sources to several different instances of Bash.

-

For a complete description, refer to the GNU Parallel documentation. A few -examples should provide a brief introduction to its use. -

-

For example, it is easy to replace xargs to gzip all html files in the -current directory and its subdirectories: -

-
find . -type f -name '*.html' -print | parallel gzip
-
-

If you need to protect special characters such as newlines in file names, -use find’s -print0 option and parallel’s -0 option. -

-

You can use Parallel to move files from the current directory when the -number of files is too large to process with one mv invocation: -

-
printf '%s\n' * | parallel mv {} destdir
-
- -

As you can see, the {} is replaced with each line read from standard input. -While using ls will work in most instances, it is not sufficient to -deal with all filenames. printf is a shell builtin, and therefore is -not subject to the kernel’s limit on the number of arguments to a program, -so you can use ‘*’ (but see below about the dotglob shell option). -If you need to accommodate special characters in filenames, you can use -

-
-
printf '%s\0' * | parallel -0 mv {} destdir
-
- -

as alluded to above. -

-

This will run as many mv commands as there are files in the current -directory. -You can emulate a parallel xargs by adding the -X option: -

-
printf '%s\0' * | parallel -0 -X mv {} destdir
-
- -

(You may have to modify the pattern if you have the dotglob option -enabled.) -

-

GNU Parallel can replace certain common idioms that operate on lines read -from a file (in this case, filenames listed one per line): -

-
	while IFS= read -r x; do
-		do-something1 "$x" "config-$x"
-		do-something2 < "$x"
-	done < file | process-output
-
- -

with a more compact syntax reminiscent of lambdas: -

-
cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" |
-           process-output
-
- -

Parallel provides a built-in mechanism to remove filename extensions, which -lends itself to batch file transformations or renaming: -

-
ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
-
-

This will recompress all files in the current directory with names ending -in .gz using bzip2, running one job per CPU (-j+0) in parallel. -(We use ls for brevity here; using find as above is more -robust in the face of filenames containing unexpected characters.) -Parallel can take arguments from the command line; the above can also be -written as -

-
-
parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
-
- -

If a command generates output, you may want to preserve the input order in -the output. For instance, the following command -

-
{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-} | parallel traceroute
-
-

will display as output the traceroute invocation that finishes first. -Adding the -k option -

-
{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-} | parallel -k traceroute
-
-

will ensure that the output of traceroute foss.org.my is displayed first. -

-

Finally, Parallel can be used to run a sequence of shell commands in parallel, -similar to ‘cat file | bash’. -It is not uncommon to take a list of filenames, create a series of shell -commands to operate on them, and feed that list of commands to a shell. -Parallel can speed this up. Assuming that file contains a list of -shell commands, one per line, -

-
-
parallel -j 10 < file
-
- -

will evaluate the commands using the shell (since no explicit command is -supplied as an argument), in blocks of ten shell jobs at a time. +

For a complete description, refer to the GNU Parallel documentation, which +is available at +https://www.gnu.org/software/parallel/parallel_tutorial.html.


-
+
+
+
+ @@ -1803,16 +1871,16 @@ shell context; no new process is created to interpret them. word function is optional. If the function reserved word is supplied, the parentheses are optional. -The body of the function is the compound command +The body of the function is the compound command compound-command (see Compound Commands). That command is usually a list enclosed between { and }, but -may be any compound command listed above, -with one exception: If the function reserved word is used, but the -parentheses are not supplied, the braces are required. +may be any compound command listed above. +If the function reserved word is used, but the +parentheses are not supplied, the braces are recommended. compound-command is executed whenever fname is specified as the -name of a command. +name of a simple command. When the shell is in POSIX mode (see Bash POSIX Mode), -fname must be a valid shell name and +fname must be a valid shell name and may not be the same as one of the special builtins (see Special Builtins). In default mode, a function name can be any unquoted shell word that does @@ -1889,7 +1957,7 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible.

-

The shell uses dynamic scoping to control a variable’s visibility +

The shell uses dynamic scoping to control a variable’s visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution @@ -1901,11 +1969,11 @@ This is also the value that a local variable declaration "shadows", and the value that is restored when the function returns.

-

For example, if a variable var is declared as local in function -func1, and func1 calls another function func2, -references to var made from within func2 will resolve to the -local variable var from func1, shadowing any global variable -named var. +

For example, if a variable var is declared as local in function +func1, and func1 calls another function func2, +references to var made from within func2 will resolve to the +local variable var from func1, shadowing any global variable +named var.

The following script demonstrates this behavior. When executed, the script displays @@ -1943,12 +2011,13 @@ variable with that name that had been shadowed will become visible.

Function names and definitions may be listed with the -f option to the declare (typeset) -builtin command (see Bash Builtins). +builtin command (see Bash Builtin Commands). The -F option to declare or typeset will list the function names only (and optionally the source file and line number, if the extdebug shell option is enabled). -Functions may be exported so that subshells +Functions may be exported so that child shell processes +(those created when executing a separate shell invocation) automatically have them defined with the -f option to the export builtin (see Bourne Shell Builtins). @@ -1959,7 +2028,9 @@ function call stack and restrict the number of function invocations. By default, no limit is placed on the number of recursive calls.


-
+
+
+ @@ -1968,20 +2039,14 @@ Next: , - - - - -

A parameter is an entity that stores values. +

A parameter is an entity that stores values. It can be a name, a number, or one of the special characters listed below. -A variable is a parameter denoted by a name. -A variable has a value and zero or more attributes. +A variable is a parameter denoted by a name. +A variable has a value and zero or more attributes. Attributes are assigned using the declare builtin command -(see the description of the declare builtin in Bash Builtins). +(see the description of the declare builtin in Bash Builtin Commands).

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 @@ -1995,17 +2060,16 @@ the unset builtin command. is not given, the variable is assigned the null string. All values undergo tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote -removal (detailed below). If the variable has its integer +removal (see Shell Parameter Expansion). +If the variable has its integer attribute set, then value is evaluated as an arithmetic expression even if the $((…)) expansion is not used (see Arithmetic Expansion). -Word splitting is not performed, with the exception -of "$@" as explained below. -Filename expansion is not performed. +Word splitting and filename expansion are not performed. Assignment statements may also appear as arguments to the alias, declare, typeset, export, readonly, -and local builtin commands (declaration commands). +and local builtin commands (declaration commands). When in POSIX mode (see Bash POSIX Mode), these builtins may appear in a command after one or more instances of the command builtin and retain these assignment statement properties. @@ -2015,8 +2079,8 @@ to a shell variable or array index (see Arrays), the &lsqu operator can be used to append to or add to the variable’s previous value. This includes arguments to builtin commands such as declare that -accept assignment statements (declaration commands). -When ‘+=’ is applied to a variable for which the integer attribute +accept assignment statements (declaration commands). +When ‘+=’ is applied to a variable for which the integer attribute has been set, value is evaluated as an arithmetic expression and added to the variable’s current value, which is also evaluated. When ‘+=’ is applied to an array variable using compound assignment @@ -2028,10 +2092,10 @@ in an associative array. When applied to a string-valued variable, value is expanded and appended to the variable’s value.

-

A variable can be assigned the nameref attribute using the +

A variable can be assigned the nameref attribute using the -n option to the declare or local builtin commands -(see Bash Builtins) -to create a nameref, or a reference to another variable. +(see Bash Builtin Commands) +to create a nameref, or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref @@ -2045,9 +2109,9 @@ argument, running

declare -n ref=$1
 
-

inside the function creates a nameref variable ref whose value is +

inside the function creates a nameref variable ref whose value is the variable name passed as the first argument. -References and assignments to ref, and changes to its attributes, +References and assignments to ref, and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was passed as $1.

@@ -2063,15 +2127,20 @@ Namerefs can be unset using the -n option to the unset Otherwise, if unset is executed with the name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset.

+
-
+
+

3.4.1 Positional Parameters

-

A positional parameter is a parameter denoted by one or more +

A 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 set builtin command. @@ -2088,7 +2157,9 @@ temporarily replaced when a shell function is executed digit is expanded, it must be enclosed in braces.


-
+
+
+ @@ -2099,9 +2170,7 @@ Previous:

($*) Expands to the positional parameters, starting from one. When the expansion is not within double quotes, each positional parameter @@ -2119,9 +2188,7 @@ If IFS is null, the parameters are joined without intervening separators.

-
@ - -
+
@

($@) Expands to the positional parameters, starting from one. In contexts where word splitting is performed, this expands each @@ -2144,24 +2211,18 @@ When there are no positional parameters, "$@" and expand to nothing (i.e., they are removed).

-
# - -
+
#

($#) Expands to the number of positional parameters in decimal.

-
? - -
+
?

($?) Expands to the exit status of the most recently executed foreground pipeline.

-
- - -
+
-

($-, a hyphen.) Expands to the current option flags as specified upon invocation, by the set @@ -2169,26 +2230,20 @@ builtin command, or those set by the shell itself (such as the -i option).

-
$ - -
+
$
-

($$) Expands to the process ID of the shell. In a () subshell, it +

($$) Expands to the process ID of the shell. In a subshell, it expands to the process ID of the invoking shell, not the subshell.

-
! - -
+
!

($!) Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg builtin (see Job Control Builtins).

-
0 - -
+
0

($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of commands @@ -2201,7 +2256,10 @@ to the filename used to invoke Bash, as given by argument zero.


-
+
+
+
+ @@ -2221,29 +2279,6 @@ Next: , Previou
  • filename expansion
  • - - - - - - - - - - -

    The order of expansions is: brace expansion; @@ -2253,14 +2288,14 @@ word splitting; and filename expansion.

    On systems that can support it, there is an additional expansion -available: process substitution. +available: process substitution. This is performed at the same time as tilde, parameter, variable, and arithmetic expansion and command substitution.

    After these expansions are performed, quote characters present in the original word are removed unless they have been quoted themselves -(quote removal). +(quote removal).

    Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions @@ -2273,8 +2308,20 @@ The only exceptions to this are the expansions of

    After all expansions, quote removal (see Quote Removal) is performed.

    +
    -
    +
    + @@ -2284,7 +2331,7 @@ Next: , U

    Brace expansion is a mechanism by which arbitrary strings may be generated. This mechanism is similar to -filename expansion (see Filename Expansion), +filename expansion (see Filename Expansion), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional preamble, followed by either a series of comma-separated strings or a sequence expression @@ -2304,7 +2351,7 @@ ade ace abe

    A sequence expression takes the form {x..y[..incr]}, -where x and y are either integers or single characters, +where x and y are either integers or letters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x and y, inclusive. @@ -2313,10 +2360,11 @@ same width. When either x or y begins with a zero, the shell attempts to force all generated terms to contain the same number of digits, zero-padding where necessary. -When characters are supplied, the expression expands to each character +When letters are supplied, the expression expands to each character lexicographically between x and y, inclusive, using the default C locale. -Note that both x and y must be of the same type. +Note that both x and y must be of the same type +(integer or letter). When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.

    @@ -2349,7 +2397,9 @@ above example:

    -
    +
    +
    + @@ -2359,10 +2409,10 @@ Next:

    Shell Parameters) when they appear as arguments to simple commands. -Bash does not do this, except for the declaration commands listed +Bash does not do this, except for the declaration commands listed above, when in POSIX mode.


    -
    +
    +
    + @@ -2467,7 +2519,7 @@ or when parameter is followed by a character that is not to be interpreted as part of its name.

    If the first character of parameter is an exclamation point (!), -and parameter is not a nameref, +and parameter is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of parameter as the new parameter; this is then @@ -2496,13 +2548,19 @@ the operator tests for both parameter’s existence and that its is not null; if the colon is omitted, the operator tests only for existence.

    -
    ${parameter:-word}
    +
    ${parameter:-word}

    If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

    +
    +
    $ v=123
    +$ echo ${v-unset}
    +123
    +
    +
    -
    ${parameter:=word}
    +
    ${parameter:=word}

    If parameter is unset or null, the expansion of word is assigned to parameter. @@ -2510,8 +2568,15 @@ The value of parameter is then substituted. Positional parameters and special parameters may not be assigned to in this way.

    +
    +
    $ var=
    +$ : ${var:=DEFAULT}
    +$ echo $var
    +DEFAULT
    +
    +
    -
    ${parameter:?word}
    +
    ${parameter:?word}

    If parameter is null or unset, the expansion of word (or a message to that effect if word @@ -2519,15 +2584,27 @@ is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

    +
    +
    $ var=
    +$ : ${var:?var is unset or null}
    +bash: var: var is unset or null
    +
    +
    -
    ${parameter:+word}
    +
    ${parameter:+word}

    If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.

    +
    +
    $ var=123
    +$ echo ${var:+var is set and not null}
    +var is set and not null
    +
    +
    -
    ${parameter:offset}
    -
    ${parameter:offset:length}
    +
    ${parameter:offset}
    +
    ${parameter:offset:length}

    This is referred to as Substring Expansion. It expands to up to length characters of the value of parameter starting at the character specified by offset. @@ -2669,16 +2746,16 @@ If offset is 0, and the positional parameters are used, $0

    -
    ${!prefix*}
    -
    ${!prefix@}
    +
    ${!prefix*}
    +
    ${!prefix@}

    Expands to the names of variables whose names begin with prefix, separated by the first character of the IFS special variable. When ‘@’ is used and the expansion appears within double quotes, each variable name expands to a separate word.

    -
    ${!name[@]}
    -
    ${!name[*]}
    +
    ${!name[@]}
    +
    ${!name[*]}

    If name is an array variable, expands to the list of array indices (keys) assigned in name. If name is not an array, expands to 0 if name is set and null @@ -2687,7 +2764,7 @@ When ‘@’ is used and the expansion appears within doubl key expands to a separate word.

    -
    ${#parameter}
    +
    ${#parameter}

    The length in characters of the expanded value of parameter is substituted. If parameter is ‘*’ or ‘@’, the value substituted @@ -2701,8 +2778,8 @@ interpreted as relative to one greater than the maximum index of array, and an index of -1 references the last element.

    -
    ${parameter#word}
    -
    ${parameter##word}
    +
    ${parameter#word}
    +
    ${parameter##word}

    The word is expanded to produce a pattern and matched according to the rules described below (see Pattern Matching). If the pattern matches @@ -2719,8 +2796,8 @@ the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter%word}
    -
    ${parameter%%word}
    +
    ${parameter%word}
    +
    ${parameter%%word}

    The word is expanded to produce a pattern and matched according to the rules described below (see Pattern Matching). @@ -2737,23 +2814,79 @@ the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter/pattern/string}
    -
    -

    The pattern is expanded to produce a pattern just as in +

    ${parameter/pattern/string}
    +
    ${parameter//pattern/string}
    +
    ${parameter/#pattern/string}
    +
    ${parameter/%pattern/string}
    +

    The pattern is expanded to produce a pattern just as in filename expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. +string undergoes tilde expansion, parameter and variable expansion, +arithmetic expansion, command and process substitution, and quote removal. The match is performed according to the rules described below (see Pattern Matching). -If pattern begins with ‘/’, all matches of pattern are -replaced with string. Normally only the first match is replaced. -If pattern begins with ‘#’, it must match at the beginning -of the expanded value of parameter. -If pattern begins with ‘%’, it must match at the end -of the expanded value of parameter. -If string is null, matches of pattern are deleted -and the / following pattern may be omitted. -If the nocasematch shell option +

    +

    In the first form above, only the first match is replaced. +If there are two slashes separating parameter and pattern +(the second form above), all matches of pattern are +replaced with string. +If pattern is preceded by ‘#’ (the third form above), +it must match at the beginning of the expanded value of parameter. +If pattern is preceded by ‘%’ (the fourth form above), +it must match at the end of the expanded value of parameter. +If the expansion of string is null, +matches of pattern are deleted. +If string is null, +matches of pattern are deleted +and the ‘/’ following pattern may be omitted. +

    +

    If the patsub_replacement shell option is enabled using shopt, +any unquoted instances of ‘&’ in string are replaced with the +matching portion of pattern. +This is intended to duplicate a common sed idiom. +Backslash is used to quote ‘&’ in string; the backslash is removed +in order to permit a literal ‘&’ in the replacement string. +Pattern substitution performs the check for ‘&’ after expanding +string, +so users should take care to quote backslashes intended to escape +the ‘&’ and inhibit replacement so they survive any quote removal +performed by the expansion of string. +For instance, +

    +
    +
    var=abcdef
    +echo ${var/abc/& }
    +echo "${var/abc/& }"
    +echo ${var/abc/"& "}
    +
    + +

    will display three lines of "abc def", while +

    +
    +
    var=abcdef
    +echo ${var/abc/\& }
    +echo "${var/abc/\& }"
    +echo ${var/abc/"\& "}
    +
    + +

    will display two lines of "abc def" and a third line of "& def". +The first two are replaced because the backslash is removed by quote +removal performed during the expansion of string +(the expansion is performed in a +context that doesn’t take any enclosing double quotes into account, as +with other word expansions). +In the third case, the double quotes affect the expansion +of ‘\&’, and, because ‘&’ is not one of the characters for +which backslash is special in double quotes, +the backslash survives the expansion, inhibits the replacement, +but is removed because it is treated specially. +One could use ‘\\&’, unquoted, as the replacement string to achive +the same effect. +It should rarely be necessary to enclose only string in double +quotes. +

    +

    If the nocasematch shell option (see the description of shopt in The Shopt Builtin) is enabled, the match is performed without regard to the case of alphabetic characters. @@ -2766,17 +2899,18 @@ the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter^pattern}
    -
    ${parameter^^pattern}
    -
    ${parameter,pattern}
    -
    ${parameter,,pattern}
    +
    ${parameter^pattern}
    +
    ${parameter^^pattern}
    +
    ${parameter,pattern}
    +
    ${parameter,,pattern}

    This expansion modifies the case of alphabetic characters in parameter. The pattern is expanded to produce a pattern just as in filename expansion. Each character in the expanded value of parameter is tested against pattern, and, if it matches the pattern, its case is converted. The pattern should not attempt to match more than one character. -The ‘^’ operator converts lowercase letters matching pattern +

    +

    The ‘^’ operator converts lowercase letters matching pattern to uppercase; the ‘,’ operator converts matching uppercase letters to lowercase. The ‘^^’ and ‘,,’ expansions convert each matched character in the @@ -2784,7 +2918,8 @@ expanded value; the ‘^’ and ‘,&rsquo the first character in the expanded value. If pattern is omitted, it is treated like a ‘?’, which matches every character. -If parameter is ‘@’ or ‘*’, +

    +

    If parameter is ‘@’ or ‘*’, the case modification operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter @@ -2793,51 +2928,55 @@ the case modification operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter@operator}
    +
    ${parameter@operator}

    The expansion is either a transformation of the value of parameter or information about parameter itself, depending on the value of operator. Each operator is a single letter:

    -
    U
    +
    U

    The expansion is a string that is the value of parameter with lowercase alphabetic characters converted to uppercase.

    -
    u
    +
    u

    The expansion is a string that is the value of parameter with the first character converted to uppercase, if it is alphabetic.

    -
    L
    +
    L

    The expansion is a string that is the value of parameter with uppercase alphabetic characters converted to lowercase.

    -
    Q
    +
    Q

    The expansion is a string that is the value of parameter quoted in a format that can be reused as input.

    -
    E
    +
    E

    The expansion is a string that is the value of parameter with backslash escape sequences expanded as with the $'…' quoting mechanism.

    -
    P
    +
    P

    The expansion is a string that is the result of expanding the value of parameter as if it were a prompt string (see Controlling the Prompt).

    -
    A
    +
    A

    The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.

    -
    K
    +
    K

    Produces a possibly-quoted version of the value of parameter, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (see Arrays).

    -
    a
    +
    a

    The expansion is a string consisting of flag values representing parameter’s attributes.

    +
    k
    +

    Like the ‘K’ transformation, but expands the keys and values of +indexed and associative arrays to separate words after word splitting. +

    If parameter is ‘@’ or ‘*’, @@ -2854,7 +2993,9 @@ expansion as described below.


    -
    +
    +
    + @@ -2895,7 +3036,9 @@ form, escape the inner backquotes with backslashes. filename expansion are not performed on the results.


    -
    +
    +
    + @@ -2910,8 +3053,10 @@ and the substitution of the result. The format for arithmetic expansion is:
    $(( expression ))
     
    -

    The expression is treated as if it were within double quotes, but -a double quote inside the parentheses is not treated specially. +

    The expression undergoes the same expansions +as if it were within double quotes, +but double quote characters in expression are not treated specially +and are removed. All tokens in the expression undergo parameter and variable expansion, command substitution, and quote removal. The result is treated as the arithmetic expression to be evaluated. @@ -2923,7 +3068,9 @@ If the expression is invalid, Bash prints a message indicating failure to the standard error and no substitution occurs.


    -
    +
    +
    + @@ -2960,7 +3107,9 @@ parameter and variable expansion, command substitution, and arithmetic expansion.


    -
    +
    +
    + @@ -3008,15 +3157,13 @@ null argument removal. is performed.


    -
    +
    +
    +

    3.5.8 Filename Expansion

    - - - @@ -3042,9 +3189,13 @@ without regard to the case of alphabetic characters.

    When a pattern is used for filename expansion, the character ‘.’ at the start of a filename or immediately following a slash must be matched explicitly, unless the shell option dotglob is set. -The filenames ‘.’ and ‘..’ must always be matched explicitly, +In order to match the filenames ‘.’ and ‘..’, +the pattern must begin with ‘.’ (for example, ‘.?’), even if dotglob is set. -In other cases, the ‘.’ character is not treated specially. +If the globskipdots shell option is enabled, the filenames +‘.’ and ‘..’ are never matched, even if the pattern begins +with a ‘.’. +When not matching filenames, the ‘.’ character is not treated specially.

    When matching a filename, the slash character must always be matched explicitly by a slash in the pattern, but in other matching @@ -3053,6 +3204,7 @@ below (see Pattern Matching).

    See the description of shopt in The Shopt Builtin, for a description of the nocaseglob, nullglob, +globskipdots, failglob, and dotglob options.

    The GLOBIGNORE @@ -3075,8 +3227,12 @@ To get the old behavior of ignoring filenames beginning with a The dotglob option is disabled when GLOBIGNORE is unset.

    +
    -
    +
    + @@ -3094,7 +3250,7 @@ literally.

    The special pattern characters have the following meanings:

    -
    *
    +
    *

    Matches any string, including the null string. When the globstar shell option is enabled, and ‘*’ is used in a filename expansion context, two adjacent ‘*’s used as a single @@ -3103,10 +3259,10 @@ subdirectories. If followed by a ‘/’, two adjacent ‘*’s will match only directories and subdirectories.

    -
    ?
    +
    ?

    Matches any single character.

    -
    […]
    +
    […]

    Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that falls between those two characters, inclusive, @@ -3130,7 +3286,7 @@ force the use of the C locale by setting the LC_COLLATE or LC_ALL environment variable to the value ‘C’, or enable the globasciiranges shell option.

    -

    Within ‘[’ and ‘]’, character classes can be specified +

    Within ‘[’ and ‘]’, character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX standard: @@ -3142,7 +3298,7 @@ print punct space upper word xdigit The word character class matches letters, digits, and the character ‘_’.

    -

    Within ‘[’ and ‘]’, an equivalence class can be +

    Within ‘[’ and ‘]’, an equivalence class can be specified using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c. @@ -3153,34 +3309,47 @@ matches the collating symbol symbol.

    If the extglob shell option is enabled using the shopt -builtin, several extended pattern matching operators are recognized. +builtin, the shell recognizes several extended pattern matching operators. In the following description, a pattern-list is a list of one or more patterns separated by a ‘|’. +When matching filenames, the dotglob shell option determines +the set of filenames that are tested, as described above. Composite patterns may be formed using one or more of the following sub-patterns:

    -
    ?(pattern-list)
    +
    ?(pattern-list)

    Matches zero or one occurrence of the given patterns.

    -
    *(pattern-list)
    +
    *(pattern-list)

    Matches zero or more occurrences of the given patterns.

    -
    +(pattern-list)
    +
    +(pattern-list)

    Matches one or more occurrences of the given patterns.

    -
    @(pattern-list)
    +
    @(pattern-list)

    Matches one of the given patterns.

    -
    !(pattern-list)
    +
    !(pattern-list)

    Matches anything except one of the given patterns.

    +

    When matching filenames, the dotglob shell option determines +the set of filenames that are tested: +when dotglob is enabled, the set of filenames includes all files +beginning with ‘.’, but the filenames +‘.’ and ‘..’ must be matched by a +pattern or sub-pattern that begins with a dot; +when it is disabled, the set does not +include any filenames beginning with “.” unless the pattern +or sub-pattern begins with a ‘.’. +As above, ‘.’ only has a special meaning when matching filenames. +

    Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings contain multiple matches. @@ -3188,7 +3357,10 @@ Using separate matches against shorter strings, or using arrays of strings instead of a single long string, may be faster.


    -
    +
    +
    +
    + @@ -3199,7 +3371,10 @@ characters ‘\’, ‘'’, and &lsqu result from one of the above expansions are removed.


    -
    +
    +
    +
    + @@ -3207,9 +3382,9 @@ Next:

    The Shopt Builtin).

    In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is @@ -3265,29 +3442,29 @@ special files, bash will use them; otherwise it will emulate them internally with the behavior described below.

    -
    /dev/fd/fd
    +
    /dev/fd/fd

    If fd is a valid integer, file descriptor fd is duplicated.

    -
    /dev/stdin
    +
    /dev/stdin

    File descriptor 0 is duplicated.

    -
    /dev/stdout
    +
    /dev/stdout

    File descriptor 1 is duplicated.

    -
    /dev/stderr
    +
    /dev/stderr

    File descriptor 2 is duplicated.

    -
    /dev/tcp/host/port
    +
    /dev/tcp/host/port

    If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open the corresponding TCP socket.

    -
    /dev/udp/host/port
    +
    /dev/udp/host/port

    If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open the corresponding UDP socket. @@ -3300,7 +3477,20 @@ the corresponding UDP socket. care, as they may conflict with file descriptors the shell uses internally.

    -

    3.6.1 Redirecting Input

    + +
    +

    3.6.1 Redirecting Input

    Redirection of input causes the file whose name results from the expansion of word to be opened for reading on file descriptor n, @@ -3312,7 +3502,9 @@ is not specified.

    [n]<word
     
    -

    3.6.2 Redirecting Output

    +
    +
    +

    3.6.2 Redirecting Output

    Redirection of output causes the file whose name results from the expansion of word to be opened for writing on file descriptor n, @@ -3333,7 +3525,9 @@ If the redirection operator is ‘>|’, or the redirect ‘>’ and the noclobber option is not enabled, the redirection is attempted even if the file named by word exists.

    -

    3.6.3 Appending Redirected Output

    +
    +
    +

    3.6.3 Appending Redirected Output

    Redirection of output in this fashion causes the file whose name results from the expansion of word @@ -3346,7 +3540,9 @@ is not specified. If the file does not exist it is created.

    [n]>>word
     
    -

    3.6.4 Redirecting Standard Output and Standard Error

    +
    +
    +

    3.6.4 Redirecting Standard Output and Standard Error

    This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) @@ -3371,7 +3567,9 @@ This is semantically equivalent to ‘-’. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons.

    -

    3.6.5 Appending Standard Output and Standard Error

    +
    +
    +

    3.6.5 Appending Standard Output and Standard Error

    This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) @@ -3388,7 +3586,9 @@ expansion of word.

    (see Duplicating File Descriptors below).

    -

    3.6.6 Here Documents

    +
    +
    +

    3.6.6 Here Documents

    This type of redirection instructs the shell to read input from the current source until a line containing only word (with no trailing blanks) is seen. All of @@ -3420,7 +3620,9 @@ line containing delimiter. This allows here-documents within shell scripts to be indented in a natural fashion.

    -

    3.6.7 Here Strings

    +
    +
    +

    3.6.7 Here Strings

    A variant of here documents, the format is:

    [n]<<< word
    @@ -3435,7 +3637,9 @@ with a newline appended,
     to the command on its
     standard input (or file descriptor n if n is specified).
     

    -

    3.6.8 Duplicating File Descriptors

    +
    +
    +

    3.6.8 Duplicating File Descriptors

    The redirection operator

    [n]<&word
    @@ -3464,7 +3668,9 @@ As a special case, if n is omitted, and word does not
     expand to one or more digits or ‘-’, the standard output and standard
     error are redirected as described previously.
     

    -

    3.6.9 Moving File Descriptors

    +
    +
    +

    3.6.9 Moving File Descriptors

    The redirection operator

    [n]<&digit-
    @@ -3480,7 +3686,9 @@ or the standard input (file descriptor 0) if n is not specified.
     

    moves the file descriptor digit to file descriptor n, or the standard output (file descriptor 1) if n is not specified.

    -

    3.6.10 Opening File Descriptors for Reading and Writing

    +
    +
    +

    3.6.10 Opening File Descriptors for Reading and Writing

    The redirection operator

    [n]<>word
    @@ -3491,34 +3699,27 @@ to be opened for both reading and writing on file descriptor
     is not specified.  If the file does not exist, it is created.
     


    -
    +
    +
    +
    +

    3.7 Executing Commands

    - - - - - - - - +
    -
    +
    + @@ -3548,7 +3749,11 @@ and quote removal before being assigned to the variable.

    If no command name results, the variable assignments affect the current -shell environment. Otherwise, the variables are added to the environment +shell environment. +In the case of such a command (one that consists only of assignment +statements and redirections), assignment statements are performed before +redirections. +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. @@ -3564,7 +3769,9 @@ the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero.


    -
    +
    +
    + @@ -3610,7 +3817,7 @@ to the command are set to the arguments supplied, if any.
  • 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 -shell script and the shell executes it as described in +shell script and the shell executes it as described in Shell Scripts.
  • If the command was not begun asynchronously, the shell waits for @@ -3619,14 +3826,16 @@ the command to complete and collects its exit status.

  • -
    +
    +
    +

    3.7.3 Command Execution Environment

    -

    The shell has an execution environment, which consists of the +

    The shell has an execution environment, which consists of the following:

      @@ -3655,7 +3864,7 @@ arguments) or by set
    • shell aliases defined with alias (see Aliases)
    • various process IDs, including those of background jobs -(see Lists), the value of $$, and the value of +(see Lists of Commands), the value of $$, and the value of $PPID
    @@ -3685,6 +3894,8 @@ shell’s parent, and traps ignored by the shell are ignored

    A command invoked in this separate environment cannot affect the shell’s execution environment.

    +

    A subshell is a copy of the shell process. +

    Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, @@ -3704,7 +3915,9 @@ Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections.


    -
    +
    +
    + @@ -3712,13 +3925,13 @@ Next: , Previous:

    When a program is invoked it is given an array of strings -called the environment. +called the environment. This is a list of name-value pairs, of the form 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 export +it for export to child processes. Executed commands inherit the environment. The export and ‘declare -x’ commands allow parameters and functions to be added to and @@ -3746,7 +3959,9 @@ is set to the full pathname of the command and passed to that command in its environment.


    -
    +
    +
    +

    Next: , Previous: , Up: Executing Commands   [Contents][Index]

    @@ -3754,7 +3969,7 @@ Next: , Previous:

    The exit status of an executed command is the value returned by the -waitpid system call or equivalent function. Exit statuses +waitpid system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands are also limited to this range. Under certain @@ -3779,7 +3994,7 @@ the exit status is greater than zero.

    The exit status is used by the Bash conditional commands (see Conditional Constructs) and some of the list -constructs (see Lists). +constructs (see Lists of Commands).

    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 @@ -3787,8 +4002,13 @@ conditional and list constructs. All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments.

    +

    The exit status of the last command is available in the special +parameter $? (see Special Parameters). +


    -
    +
    +
    + @@ -3837,8 +4057,40 @@ which a trap has been set will cause the wait builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed.

    +

    When job control is not enabled, and Bash is waiting for a foreground +command to complete, the shell receives keyboard-generated signals +such as SIGINT (usually generated by ‘^C’) that users +commonly intend to send to that command. +This happens because the shell and the command are in the same process +group as the terminal, and ‘^C’ sends SIGINT to all processes +in that process group. +See Job Control, for a more in-depth discussion of process groups. +

    +

    When Bash is running without job control enabled and receives SIGINT +while waiting for a foreground command, it waits until that foreground +command terminates and then decides what to do about the SIGINT: +

    +
      +
    1. If the command terminates due to the SIGINT, Bash concludes +that the user meant to end the entire script, and acts on the +SIGINT (e.g., by running a SIGINT trap or exiting itself); + +
    2. If the pipeline does not terminate due to SIGINT, the program +handled the SIGINT itself and did not treat it as a fatal signal. +In that case, Bash does not treat SIGINT as a fatal signal, +either, instead assuming that the SIGINT was used as part of the +program’s normal operation (e.g., emacs uses it to abort editing +commands) or deliberately discarded. However, Bash will run any +trap set on SIGINT, as it does with any other trapped signal it +receives while it is waiting for the foreground command to +complete, for compatibility. +
    +
    -
    +
    +
    +
    + @@ -3863,8 +4115,10 @@ are unset.

    A shell script may be made executable by using the chmod command to turn on the execute bit. When Bash finds such a file while -searching the $PATH for a command, it spawns a subshell to -execute it. In other words, executing +searching the $PATH for a command, it creates a +new instance of itself +to execute it. +In other words, executing

    filename arguments
     
    @@ -3910,25 +4164,15 @@ under another shell. It’s a common idiom to use env to find in $PATH.


    -
    +
    +
    +
    +

    4 Shell Builtin Commands

    - - - - - -

    Builtin commands are contained within the shell itself. When the name of a builtin command is used as the first word of @@ -3963,10 +4207,17 @@ Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with ‘-’ as invalid options and require ‘--’ to prevent this interpretation.

    +
    -
    +
    +

    4.1 Bourne Shell Builtins

    @@ -3974,9 +4225,8 @@ Next: , Up: < These commands are implemented as specified by the POSIX standard.

    -
    : (a colon)
    -
    -
    +
    : (a colon)
    +
    : [arguments]
     
    @@ -3984,35 +4234,34 @@ These commands are implemented as specified by the POSIX standard The return status is zero.

    -
    . (a period)
    -
    -
    +
    . (a period)
    +
    . filename [arguments]
     

    Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, -the PATH variable is used to find filename. +the PATH variable is used to find filename, +but filename does not need to be executable. When Bash is not in POSIX mode, the current directory is searched if filename is not found in $PATH. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. -If the -T option is enabled, source inherits any trap on +If the -T option is enabled, . inherits any trap on DEBUG; if it is not, any DEBUG trap string is saved and -restored around the call to source, and source unsets the +restored around the call to ., and . unsets the DEBUG trap while it executes. If -T is not set, and the sourced file changes -the DEBUG trap, the new value is retained when source completes. +the DEBUG trap, the new value is retained when . completes. The return status is the exit status of the last command executed, or zero if no commands are executed. If filename is not found, or cannot be read, the return status is non-zero. This builtin is equivalent to source.

    -
    break
    -
    -
    +
    break
    +
    break [n]
     
    @@ -4022,16 +4271,14 @@ If n is supplied, the nth enclosing loop is exited. The return status is zero unless n is not greater than or equal to 1.

    -
    cd
    -
    -
    +
    cd
    +
    cd [-L|[-P [-e]] [-@] [directory]
     

    Change the current working directory to directory. If directory is not supplied, the value of the HOME shell variable is used. -Any additional arguments following directory are ignored. If the shell variable CDPATH exists, it is used as a search path: each directory name in CDPATH is searched for @@ -4067,13 +4314,17 @@ before the directory change is attempted. successful, the absolute pathname of the new working directory is written to the standard output.

    +

    If the directory change is successful, cd sets the value of the +PWD environment variable to the new directory name, and sets the +OLDPWD environment variable to the value of the current working +directory before the change. +

    The return status is zero if the directory is successfully changed, non-zero otherwise.

    -
    continue
    -
    -
    +
    continue
    +
    continue [n]
     
    @@ -4085,9 +4336,8 @@ is resumed. The return status is zero unless n is not greater than or equal to 1.

    -
    eval
    -
    -
    +
    eval
    +
    eval [arguments]
     
    @@ -4098,9 +4348,8 @@ If there are no arguments or only empty arguments, the return status is zero.

    -
    exec
    -
    -
    +
    exec
    +
    exec [-cl] [-a name] [command [arguments]]
     
    @@ -4124,9 +4373,8 @@ the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero.

    -
    exit
    -
    -
    +
    exit
    +
    exit [n]
     
    @@ -4135,9 +4383,8 @@ If n is omitted, the exit status is that of the last command executed Any trap on EXIT is executed before the shell terminates.

    -
    export
    -
    -
    +
    export
    +
    export [-fn] [-p] [name[=value]]
     
    @@ -4145,7 +4392,7 @@ Any trap on EXIT is executed before the shell terminates. in the environment. If the -f option is supplied, the names refer to shell functions; otherwise the names refer to shell variables. The -n option means to no longer mark each name for export. -If no names are supplied, or if the -p option is given, a +If no names are supplied, or if the -p option is given, a list of names of all exported variables is displayed. The -p option displays output in a form that may be reused as input. If a variable name is followed by =value, the value of @@ -4156,9 +4403,8 @@ the names is not a valid shell variable name, or -f is supplied with a name that is not a shell function.

    -
    getopts
    -
    -
    +
    getopts
    +
    getopts optstring name [arg …]
     
    @@ -4212,9 +4458,8 @@ If getopts is silent, then a colon (‘:’) i name and OPTARG is set to the option character found.

    -
    hash
    -
    -
    +
    hash
    +
    hash [-r] [-p filename] [-dt] [name]
     
    @@ -4241,9 +4486,8 @@ The return status is zero unless a name is not found or an invalid option is supplied.

    -
    pwd
    -
    -
    +
    pwd
    +
    pwd [-LP]
     
    @@ -4257,9 +4501,8 @@ determining the name of the current directory or an invalid option is supplied.

    -
    readonly
    -
    -
    +
    readonly
    +
    readonly [-aAf] [-p] [name[=value]] …
     
    @@ -4284,9 +4527,8 @@ the name arguments is not a valid shell variable or function name, or the -f option is supplied with a name that is not a shell function.

    -
    return
    -
    -
    +
    return
    +
    return [n]
     
    @@ -4313,9 +4555,8 @@ argument or is used outside a function and not during the execution of a script by . or source.

    -
    shift
    -
    -
    +
    shift
    +
    shift [n]
     
    @@ -4332,10 +4573,9 @@ The return status is zero unless n is greater than $# or less than zero, non-zero otherwise.

    -
    test
    -
    [
    -
    - +
    test
    +
    [
    +
    test expr
     
    @@ -4357,20 +4597,20 @@ The evaluation depends on the number of arguments; see below. Operator precedence is used when there are five or more arguments.

    -
    ! expr
    +
    ! expr

    True if expr is false.

    -
    ( expr )
    +
    ( expr )

    Returns the value of expr. This may be used to override the normal precedence of operators.

    -
    expr1 -a expr2
    +
    expr1 -a expr2

    True if both expr1 and expr2 are true.

    -
    expr1 -o expr2
    +
    expr1 -o expr2

    True if either expr1 or expr2 is true.

    @@ -4379,15 +4619,15 @@ This may be used to override the normal precedence of operators. expressions using a set of rules based on the number of arguments.

    -
    0 arguments
    +
    0 arguments

    The expression is false.

    -
    1 argument
    +
    1 argument

    The expression is true if, and only if, the argument is not null.

    -
    2 arguments
    +
    2 arguments

    If the first argument is ‘!’, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators @@ -4397,7 +4637,7 @@ If the first argument is not a valid unary operator, the expression is false.

    -
    3 arguments
    +
    3 arguments

    The following conditions are applied in the order listed.

      @@ -4416,14 +4656,21 @@ argument.
    -
    4 arguments
    -

    If the first argument is ‘!’, 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. +

    4 arguments
    +

    The following conditions are applied in the order listed.

    +
      +
    1. If the first argument is ‘!’, the result is the negation of +the three-argument expression composed of the remaining arguments. +
    2. If the first argument is exactly ‘(’ and the fourth argument is +exactly ‘)’, the result is the two-argument test of the second +and third arguments. +
    3. Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. +
    +
    -
    5 or more arguments
    +
    5 or more arguments

    The expression is parsed and evaluated according to precedence using the rules listed above.

    @@ -4433,9 +4680,8 @@ using the rules listed above. operators sort lexicographically using ASCII ordering.

    -
    times
    -
    -
    +
    times
    +
    times
     
    @@ -4443,9 +4689,8 @@ operators sort lexicographically using ASCII ordering. The return status is zero.

    -
    trap
    -
    -
    +
    trap
    +
    trap [-lp] [arg] [sigspec …]
     
    @@ -4505,9 +4750,8 @@ values in a subshell or subshell environment when one is created. valid signal.

    -
    umask
    -
    -
    +
    umask
    +
    umask [-p] [-S] [mode]
     
    @@ -4528,9 +4772,8 @@ of the umask is subtracted from 7. Thus, a umask of 022755.

    -
    unset
    -
    -
    +
    unset
    +
    unset [-fnv] [name]
     
    @@ -4540,7 +4783,7 @@ If the -v option is given, each If the -f option is given, the names refer to shell functions, and the function definition is removed. If the -n option is supplied, and name is a variable with -the nameref attribute, name will be unset rather than the +the nameref attribute, name will be unset rather than the variable it references. -n has no effect if the -f option is supplied. If no options are supplied, each name refers to a variable; if @@ -4549,12 +4792,14 @@ unset. Readonly variables and functions may not be unset. Some shell variables lose their special behavior if they are unset; such behavior is noted in the description of the individual variables. -The return status is zero unless a name is readonly. +The return status is zero unless a name is readonly or may not be unset.


    -
    +
    +
    + @@ -4565,9 +4810,8 @@ or have been extended in Bash. Some of these commands are specified in the POSIX standard.

    -
    alias
    -
    -
    +
    alias
    +
    alias [-p] [name[=value] …]
     
    @@ -4580,15 +4824,15 @@ and value of the alias is printed. Aliases are described in Aliases.

    -
    bind
    -
    -
    +
    bind
    +
    bind [-m keymap] [-lpsvPSVX]
     bind [-m keymap] [-q function] [-u function] [-r keyseq]
     bind [-m keymap] -f filename
     bind [-m keymap] -x keyseq:shell-command
     bind [-m keymap] keyseq:function-name
     bind [-m keymap] keyseq:readline-command
    +bind readline-command-line
     

    Display current Readline (see Command Line Editing) @@ -4603,7 +4847,7 @@ but each binding or command must be passed as a separate argument; e.g.,

    Options, if supplied, have the following meanings:

    -
    -m keymap
    +
    -m keymap

    Use keymap as the keymap to be affected by the subsequent bindings. Acceptable keymap names are @@ -4619,55 +4863,55 @@ names are synonym); emacs is equivalent to emacs-standard.

    -
    -l
    +
    -l

    List the names of all Readline functions.

    -
    -p
    +
    -p

    Display Readline function names and bindings in such a way that they can be used as input or in a Readline initialization file.

    -
    -P
    +
    -P

    List current Readline function names and bindings.

    -
    -v
    +
    -v

    Display Readline variable names and values in such a way that they can be used as input or in a Readline initialization file.

    -
    -V
    +
    -V

    List current Readline variable names and values.

    -
    -s
    +
    -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.

    -
    -S
    +
    -S

    Display Readline key sequences bound to macros and the strings they output.

    -
    -f filename
    +
    -f filename

    Read key bindings from filename.

    -
    -q function
    +
    -q function

    Query about which keys invoke the named function.

    -
    -u function
    +
    -u function

    Unbind all keys bound to the named function.

    -
    -r keyseq
    +
    -r keyseq

    Remove any current binding for keyseq.

    -
    -x keyseq:shell-command
    +
    -x keyseq:shell-command

    Cause shell-command to be executed whenever keyseq is entered. When shell-command is executed, the shell sets the @@ -4675,12 +4919,15 @@ When shell-command is executed, the shell sets the buffer and the READLINE_POINT and READLINE_MARK variables to the current location of the insertion point and the saved insertion point (the mark), respectively. +The shell assigns any numeric argument the user supplied to the +READLINE_ARGUMENT variable. +If there was no argument, that variable is not set. If the executed command changes the value of any of READLINE_LINE, READLINE_POINT, or READLINE_MARK, those new values will be reflected in the editing state.

    -
    -X
    +
    -X

    List all key sequences bound to shell commands and the associated commands in a format that can be reused as input.

    @@ -4690,9 +4937,8 @@ in a format that can be reused as input. error occurs.

    -
    builtin
    -
    -
    +
    builtin
    +
    builtin [shell-builtin [args]]
     
    @@ -4704,9 +4950,8 @@ The return status is non-zero if shell-builtin is not a shell builtin command.

    -
    caller
    -
    -
    +
    caller
    +
    caller [expr]
     
    @@ -4726,9 +4971,8 @@ call or expr does not correspond to a valid position in the call stack.

    -
    command
    -
    -
    +
    command
    +
    command [-pVv] command [arguments …]
     
    @@ -4753,9 +4997,8 @@ a more verbose description. In this case, the return status is zero if command is found, and non-zero if not.

    -
    declare
    -
    -
    +
    declare
    +
    declare [-aAfFgiIlnrtux] [-p] [name[=value] …]
     
    @@ -4786,7 +5029,7 @@ the global scope, even when declare is executed in a shell function It is ignored in all other cases.

    The -I option causes local variables to inherit the attributes -(except the nameref attribute) +(except the nameref attribute) and value of any existing variable with the same name at a surrounding scope. If there is no existing variable, the local variable is initially unset. @@ -4795,32 +5038,32 @@ If there is no existing variable, the local variable is initially unset. the specified attributes or to give variables attributes:

    -
    -a
    +
    -a

    Each name is an indexed array variable (see Arrays).

    -
    -A
    +
    -A

    Each name is an associative array variable (see Arrays).

    -
    -f
    +
    -f

    Use function names only.

    -
    -i
    +
    -i

    The variable is to be treated as an integer; arithmetic evaluation (see Shell Arithmetic) is performed when the variable is assigned a value.

    -
    -l
    +
    -l

    When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled.

    -
    -n
    -

    Give each name the nameref attribute, making +

    -n
    +

    Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All references, assignments, and attribute modifications @@ -4830,25 +5073,25 @@ to name, except for those using or changing the The nameref attribute cannot be applied to array variables.

    -
    -r
    +
    -r

    Make names readonly. These names cannot then be assigned values by subsequent assignment statements or unset.

    -
    -t
    +
    -t

    Give each name the trace attribute. Traced functions inherit the DEBUG and RETURN traps from the calling shell. The trace attribute has no special meaning for variables.

    -
    -u
    +
    -u

    When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled.

    -
    -x
    +
    -x

    Mark each name for export to subsequent commands via the environment.

    @@ -4872,15 +5115,14 @@ an attempt is made to define a function using ‘-f foo=bar&rsq 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 Arrays), -one of the names is not a valid shell variable name, +one of the 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 -f.

    -
    echo
    -
    -
    +
    echo
    +
    echo [-neE] [arg …]
     
    @@ -4899,59 +5141,58 @@ escape characters by default.

    echo interprets the following escape sequences:

    -
    \a
    +
    \a

    alert (bell)

    -
    \b
    +
    \b

    backspace

    -
    \c
    +
    \c

    suppress further output

    -
    \e
    -
    \E
    +
    \e
    +
    \E

    escape

    -
    \f
    +
    \f

    form feed

    -
    \n
    +
    \n

    new line

    -
    \r
    +
    \r

    carriage return

    -
    \t
    +
    \t

    horizontal tab

    -
    \v
    +
    \v

    vertical tab

    -
    \\
    +
    \\

    backslash

    -
    \0nnn
    +
    \0nnn

    the eight-bit character whose value is the octal value nnn (zero to three octal digits)

    -
    \xHH
    +
    \xHH

    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    -
    \uHHHH
    +
    \uHHHH

    the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

    -
    \UHHHHHHHH
    +
    \UHHHHHHHH

    the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

    -
    enable
    -
    -
    +
    enable
    +
    enable [-a] [-dnps] [-f filename] [name …]
     
    @@ -4972,6 +5213,9 @@ each builtin with an indication of whether or not it is enabled.

    The -f option means to load the new builtin command name from shared object filename, on systems that support dynamic loading. +Bash will use the value of the BASH_LOADABLES_PATH variable as a +colon-separated list of directories in which to search for filename. +The default is system-dependent. The -d option will delete a builtin loaded with -f.

    If there are no options, a list of the shell builtins is displayed. @@ -4979,13 +5223,17 @@ The -s option restricts enable to the POSIX-s is used with -f, the new builtin becomes a special builtin (see Special Builtins).

    +

    If no options are supplied and a name is not a shell builtin, +enable will attempt to load name from a shared object named +name, as if the command were +‘enable -f name name’. +

    The return status is zero unless a name is not a shell builtin or there is an error loading a new builtin from a shared object.

    -
    help
    -
    -
    +
    help
    +
    help [-dms] [pattern]
     
    @@ -4997,13 +5245,13 @@ the builtins is printed.

    Options, if supplied, have the following meanings:

    -
    -d
    +
    -d

    Display a short description of each pattern

    -
    -m
    +
    -m

    Display the description of each pattern in a manpage-like format

    -
    -s
    +
    -s

    Display only a short usage synopsis for each pattern

    @@ -5011,9 +5259,8 @@ the builtins is printed.

    The return status is zero unless no command matches pattern.

    -
    let
    -
    -
    +
    let
    +
    let expression [expression …]
     
    @@ -5024,9 +5271,8 @@ last expression evaluates to 0, let returns 1; otherwise 0 is returned.

    -
    local
    -
    -
    +
    local
    +
    local [option] name[=value] …
     
    @@ -5047,9 +5293,8 @@ a function, an invalid name is supplied, or name is a readonly variable.

    -
    logout
    -
    -
    +
    logout
    +
    logout [n]
     
    @@ -5057,9 +5302,8 @@ readonly variable. parent.

    -
    mapfile
    -
    -
    +
    mapfile
    +
    mapfile [-d delim] [-n count] [-O origin] [-s count]
         [-t] [-u fd] [-C callback] [-c quantum] [array]
     
    @@ -5071,33 +5315,33 @@ The variable MAPFILE is the default array. Options, if supplied, have the following meanings:

    -
    -d
    +
    -d

    The first character of delim is used to terminate each input line, rather than newline. If delim is the empty string, mapfile will terminate a line when it reads a NUL character.

    -
    -n
    +
    -n

    Copy at most count lines. If count is 0, all lines are copied.

    -
    -O
    +
    -O

    Begin assigning to array at index origin. The default index is 0.

    -
    -s
    +
    -s

    Discard the first count lines read.

    -
    -t
    +
    -t

    Remove a trailing delim (default newline) from each line read.

    -
    -u
    +
    -u

    Read lines from file descriptor fd instead of the standard input.

    -
    -C
    +
    -C

    Evaluate callback each time quantum lines are read. The -c option specifies quantum.

    -
    -c
    +
    -c

    Specify the number of lines read between each call to callback.

    @@ -5118,9 +5362,8 @@ argument is supplied, array is invalid or unassignable, or array is not an indexed array.

    -
    printf
    -
    -
    +
    printf
    +
    printf [-v var] format [arguments]
     
    @@ -5138,16 +5381,20 @@ In addition to the standard printf(1) formats, printf interprets the following extensions:

    -
    %b
    +
    %b

    Causes printf to expand backslash escape sequences in the corresponding argument in the same way as echo -e -(see Bash Builtins). +(see Bash Builtin Commands).

    -
    %q
    +
    %q

    Causes printf to output the corresponding argument in a format that can be reused as shell input.

    -
    %(datefmt)T
    +
    %Q
    +

    like %q, but applies any supplied precision to the argument +before quoting it. +

    +
    %(datefmt)T

    Causes printf to output the date-time string resulting from using datefmt as a format string for strftime(3). The corresponding argument is an integer representing the number of @@ -5176,9 +5423,8 @@ appropriate, had been supplied. The return value is zero on success, non-zero on failure.

    -
    read
    -
    -
    +
    read
    +
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars]
         [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
     
    @@ -5203,38 +5449,38 @@ meaning for the next character read and for line continuation.

    Options, if supplied, have the following meanings:

    -
    -a aname
    +
    -a aname

    The words are assigned to sequential indices of the array variable aname, starting at 0. All elements are removed from aname before the assignment. Other name arguments are ignored.

    -
    -d delim
    +
    -d delim

    The first character of delim is used to terminate the input line, rather than newline. If delim is the empty string, read will terminate a line when it reads a NUL character.

    -
    -e
    +
    -e

    Readline (see Command Line Editing) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline’s default filename completion.

    -
    -i text
    +
    -i text

    If Readline is being used to read the line, text is placed into the editing buffer before editing begins.

    -
    -n nchars
    +
    -n nchars

    read returns after reading nchars characters rather than waiting for a complete line of input, but honors a delimiter if fewer than nchars characters are read before the delimiter.

    -
    -N nchars
    +
    -N nchars

    read returns after reading exactly nchars characters rather than waiting for a complete line of input, unless EOF is encountered or read times out. @@ -5246,25 +5492,25 @@ that the variable is assigned exactly the characters read (with the exception of backslash; see the -r option below).

    -
    -p prompt
    +
    -p prompt

    Display prompt, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal.

    -
    -r
    +
    -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 then be used as a line continuation.

    -
    -s
    +
    -s

    Silent mode. If input is coming from a terminal, characters are not echoed.

    -
    -t timeout
    +
    -t timeout

    Cause read to time out and return failure if a complete line of input (or a specified number of characters) is not read within timeout seconds. @@ -5276,12 +5522,14 @@ from regular files. If read times out, read saves any partial input read into the specified variable name. If timeout is 0, read returns immediately, without trying to -read any data. The exit status is 0 if input is available on -the specified file descriptor, non-zero otherwise. +read any data. +The exit status is 0 if input is available on the specified file descriptor, +or the read will return EOF, +non-zero otherwise. The exit status is greater than 128 if the timeout is exceeded.

    -
    -u fd
    +
    -u fd

    Read input from file descriptor fd.

    @@ -5296,9 +5544,8 @@ a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is supplied as the argument to -u.

    -
    readarray
    -
    -
    +
    readarray
    +
    readarray [-d delim] [-n count] [-O origin] [-s count]
         [-t] [-u fd] [-C callback] [-c quantum] [array]
     
    @@ -5310,18 +5557,16 @@ if the -u option is supplied.

    A synonym for mapfile.

    -
    source
    -
    -
    +
    source
    +
    source filename
     

    A synonym for . (see Bourne Shell Builtins).

    -
    type
    -
    -
    +
    type
    +
    type [-afptP] [name …]
     
    @@ -5354,13 +5599,12 @@ is not also used.

    If the -f option is used, type does not attempt to find shell functions, as with the command builtin.

    -

    The return status is zero if all of the names are found, non-zero +

    The return status is zero if all of the names are found, non-zero if any are not found.

    -
    typeset
    -
    -
    +
    typeset
    +
    typeset [-afFgrxilnrtux] [-p] [name[=value] …]
     
    @@ -5369,9 +5613,8 @@ shell. It is a synonym for the declare builtin command.

    -
    ulimit
    -
    -
    +
    ulimit
    +
    ulimit [-HS] -a
     ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [limit]
     
    @@ -5381,101 +5624,101 @@ started by the shell, on systems that allow such control. If an option is given, it is interpreted as follows:

    -
    -S
    +
    -S

    Change and report the soft limit associated with a resource.

    -
    -H
    +
    -H

    Change and report the hard limit associated with a resource.

    -
    -a
    +
    -a

    All current limits are reported; no limits are set.

    -
    -b
    +
    -b

    The maximum socket buffer size.

    -
    -c
    +
    -c

    The maximum size of core files created.

    -
    -d
    +
    -d

    The maximum size of a process’s data segment.

    -
    -e
    +
    -e

    The maximum scheduling priority ("nice").

    -
    -f
    +
    -f

    The maximum size of files written by the shell and its children.

    -
    -i
    +
    -i

    The maximum number of pending signals.

    -
    -k
    +
    -k

    The maximum number of kqueues that may be allocated.

    -
    -l
    +
    -l

    The maximum size that may be locked into memory.

    -
    -m
    +
    -m

    The maximum resident set size (many systems do not honor this limit).

    -
    -n
    +
    -n

    The maximum number of open file descriptors (most systems do not allow this value to be set).

    -
    -p
    +
    -p

    The pipe buffer size.

    -
    -q
    +
    -q

    The maximum number of bytes in POSIX message queues.

    -
    -r
    +
    -r

    The maximum real-time scheduling priority.

    -
    -s
    +
    -s

    The maximum stack size.

    -
    -t
    +
    -t

    The maximum amount of cpu time in seconds.

    -
    -u
    +
    -u

    The maximum number of processes available to a single user.

    -
    -v
    +
    -v

    The maximum amount of virtual memory available to the shell, and, on some systems, to its children.

    -
    -x
    +
    -x

    The maximum number of file locks.

    -
    -P
    +
    -P

    The maximum number of pseudoterminals.

    -
    -R
    +
    -R

    The maximum time a real-time process can run before blocking, in microseconds.

    -
    -T
    +
    -T

    The maximum number of threads.

    @@ -5511,9 +5754,8 @@ and, when in POSIX Mode (see Bash POSI or an error occurs while setting a new limit.

    -
    unalias
    -
    -
    +
    unalias
    +
    unalias [-a] [name … ]
     
    @@ -5524,22 +5766,22 @@ Aliases are described in Aliases.

    -
    +
    +
    +

    4.3 Modifying Shell Behavior

    - - - - +
    -
    +
    + @@ -5550,11 +5792,10 @@ allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables.

    -
    set
    -
    -
    -
    set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
    -set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
    +
    set
    +
    +
    set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [argument …]
    +set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [argument …]
     

    If no options or arguments are supplied, set displays the names @@ -5568,22 +5809,22 @@ In POSIX mode, only shell variables are listed. Options, if specified, have the following meanings:

    -
    -a
    +
    -a

    Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands.

    -
    -b
    +
    -b

    Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt.

    -
    -e
    +
    -e

    Exit immediately if a pipeline (see Pipelines), which may consist of a single simple command (see Simple Commands), -a list (see Lists), +a list (see Lists of Commands), or a compound command (see Compound Commands) returns a non-zero status. The shell does not exit if the command that fails is part of the @@ -5613,129 +5854,129 @@ effect until the compound command or the command containing the function call completes.

    -
    -f
    +
    -f

    Disable filename expansion (globbing).

    -
    -h
    +
    -h

    Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default.

    -
    -k
    +
    -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.

    -
    -m
    +
    -m

    Job control is enabled (see Job Control). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status.

    -
    -n
    +
    -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.

    -
    -o option-name
    +
    -o option-name

    Set the option corresponding to option-name:

    -
    allexport
    +
    allexport

    Same as -a.

    -
    braceexpand
    +
    braceexpand

    Same as -B.

    -
    emacs
    +
    emacs

    Use an emacs-style line editing interface (see Command Line Editing). This also affects the editing interface used for read -e.

    -
    errexit
    +
    errexit

    Same as -e.

    -
    errtrace
    +
    errtrace

    Same as -E.

    -
    functrace
    +
    functrace

    Same as -T.

    -
    hashall
    +
    hashall

    Same as -h.

    -
    histexpand
    +
    histexpand

    Same as -H.

    -
    history
    +
    history

    Enable command history, as described in Bash History Facilities. This option is on by default in interactive shells.

    -
    ignoreeof
    +
    ignoreeof

    An interactive shell will not exit upon reading EOF.

    -
    keyword
    +
    keyword

    Same as -k.

    -
    monitor
    +
    monitor

    Same as -m.

    -
    noclobber
    +
    noclobber

    Same as -C.

    -
    noexec
    +
    noexec

    Same as -n.

    -
    noglob
    +
    noglob

    Same as -f.

    -
    nolog
    +
    nolog

    Currently ignored.

    -
    notify
    +
    notify

    Same as -b.

    -
    nounset
    +
    nounset

    Same as -u.

    -
    onecmd
    +
    onecmd

    Same as -t.

    -
    physical
    +
    physical

    Same as -P.

    -
    pipefail
    +
    pipefail

    If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.

    -
    posix
    +
    posix

    Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard (see Bash POSIX Mode). @@ -5743,26 +5984,26 @@ This is intended to make Bash behave as a strict superset of that standard.

    -
    privileged
    +
    privileged

    Same as -p.

    -
    verbose
    +
    verbose

    Same as -v.

    -
    vi
    +
    vi

    Use a vi-style line editing interface. This also affects the editing interface used for read -e.

    -
    xtrace
    +
    xtrace

    Same as -x.

    -
    -p
    +
    -p

    Turn on privileged mode. In this mode, the $BASH_ENV and $ENV files are not processed, shell functions are not inherited from the environment, @@ -5777,22 +6018,29 @@ Turning this option off causes the effective user and group ids to be set to the real user and group ids.

    -
    -t
    +
    -r
    +

    Enable restricted shell mode. +This option cannot be unset once it has been set. +

    +
    +
    -t

    Exit after reading and executing one command.

    -
    -u
    +
    -u

    Treat unset variables and parameters other than the special parameters -‘@’ or ‘*’ as an error when performing parameter expansion. +‘@’ or ‘*’, +or array variables subscripted with ‘@’ or ‘*’, +as an error when performing parameter expansion. An error message will be written to the standard error, and a non-interactive shell will exit.

    -
    -v
    +
    -v

    Print shell input lines as they are read.

    -
    -x
    +
    -x

    Print a trace of simple commands, for commands, case commands, select commands, and arithmetic for commands and their arguments or associated word lists after they are @@ -5801,28 +6049,28 @@ variable is expanded and the resultant value is printed before the command and its expanded arguments.

    -
    -B
    +
    -B

    The shell will perform brace expansion (see Brace Expansion). This option is on by default.

    -
    -C
    +
    -C

    Prevent output redirection using ‘>’, ‘>&’, and ‘<>’ from overwriting existing files.

    -
    -E
    +
    -E

    If set, any trap on ERR is inherited by shell functions, command substitutions, and commands executed in a subshell environment. The ERR trap is normally not inherited in such cases.

    -
    -H
    -

    Enable ‘!’ style history substitution (see History Interaction). +

    -H
    +

    Enable ‘!’ style history substitution (see History Expansion). This option is on by default for interactive shells.

    -
    -P
    +
    -P

    If set, do not resolve symbolic links when performing commands such as cd which change the current directory. The physical directory is used instead. By default, Bash follows @@ -5847,7 +6095,7 @@ $ cd ..; pwd

    -
    -T
    +
    -T

    If set, any trap on DEBUG and RETURN are inherited by shell functions, command substitutions, and commands executed in a subshell environment. @@ -5855,13 +6103,13 @@ The DEBUG and RETURN traps are normally not inherited in such cases.

    -
    --
    +
    --

    If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the arguments, even if some of them begin with a ‘-’.

    -
    -
    +
    -

    Signal the end of options, cause all remaining arguments to be assigned to the positional parameters. The -x and -v options are turned off. @@ -5882,7 +6130,9 @@ The special parameter # is set to N.


    -
    +
    +
    + @@ -5891,9 +6141,8 @@ Previous: This builtin allows you to change additional shell optional behavior.

    -
    shopt
    -
    -
    +
    shopt
    +
    shopt [-pqsu] [-o] [optname …]
     
    @@ -5903,29 +6152,29 @@ The settings can be either those listed below, or, if the option to the set builtin command (see The Set Builtin). With no options, or with the -p option, a list of all settable options is displayed, with an indication of whether or not each is set; -if optnames are supplied, the output is restricted to those options. +if optnames are supplied, the output is restricted to those options. The -p option causes output to be displayed in a form that may be reused as input. Other options have the following meanings:

    -
    -s
    +
    -s

    Enable (set) each optname.

    -
    -u
    +
    -u

    Disable (unset) each optname.

    -
    -q
    +
    -q

    Suppresses normal output; the return status indicates whether the optname is set or unset. If multiple optname arguments are given with -q, -the return status is zero if all optnames are enabled; +the return status is zero if all optnames are enabled; non-zero otherwise.

    -
    -o
    +
    -o

    Restricts the values of optname to be those defined for the -o option to the set builtin (see The Set Builtin). @@ -5939,33 +6188,33 @@ those options which are set or unset, respectively.

    Unless otherwise noted, the shopt options are disabled (off) by default.

    -

    The return status when listing options is zero if all optnames +

    The return status when listing options is zero if all optnames are enabled, non-zero otherwise. When setting or unsetting options, the return status is zero unless an optname is not a valid shell option.

    The list of shopt options is:

    -
    assoc_expand_once
    +
    assoc_expand_once

    If set, the shell suppresses multiple evaluation of associative array subscripts during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing.

    -
    autocd
    +
    autocd

    If set, a command name that is the name of a directory is executed as if it were the argument to the cd command. This option is only used by interactive shells.

    -
    cdable_vars
    +
    cdable_vars

    If this is set, an argument to the 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.

    -
    cdspell
    +
    cdspell

    If set, minor errors in the spelling of a directory component in a cd command will be corrected. The errors checked for are transposed characters, @@ -5975,13 +6224,13 @@ and the command proceeds. This option is only used by interactive shells.

    -
    checkhash
    +
    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.

    -
    checkjobs
    +
    checkjobs

    If set, Bash lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is attempted without an @@ -5989,14 +6238,14 @@ intervening command (see Job Control). The shell always postpones exiting if any jobs are stopped.

    -
    checkwinsize
    +
    checkwinsize

    If set, Bash checks the window size after each external (non-builtin) command and, if necessary, updates the values of LINES and COLUMNS. This option is enabled by default.

    -
    cmdhist
    +
    cmdhist

    If set, Bash attempts to save all lines of a multiple-line command in the same history entry. This allows @@ -6005,18 +6254,18 @@ This option is enabled by default, but only has an effect if command history is enabled (see Bash History Facilities).

    -
    compat31
    -
    compat32
    -
    compat40
    -
    compat41
    -
    compat42
    -
    compat43
    -
    compat44
    +
    compat31
    +
    compat32
    +
    compat40
    +
    compat41
    +
    compat42
    +
    compat43
    +
    compat44

    These control aspects of the shell’s compatibility mode (see Shell Compatibility Mode).

    -
    complete_fullquote
    +
    complete_fullquote

    If set, Bash quotes all shell metacharacters in filenames and directory names when performing completion. @@ -6034,7 +6283,7 @@ This variable is set by default, which is the default Bash behavior in versions through 4.2.

    -
    direxpand
    +
    direxpand

    If set, Bash replaces directory names with the results of word expansion when performing filename completion. This changes the contents of the readline editing @@ -6042,33 +6291,33 @@ buffer. If not set, Bash attempts to preserve what the user typed.

    -
    dirspell
    +
    dirspell

    If set, Bash attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist.

    -
    dotglob
    +
    dotglob

    If set, Bash includes filenames beginning with a ‘.’ in the results of filename expansion. The filenames ‘.’ and ‘..’ must always be matched explicitly, even if dotglob is set.

    -
    execfail
    +
    execfail

    If this is set, a non-interactive shell will not exit if it cannot execute the file specified as an argument to the exec builtin command. An interactive shell does not exit if exec fails.

    -
    expand_aliases
    +
    expand_aliases

    If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.

    -
    extdebug
    +
    extdebug

    If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile @@ -6076,7 +6325,7 @@ before the shell starts, identical to the --debugger option. If set after invocation, behavior intended for use by debuggers is enabled:

      -
    1. The -F option to the declare builtin (see Bash Builtins) +
    2. The -F option to the declare builtin (see Bash Builtin Commands) displays the source file name and line number corresponding to each function name supplied as an argument. @@ -6101,23 +6350,23 @@ subshells invoked with ( command ) inherit the
    -
    extglob
    +
    extglob

    If set, the extended pattern matching features described above (see Pattern Matching) are enabled.

    -
    extquote
    +
    extquote

    If set, $'string' and $"string" quoting is performed within ${parameter} expansions enclosed in double quotes. This option is enabled by default.

    -
    failglob
    +
    failglob

    If set, patterns which fail to match filenames during filename expansion result in an expansion error.

    -
    force_fignore
    +
    force_fignore

    If set, the suffixes specified by the FIGNORE shell variable cause words to be ignored when performing word completion even if the ignored words are the only possible completions. @@ -6125,7 +6374,7 @@ See Bash Variables, for a description of FIG This option is enabled by default.

    -
    globasciiranges
    +
    globasciiranges

    If set, range expressions used in pattern matching bracket expressions (see Pattern Matching) behave as if in the traditional C locale when performing @@ -6135,136 +6384,158 @@ is not taken into account, so and upper-case and lower-case ASCII characters will collate together.

    -
    globstar
    +
    globskipdots
    +

    If set, filename expansion will never match the filenames +‘.’ and ‘..’, +even if the pattern begins with a ‘.’. +This option is enabled by default. +

    +
    +
    globstar

    If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match.

    -
    gnu_errfmt
    +
    gnu_errfmt

    If set, shell error messages are written in the standard GNU error message format.

    -
    histappend
    +
    histappend

    If set, the history list is appended to the file named by the value of the HISTFILE variable when the shell exits, rather than overwriting the file.

    -
    histreedit
    +
    histreedit

    If set, and Readline is being used, a user is given the opportunity to re-edit a failed history substitution.

    -
    histverify
    +
    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.

    -
    hostcomplete
    +
    hostcomplete

    If set, and Readline is being used, Bash will attempt to perform hostname completion when a word containing a ‘@’ is being -completed (see Commands For Completion). This option is enabled +completed (see Letting Readline Type For You). This option is enabled by default.

    -
    huponexit
    +
    huponexit

    If set, Bash will send SIGHUP to all jobs when an interactive login shell exits (see Signals).

    -
    inherit_errexit
    +
    inherit_errexit

    If set, command substitution inherits the value of the errexit option, instead of unsetting it in the subshell environment. This option is enabled when POSIX mode is enabled.

    -
    interactive_comments
    +
    interactive_comments

    Allow a word beginning with ‘#’ to cause that word and all remaining characters on that line to be ignored in an interactive shell. This option is enabled by default.

    -
    lastpipe
    +
    lastpipe

    If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in the current shell environment.

    -
    lithist
    +
    lithist

    If enabled, and the cmdhist option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible.

    -
    localvar_inherit
    +
    localvar_inherit

    If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope before any new value is -assigned. The nameref attribute is not inherited. +assigned. The nameref attribute is not inherited.

    -
    localvar_unset
    +
    localvar_unset

    If set, calling unset on local variables in previous function scopes marks them so subsequent lookups find them unset until that function returns. This is identical to the behavior of unsetting local variables at the current function scope.

    -
    login_shell
    +
    login_shell

    The shell sets this option if it is started as a login shell (see Invoking Bash). The value may not be changed.

    -
    mailwarn
    +
    mailwarn

    If set, and a file that Bash is checking for mail has been accessed since the last time it was checked, the message "The mail in mailfile has been read" is displayed.

    -
    no_empty_cmd_completion
    +
    no_empty_cmd_completion

    If set, and Readline is being used, Bash will not attempt to search the PATH for possible completions when completion is attempted on an empty line.

    -
    nocaseglob
    +
    nocaseglob

    If set, Bash matches filenames in a case-insensitive fashion when performing filename expansion.

    -
    nocasematch
    +
    nocasematch

    If set, Bash matches patterns in a case-insensitive fashion when performing matching while executing case or [[ -conditional commands, +conditional commands (see Conditional Constructs, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion.

    -
    nullglob
    +
    noexpand_translation
    +

    If set, Bash +encloses the translated results of $"..." quoting in single quotes +instead of double quotes. +If the string is not translated, this has no effect. +

    +
    +
    nullglob

    If set, Bash allows filename patterns which match no files to expand to a null string, rather than themselves.

    -
    progcomp
    +
    patsub_replacement
    +

    If set, Bash +expands occurrences of ‘&’ in the replacement string of pattern +substitution to the text matched by the pattern, as described +above (see Shell Parameter Expansion). +This option is enabled by default. +

    +
    +
    progcomp

    If set, the programmable completion facilities (see Programmable Completion) are enabled. This option is enabled by default.

    -
    progcomp_alias
    +
    progcomp_alias

    If set, and programmable completion is enabled, Bash treats a command name that doesn’t have any completions as a possible alias and attempts alias expansion. If it has an alias, Bash attempts programmable completion using the command word resulting from the expanded alias.

    -
    promptvars
    +
    promptvars

    If set, prompt strings undergo parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded @@ -6272,7 +6543,7 @@ as described below (see Controlling the Prompt This option is enabled by default.

    -
    restricted_shell
    +
    restricted_shell

    The shell sets this option if it is started in restricted mode (see The Restricted Shell). The value may not be changed. @@ -6280,19 +6551,25 @@ This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted.

    -
    shift_verbose
    +
    shift_verbose

    If this is set, the shift builtin prints an error message when the shift count exceeds the number of positional parameters.

    -
    sourcepath
    -

    If set, the source builtin uses the value of PATH +

    sourcepath
    +

    If set, the . (source) builtin uses the value of PATH to find the directory containing the file supplied as an argument. This option is enabled by default.

    -
    xpg_echo
    +
    varredir_close
    +

    If set, the shell automatically closes file descriptors assigned using the +{varname} redirection syntax (see Redirections) instead of +leaving them open when the command completes. +

    +
    +
    xpg_echo

    If set, the echo builtin expands backslash-escape sequences by default.

    @@ -6302,7 +6579,10 @@ by default.

    -
    +
    +
    +
    + @@ -6334,25 +6614,26 @@ shift trap unset

    -
    +
    +
    +
    +

    5 Shell Variables

    - - - -

    This chapter describes the shell variables that Bash uses. Bash automatically assigns default values to a number of variables.

    +
    -
    +
    + @@ -6362,41 +6643,31 @@ Next: , Up: In some cases, Bash assigns a default value to the variable.

    -
    CDPATH - -
    +
    CDPATH

    A colon-separated list of directories used as a search path for the cd builtin command.

    -
    HOME - -
    +
    HOME

    The current user’s home directory; the default for the cd builtin command. The value of this variable is also used by tilde expansion (see Tilde Expansion).

    -
    IFS - -
    +
    IFS

    A list of characters that separate fields; used when the shell splits words as part of expansion.

    -
    MAIL - -
    +
    MAIL

    If this parameter is set to a filename or directory name and the MAILPATH variable is not set, Bash informs the user of the arrival of mail in the specified file or Maildir-format directory.

    -
    MAILPATH - -
    +
    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 @@ -6406,21 +6677,15 @@ When used in the text of the message, $_ expands to the name of the current mail file.

    -
    OPTARG - -
    +
    OPTARG

    The value of the last option argument processed by the getopts builtin.

    -
    OPTIND - -
    +
    OPTIND

    The index of the last option argument processed by the getopts builtin.

    -
    PATH - -
    +
    PATH

    A colon-separated list of directories in which the shell looks for commands. A zero-length (null) directory name in the value of PATH indicates the @@ -6429,17 +6694,13 @@ A null directory name may appear as two adjacent colons, or as an initial or trailing colon.

    -
    PS1 - -
    +
    PS1

    The primary prompt string. The default value is ‘\s-\v\$ ’. See Controlling the Prompt, for the complete list of escape sequences that are expanded before PS1 is displayed.

    -
    PS2 - -
    +
    PS2

    The secondary prompt string. The default value is ‘> ’. PS2 is expanded in the same way as PS1 before being displayed. @@ -6448,7 +6709,9 @@ displayed.


    -
    +
    +
    + @@ -6462,9 +6725,7 @@ variables for controlling the job control facilities (see Job Control Variables).

    -
    _ - -
    +
    _

    ($_, an underscore.) At shell startup, set to the pathname used to invoke the @@ -6477,15 +6738,11 @@ and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file.

    -
    BASH - -
    +
    BASH

    The full pathname used to execute the current instance of Bash.

    -
    BASHOPTS - -
    +
    BASHOPTS

    A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -s option to the shopt builtin command (see The Shopt Builtin). @@ -6496,9 +6753,7 @@ starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly.

    -
    BASHPID - -
    +
    BASHPID

    Expands to the process ID of the current Bash process. This differs from $$ under certain circumstances, such as subshells that do not require Bash to be re-initialized. @@ -6508,9 +6763,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_ALIASES - -
    +
    BASH_ALIASES

    An associative array variable whose members correspond to the internal list of aliases as maintained by the alias builtin. (see Bourne Shell Builtins). @@ -6522,9 +6775,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_ARGC - -
    +
    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 @@ -6540,9 +6791,7 @@ or referencing this variable when extdebug is not set, may result in inconsistent values.

    -
    BASH_ARGV - -
    +
    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 @@ -6557,9 +6806,7 @@ or referencing this variable when extdebug is not set, may result in inconsistent values.

    -
    BASH_ARGV0 - -
    +
    BASH_ARGV0

    When referenced, this variable expands to the name of the shell or shell script (identical to $0; See Special Parameters, for the description of special parameter 0). @@ -6570,9 +6817,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_CMDS - -
    +
    BASH_CMDS

    An associative array variable whose members correspond to the internal hash table of commands as maintained by the hash builtin (see Bourne Shell Builtins). @@ -6584,9 +6829,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_COMMAND - -
    +
    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. @@ -6595,9 +6838,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_COMPAT - -
    +
    BASH_COMPAT

    The value is used to set the shell’s compatibility level. See Shell Compatibility Mode, for a description of the various compatibility levels and their effects. @@ -6616,25 +6857,19 @@ and set the compatibility level to 42. The current version is also a valid value.

    -
    BASH_ENV - -
    +
    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. See Bash Startup Files.

    -
    BASH_EXECUTION_STRING - -
    +
    BASH_EXECUTION_STRING

    The command argument to the -c invocation option.

    -
    BASH_LINENO - -
    +
    BASH_LINENO

    An array variable whose members are the line numbers in source files -where each corresponding member of FUNCNAME was invoked. +where each corresponding member of FUNCNAME was invoked. ${BASH_LINENO[$i]} is the line number in the source file (${BASH_SOURCE[$i+1]}) where ${FUNCNAME[$i]} was called (or ${BASH_LINENO[$i-1]} if @@ -6642,17 +6877,13 @@ referenced within another shell function). Use LINENO to obtain the current line number.

    -
    BASH_LOADABLES_PATH - -
    +
    BASH_LOADABLES_PATH

    A colon-separated list of directories in which the shell looks for dynamically loadable builtins specified by the enable command.

    -
    BASH_REMATCH - -
    +
    BASH_REMATCH

    An array variable whose members are assigned by the ‘=~’ binary operator to the [[ conditional command (see Conditional Constructs). @@ -6662,9 +6893,7 @@ The element with index n is the portion of the string matching the nth parenthesized subexpression.

    -
    BASH_SOURCE - -
    +
    BASH_SOURCE

    An array variable whose members are the source filenames where the corresponding shell function names in the FUNCNAME array variable are defined. @@ -6672,9 +6901,7 @@ The shell function ${FUNCNAME[$i]} is defined in the file ${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}

    -
    BASH_SUBSHELL - -
    +
    BASH_SUBSHELL

    Incremented by one within each subshell or subshell environment when the shell begins executing in that environment. The initial value is 0. @@ -6683,49 +6910,43 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_VERSINFO - -
    +
    BASH_VERSINFO

    A readonly array variable (see Arrays) whose members hold version information for this instance of Bash. The values assigned to the array members are as follows:

    -
    BASH_VERSINFO[0]
    -

    The major version number (the release). +

    BASH_VERSINFO[0]
    +

    The major version number (the release).

    -
    BASH_VERSINFO[1]
    -

    The minor version number (the version). +

    BASH_VERSINFO[1]
    +

    The minor version number (the version).

    -
    BASH_VERSINFO[2]
    +
    BASH_VERSINFO[2]

    The patch level.

    -
    BASH_VERSINFO[3]
    +
    BASH_VERSINFO[3]

    The build version.

    -
    BASH_VERSINFO[4]
    -

    The release status (e.g., beta1). +

    BASH_VERSINFO[4]
    +

    The release status (e.g., beta1).

    -
    BASH_VERSINFO[5]
    +
    BASH_VERSINFO[5]

    The value of MACHTYPE.

    -
    BASH_VERSION - -
    +
    BASH_VERSION

    The version number of the current instance of Bash.

    -
    BASH_XTRACEFD - -
    +
    BASH_XTRACEFD

    If set to an integer corresponding to a valid file descriptor, Bash will write the trace output generated when ‘set -x’ is enabled to that file descriptor. @@ -6740,9 +6961,7 @@ descriptor) and then unsetting it will result in the standard error being closed.

    -
    CHILD_MAX - -
    +
    CHILD_MAX

    Set the number of exited child status values for the shell to remember. Bash will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may @@ -6750,9 +6969,7 @@ not exceed. The minimum value is system-dependent.

    -
    COLUMNS - -
    +
    COLUMNS

    Used by the select command to determine the terminal width when printing selection lists. Automatically set if the checkwinsize option is enabled @@ -6760,27 +6977,21 @@ Automatically set if the checkwinsize option is enabled SIGWINCH.

    -
    COMP_CWORD - -
    +
    COMP_CWORD

    An index into ${COMP_WORDS} of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_LINE - -
    +
    COMP_LINE

    The current command line. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_POINT - -
    +
    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, @@ -6790,12 +7001,10 @@ commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_TYPE - -
    +
    COMP_TYPE

    Set to an integer value corresponding to the type of completion attempted that caused a completion function to be called: -TAB, for normal completion, +TAB, for normal completion, ‘?’, for listing completions after successive tabs, ‘!’, for listing alternatives on partial word completion, ‘@’, to list completions if the word is not unmodified, @@ -6806,16 +7015,12 @@ commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_KEY - -
    +
    COMP_KEY

    The key (or final key of a key sequence) used to invoke the current completion function.

    -
    COMP_WORDBREAKS - -
    +
    COMP_WORDBREAKS

    The set of characters that the Readline library treats as word separators when performing word completion. If COMP_WORDBREAKS @@ -6823,9 +7028,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    COMP_WORDS - -
    +
    COMP_WORDS

    An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split it, using @@ -6834,25 +7037,19 @@ This variable is available only in shell functions invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMPREPLY - -
    +
    COMPREPLY

    An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility (see Programmable Completion). Each array element contains one possible completion.

    -
    COPROC - -
    +
    COPROC

    An array variable created to hold the file descriptors for output from and input to an unnamed coprocess (see Coprocesses).

    -
    DIRSTACK - -
    +
    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 dirs builtin. @@ -6865,29 +7062,23 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    EMACS - -
    +
    EMACS

    If Bash finds this variable in the environment when the shell starts with value ‘t’, it assumes that the shell is running in an Emacs shell buffer and disables line editing.

    -
    ENV - -
    +
    ENV

    Expanded and executed similarlty to BASH_ENV (see Bash Startup Files) when an interactive shell is invoked in POSIX Mode (see Bash POSIX Mode).

    -
    EPOCHREALTIME - -
    +
    EPOCHREALTIME

    Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity -(see the documentation for the C library function time for the +(see the documentation for the C library function time for the definition of Epoch). Assignments to EPOCHREALTIME are ignored. If EPOCHREALTIME @@ -6895,28 +7086,22 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    EPOCHSECONDS - -
    +
    EPOCHSECONDS

    Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C library function -time for the definition of Epoch). +time for the definition of Epoch). Assignments to EPOCHSECONDS are ignored. If EPOCHSECONDS is unset, it loses its special properties, even if it is subsequently reset.

    -
    EUID - -
    +
    EUID

    The numeric effective user id of the current user. This variable is readonly.

    -
    EXECIGNORE - -
    +
    EXECIGNORE

    A colon-separated list of shell patterns (see Pattern Matching) defining the list of filenames to be ignored by command search using PATH. @@ -6932,16 +7117,12 @@ The pattern matching honors the setting of the extglob shell option.

    -
    FCEDIT - -
    +
    FCEDIT

    The editor used as a default by the -e option to the fc builtin command.

    -
    FIGNORE - -
    +
    FIGNORE

    A colon-separated list of suffixes to ignore when performing filename completion. A filename whose suffix matches one of the entries in @@ -6950,9 +7131,7 @@ is excluded from the list of matched filenames. A sample value is ‘.o:~

    -
    FUNCNAME - -
    +
    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 @@ -6974,17 +7153,13 @@ The caller builtin displays the current call stack using this information.

    -
    FUNCNEST - -
    +
    FUNCNEST

    If set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed this nesting level will cause the current command to abort.

    -
    GLOBIGNORE - -
    +
    GLOBIGNORE

    A colon-separated list of patterns defining the set of file names to be ignored by filename expansion. If a file name matched by a filename expansion pattern also matches one @@ -6994,9 +7169,7 @@ The pattern matching honors the setting of the extglob shell option.

    -
    GROUPS - -
    +
    GROUPS

    An array variable containing the list of groups of which the current user is a member. Assignments to GROUPS have no effect. @@ -7005,13 +7178,11 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    histchars - -
    +
    histchars

    Up to three characters which control history expansion, quick -substitution, and tokenization (see History Interaction). +substitution, and tokenization (see History Expansion). The first character is the -history expansion character, that is, the character which signifies the +history expansion character, that is, the character which signifies the start of a history expansion, normally ‘!’. The second character is the character which signifies ‘quick substitution’ when seen as the first character on a line, normally ‘^’. The optional third character is the @@ -7022,9 +7193,7 @@ remaining words on the line. It does not necessarily cause the shell parser to treat the rest of the line as a comment.

    -
    HISTCMD - -
    +
    HISTCMD

    The history number, or index in the history list, of the current command. Assignments to HISTCMD are ignored. @@ -7033,9 +7202,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    HISTCONTROL - -
    +
    HISTCONTROL

    A colon-separated list of values controlling how commands are saved on the history list. If the list of values includes ‘ignorespace’, lines which begin @@ -7056,16 +7223,12 @@ not tested, and are added to the history regardless of the value of HISTCONTROL.

    -
    HISTFILE - -
    +
    HISTFILE

    The name of the file to which the command history is saved. The default value is ~/.bash_history.

    -
    HISTFILESIZE - -
    +
    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 @@ -7078,9 +7241,7 @@ The shell sets the default value to the value of HISTSIZE after reading any startup files.

    -
    HISTIGNORE - -
    +
    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 @@ -7103,9 +7264,7 @@ Combining these two patterns, separating them with a colon, provides the functionality of ignoreboth.

    -
    HISTSIZE - -
    +
    HISTSIZE

    The maximum number of commands to remember on the history list. If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved @@ -7113,11 +7272,9 @@ on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.

    -
    HISTTIMEFORMAT - -
    +
    HISTTIMEFORMAT

    If this variable is set and not null, its value is used as a format string -for strftime to print the time stamp associated with each history +for strftime to print the time stamp associated with each history entry displayed by the history builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. @@ -7125,9 +7282,7 @@ This uses the history comment character to distinguish timestamps from other history lines.

    -
    HOSTFILE - -
    +
    HOSTFILE

    Contains the name of a file in the same format as /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 @@ -7141,21 +7296,15 @@ Bash attempts to read When HOSTFILE is unset, the hostname list is cleared.

    -
    HOSTNAME - -
    +
    HOSTNAME

    The name of the current host.

    -
    HOSTTYPE - -
    +
    HOSTTYPE

    A string describing the machine Bash is running on.

    -
    IGNOREEOF - -
    +
    IGNOREEOF

    Controls the action of the shell on receipt of an EOF character as the sole input. If set, the value denotes the number of consecutive EOF characters that can be read as the @@ -7166,38 +7315,28 @@ If the variable does not exist, then EOF signifies the end of input to the shell. This is only in effect for interactive shells.

    -
    INPUTRC - -
    +
    INPUTRC

    The name of the Readline initialization file, overriding the default of ~/.inputrc.

    -
    INSIDE_EMACS - -
    +
    INSIDE_EMACS

    If Bash finds this variable in the environment when the shell starts, it assumes that the shell is running in an Emacs shell buffer and may disable line editing depending on the value of TERM.

    -
    LANG - -
    +
    LANG

    Used to determine the locale category for any category not specifically selected with a variable starting with LC_.

    -
    LC_ALL - -
    +
    LC_ALL

    This variable overrides the value of LANG and any other LC_ variable specifying a locale category.

    -
    LC_COLLATE - -
    +
    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, @@ -7205,46 +7344,34 @@ and collating sequences within filename expansion and pattern matching (see Filename Expansion).

    -
    LC_CTYPE - -
    +
    LC_CTYPE

    This variable determines the interpretation of characters and the behavior of character classes within filename expansion and pattern matching (see Filename Expansion).

    -
    LC_MESSAGES - -
    +
    LC_MESSAGES

    This variable determines the locale used to translate double-quoted -strings preceded by a ‘$’ (see Locale Translation). +strings preceded by a ‘$’ (see Locale-Specific Translation).

    -
    LC_NUMERIC - -
    +
    LC_NUMERIC

    This variable determines the locale category used for number formatting.

    -
    LC_TIME - -
    +
    LC_TIME

    This variable determines the locale category used for data and time formatting.

    -
    LINENO - -
    +
    LINENO

    The line number in the script or shell function currently executing. If LINENO is unset, it loses its special properties, even if it is subsequently reset.

    -
    LINES - -
    +
    LINES

    Used by the select command to determine the column length for printing selection lists. Automatically set if the checkwinsize option is enabled @@ -7252,16 +7379,12 @@ Automatically set if the checkwinsize option is enabled SIGWINCH.

    -
    MACHTYPE - -
    +
    MACHTYPE

    A string that fully describes the system type on which Bash is executing, in the standard GNU cpu-company-system format.

    -
    MAILCHECK - -
    +
    MAILCHECK

    How often (in seconds) that the shell should check for mail in the files specified in the MAILPATH or MAIL variables. The default is 60 seconds. When it is time to check @@ -7270,44 +7393,32 @@ 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.

    -
    MAPFILE - -
    +
    MAPFILE

    An array variable created to hold the text read by the mapfile builtin when no variable name is supplied.

    -
    OLDPWD - -
    +
    OLDPWD

    The previous working directory as set by the cd builtin.

    -
    OPTERR - -
    +
    OPTERR

    If set to the value 1, Bash displays error messages generated by the getopts builtin command.

    -
    OSTYPE - -
    +
    OSTYPE

    A string describing the operating system Bash is running on.

    -
    PIPESTATUS - -
    +
    PIPESTATUS

    An array variable (see 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).

    -
    POSIXLY_CORRECT - -
    +
    POSIXLY_CORRECT

    If this variable is in the environment when Bash starts, the shell enters POSIX mode (see Bash POSIX Mode) before reading the startup files, as if the --posix invocation option had been supplied. @@ -7321,16 +7432,12 @@ When the shell enters POSIX mode, it sets this variable if it was not already set.

    -
    PPID - -
    +
    PPID

    The process ID of the shell’s parent process. This variable is readonly.

    -
    PROMPT_COMMAND - -
    +
    PROMPT_COMMAND

    If this variable is set, and is an array, the value of each set element is interpreted as a command to execute before printing the primary prompt ($PS1). @@ -7338,35 +7445,27 @@ If this is set but not an array variable, its value is used as a command to execute instead.

    -
    PROMPT_DIRTRIM - -
    +
    PROMPT_DIRTRIM

    If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding the \w and \W prompt string escapes (see Controlling the Prompt). Characters removed are replaced with an ellipsis.

    -
    PS0 - -
    +
    PS0

    The value of this parameter is expanded like PS1 and displayed by interactive shells after reading a command and before the command is executed.

    -
    PS3 - -
    +
    PS3

    The value of this variable is used as the prompt for the select command. If this variable is not set, the select command prompts with ‘#?

    -
    PS4 - -
    -

    The value of this parameter is expanded like PS1 +

    PS4
    +

    The value of this parameter is expanded like PS1 and the expanded value is the prompt printed before the command line is echoed when the -x option is set (see The Set Builtin). The first character of the expanded value is replicated multiple times, @@ -7374,15 +7473,11 @@ as necessary, to indicate multiple levels of indirection. The default is ‘+ ’.

    -
    PWD - -
    +
    PWD

    The current working directory as set by the cd builtin.

    -
    RANDOM - -
    +
    RANDOM

    Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable seeds the random number generator. @@ -7391,62 +7486,53 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    READLINE_LINE - -
    +
    READLINE_ARGUMENT
    +

    Any numeric argument given to a Readline command that was defined using +‘bind -x’ (see Bash Builtin Commands +when it was invoked. +

    +
    +
    READLINE_LINE

    The contents of the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands).

    -
    READLINE_MARK - -
    -

    The position of the mark (saved insertion point) in the +

    READLINE_MARK
    +

    The position of the mark (saved insertion point) in the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands). The characters between the insertion point and the mark are often -called the region. +called the region.

    -
    READLINE_POINT - -
    +
    READLINE_POINT

    The position of the insertion point in the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands).

    -
    REPLY - -
    +
    REPLY

    The default variable for the read builtin.

    -
    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 +

    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. -The number of seconds at shell invocation and the current time is always +The number of seconds at shell invocation and the current time are always determined by querying the system clock. If SECONDS is unset, it loses its special properties, even if it is subsequently reset.

    -
    SHELL - -
    +
    SHELL

    This environment variable expands to the full pathname to the shell. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user’s login shell.

    -
    SHELLOPTS - -
    +
    SHELLOPTS

    A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -o option to the set builtin command (see The Set Builtin). @@ -7457,16 +7543,12 @@ starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly.

    -
    SHLVL - -
    +
    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.

    -
    SRANDOM - -
    +
    SRANDOM

    This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that support /dev/urandom or arc4random, so each returned number @@ -7478,9 +7560,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    TIMEFORMAT - -
    +
    TIMEFORMAT

    The value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. @@ -7491,23 +7571,23 @@ The escape sequences and their meanings are as follows; the braces denote optional portions.

    -
    %%
    +
    %%

    A literal ‘%’.

    -
    %[p][l]R
    +
    %[p][l]R

    The elapsed time in seconds.

    -
    %[p][l]U
    +
    %[p][l]U

    The number of CPU seconds spent in user mode.

    -
    %[p][l]S
    +
    %[p][l]S

    The number of CPU seconds spent in system mode.

    -
    %P
    +
    %P

    The CPU percentage, computed as (%U + %S) / %R.

    @@ -7531,11 +7611,9 @@ The value of p determines whether or not the fraction is included. A trailing newline is added when the format string is displayed.

    -
    TMOUT - -
    +
    TMOUT

    If set to a value greater than zero, TMOUT is treated as the -default timeout for the read builtin (see Bash Builtins). +default timeout for the read builtin (see Bash Builtin Commands). The select command (see Conditional Constructs) terminates if input does not arrive after TMOUT seconds when input is coming from a terminal. @@ -7548,63 +7626,47 @@ terminates after waiting for that number of seconds if a complete line of input does not arrive.

    -
    TMPDIR - -
    +
    TMPDIR

    If set, Bash uses its value as the name of a directory in which Bash creates temporary files for the shell’s use.

    -
    UID - -
    +
    UID

    The numeric real user id of the current user. This variable is readonly.


    -
    +
    +
    +
    +

    -Next: , Previous: , Up: Top   [Contents][Index]

    +Next: , Previous: , Up: Bash Features   [Contents][Index]

    6 Bash Features

    This chapter describes features unique to Bash.

    - - - - - - - - - - - - - - +
    -
    +
    + @@ -7626,57 +7688,57 @@ options that you can use. These options must appear on the command line before the single-character options to be recognized.

    -
    --debugger
    +
    --debugger

    Arrange for the debugger profile to be executed before the shell starts. Turns on extended debugging mode (see The Shopt Builtin for a description of the extdebug option to the shopt builtin).

    -
    --dump-po-strings
    +
    --dump-po-strings

    A list of all double-quoted strings preceded by ‘$’ is printed on the standard output in the GNU gettext PO (portable object) file format. Equivalent to -D except for the output format.

    -
    --dump-strings
    +
    --dump-strings

    Equivalent to -D.

    -
    --help
    +
    --help

    Display a usage message on standard output and exit successfully.

    -
    --init-file filename
    -
    --rcfile filename
    +
    --init-file filename
    +
    --rcfile filename

    Execute commands from filename (instead of ~/.bashrc) in an interactive shell.

    -
    --login
    +
    --login

    Equivalent to -l.

    -
    --noediting
    +
    --noediting

    Do not use the GNU Readline library (see Command Line Editing) to read command lines when the shell is interactive.

    -
    --noprofile
    +
    --noprofile

    Don’t load the system-wide startup file /etc/profile or any of the personal initialization files ~/.bash_profile, ~/.bash_login, or ~/.profile when Bash is invoked as a login shell.

    -
    --norc
    +
    --norc

    Don’t read the ~/.bashrc initialization file in an interactive shell. This is on by default if the shell is invoked as sh.

    -
    --posix
    +
    --posix

    Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard. This is intended to make Bash behave as a strict superset of that @@ -7684,15 +7746,15 @@ standard. See Bash POSIX Mode, for a description POSIX mode.

    -
    --restricted
    +
    --restricted

    Make the shell a restricted shell (see The Restricted Shell).

    -
    --verbose
    +
    --verbose

    Equivalent to -v. Print shell input lines as they’re read.

    -
    --version
    +
    --version

    Show version information for this instance of Bash on the standard output and exit successfully.

    @@ -7702,7 +7764,7 @@ Bash on the standard output and exit successfully. invocation which are not available with the set builtin.

    -
    -c
    +
    -c

    Read and execute commands from the first non-option argument command_string, then exit. If there are arguments after the command_string, @@ -7712,12 +7774,12 @@ The assignment to $0 sets the name of the shell, which is used in warning and error messages.

    -
    -i
    +
    -i

    Force the shell to run interactively. Interactive shells are described in Interactive Shells.

    -
    -l
    +
    -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 ‘exec -l bash’. @@ -7729,11 +7791,11 @@ See Bash Startup Files, for a description of t of a login shell.

    -
    -r
    +
    -r

    Make the shell a restricted shell (see The Restricted Shell).

    -
    -s
    +
    -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 @@ -7741,16 +7803,16 @@ when invoking an interactive shell or when reading input through a pipe.

    -
    -D
    +
    -D

    A list of all double-quoted strings preceded by ‘$’ is printed on the standard output. These are the strings that are subject to language translation when the current locale -is not C or POSIX (see Locale Translation). +is not C or POSIX (see Locale-Specific Translation). This implies the -n option; no commands will be executed.

    -
    [-+]O [shopt_option]
    +
    [-+]O [shopt_option]

    shopt_option is one of the shell options accepted by the shopt builtin (see The Shopt Builtin). If shopt_option is present, -O sets the value of that option; @@ -7761,7 +7823,7 @@ If the invocation option is +O, the output is displayed in a format that may be reused as input.

    -
    --
    +
    --

    A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. @@ -7792,7 +7854,9 @@ 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.


    -
    +
    +
    + @@ -7912,7 +7976,9 @@ If the -p option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset.


    -
    +
    +
    + @@ -7920,25 +7986,24 @@ Next:
    -
    +
    +

    6.3.1 What is an Interactive Shell?

    An interactive shell -is one started without non-option arguments, unless -s is -specified, without specifying the -c option, and +is one started without non-option arguments +(unless -s is specified) +and without specifying the -c option, whose input and error output are both connected to terminals (as determined by isatty(3)), or one started with the -i option. @@ -7950,7 +8015,9 @@ terminal. when an interactive shell is started.


    -
    +
    +
    + @@ -7981,7 +8048,9 @@ fi

    -
    +
    +
    + @@ -8005,7 +8074,7 @@ executing it. See Controlling the Prompt, for a complete list of prompt string escape sequences. -
  • Bash executes the values of the set elements of the PROMPT_COMMANDS +
  • Bash executes the values of the set elements of the PROMPT_COMMAND array variable as commands before printing the primary prompt, $PS1 (see Bash Variables). @@ -8017,7 +8086,7 @@ instead of exiting immediately when it receives an EOF on its standard input when reading a command (see The Set Builtin).
  • Command history (see Bash History Facilities) -and history expansion (see History Interaction) +and history expansion (see History Expansion) are enabled by default. Bash will save the command history to the file named by $HISTFILE when a shell with history enabled exits. @@ -8060,9 +8129,11 @@ status will not cause the shell to exit (see Bash POS
  • Parser syntax errors will not cause the shell to exit. -
  • Simple spelling correction for directory arguments to the cd -builtin is enabled by default (see the description of the cdspell +
  • If the cdspell shell option is enabled, the shell will attempt +simple spelling correction for directory arguments to the cd +builtin (see the description of the cdspell option to the shopt builtin in The Shopt Builtin). +The cdspell option is only effective in interactive shells.
  • The shell will check the value of the TMOUT variable and exit if a command is not read within the specified number of seconds after @@ -8071,7 +8142,10 @@ printing $PS1 (see Bash Variables).

  • -
    +
    +
    +
    + @@ -8079,7 +8153,10 @@ Next: ,

    Conditional expressions are used by the [[ compound command -and the test and [ builtin commands. The test +(see Conditional Constructs) +and the test and [ builtin commands +(see Bourne Shell Builtins). +The test and [ commands determine their behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. @@ -8107,130 +8184,130 @@ The test command uses ASCII ordering. links and operate on the target of the link, rather than the link itself.

    -
    -a file
    +
    -a file

    True if file exists.

    -
    -b file
    +
    -b file

    True if file exists and is a block special file.

    -
    -c file
    +
    -c file

    True if file exists and is a character special file.

    -
    -d file
    +
    -d file

    True if file exists and is a directory.

    -
    -e file
    +
    -e file

    True if file exists.

    -
    -f file
    +
    -f file

    True if file exists and is a regular file.

    -
    -g file
    +
    -g file

    True if file exists and its set-group-id bit is set.

    -
    -h file
    +
    -h file

    True if file exists and is a symbolic link.

    -
    -k file
    +
    -k file

    True if file exists and its "sticky" bit is set.

    -
    -p file
    +
    -p file

    True if file exists and is a named pipe (FIFO).

    -
    -r file
    +
    -r file

    True if file exists and is readable.

    -
    -s file
    +
    -s file

    True if file exists and has a size greater than zero.

    -
    -t fd
    +
    -t fd

    True if file descriptor fd is open and refers to a terminal.

    -
    -u file
    +
    -u file

    True if file exists and its set-user-id bit is set.

    -
    -w file
    +
    -w file

    True if file exists and is writable.

    -
    -x file
    +
    -x file

    True if file exists and is executable.

    -
    -G file
    +
    -G file

    True if file exists and is owned by the effective group id.

    -
    -L file
    +
    -L file

    True if file exists and is a symbolic link.

    -
    -N file
    +
    -N file

    True if file exists and has been modified since it was last read.

    -
    -O file
    +
    -O file

    True if file exists and is owned by the effective user id.

    -
    -S file
    +
    -S file

    True if file exists and is a socket.

    -
    file1 -ef file2
    +
    file1 -ef file2

    True if file1 and file2 refer to the same device and inode numbers.

    -
    file1 -nt file2
    +
    file1 -nt file2

    True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.

    -
    file1 -ot file2
    +
    file1 -ot file2

    True if file1 is older than file2, or if file2 exists and file1 does not.

    -
    -o optname
    +
    -o optname

    True if the shell option optname is enabled. The list of options appears in the description of the -o option to the set builtin (see The Set Builtin).

    -
    -v varname
    +
    -v varname

    True if the shell variable varname is set (has been assigned a value).

    -
    -R varname
    +
    -R varname

    True if the shell variable varname is set and is a name reference.

    -
    -z string
    +
    -z string

    True if the length of string is zero.

    -
    -n string
    -
    string
    +
    -n string
    +
    string

    True if the length of string is non-zero.

    -
    string1 == string2
    -
    string1 = string2
    +
    string1 == string2
    +
    string1 = string2

    True if the strings are equal. When used with the [[ command, this performs pattern matching as described above (see Conditional Constructs). @@ -8238,19 +8315,19 @@ described above (see Conditional Constructs=’ should be used with the test command for POSIX conformance.

    -
    string1 != string2
    +
    string1 != string2

    True if the strings are not equal.

    -
    string1 < string2
    +
    string1 < string2

    True if string1 sorts before string2 lexicographically.

    -
    string1 > string2
    +
    string1 > string2

    True if string1 sorts after string2 lexicographically.

    -
    arg1 OP arg2
    +
    arg1 OP arg2

    OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if arg1 @@ -8264,7 +8341,9 @@ are evaluated as arithmetic expressions (see Shell A


    -
    +
    +
    + @@ -8288,75 +8367,75 @@ equal-precedence operators. The levels are listed in order of decreasing precedence.

    -
    id++ id--
    +
    id++ id--

    variable post-increment and post-decrement

    -
    ++id --id
    +
    ++id --id

    variable pre-increment and pre-decrement

    -
    - +
    +
    - +

    unary minus and plus

    -
    ! ~
    +
    ! ~

    logical and bitwise negation

    -
    **
    +
    **

    exponentiation

    -
    * / %
    +
    * / %

    multiplication, division, remainder

    -
    + -
    +
    + -

    addition, subtraction

    -
    << >>
    +
    << >>

    left and right bitwise shifts

    -
    <= >= < >
    +
    <= >= < >

    comparison

    -
    == !=
    +
    == !=

    equality and inequality

    -
    &
    +
    &

    bitwise AND

    -
    ^
    +
    ^

    bitwise exclusive OR

    -
    |
    +
    |

    bitwise OR

    -
    &&
    +
    &&

    logical AND

    -
    ||
    +
    ||

    logical OR

    -
    expr ? expr : expr
    +
    expr ? expr : expr

    conditional operator

    -
    = *= /= %= += -= <<= >>= &= ^= |=
    +
    = *= /= %= += -= <<= >>= &= ^= |=

    assignment

    -
    expr1 , expr2
    +
    expr1 , expr2

    comma

    @@ -8369,9 +8448,9 @@ 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 -integer attribute using ‘declare -i’ is assigned a value. +integer attribute using ‘declare -i’ is assigned a value. A null value evaluates to 0. -A shell variable need not have its integer attribute turned on +A shell variable need not have its integer attribute turned on to be used in an expression.

    Integer constants follow the C language definition, without suffixes or @@ -8395,14 +8474,16 @@ parentheses are evaluated first and may override the precedence rules above.


    -
    +
    +
    +

    Next: , Previous: , Up: Bash Features   [Contents][Index]

    6.6 Aliases

    -

    Aliases allow a string to be substituted for a word when it is used +

    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 alias and unalias builtin commands. @@ -8422,7 +8503,7 @@ This means that one may alias ls to "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 -blank, then the next command word following the +blank, then the next command word following the alias is also checked for alias expansion.

    Aliases are created and listed with the alias @@ -8430,7 +8511,7 @@ command, and removed with the unalias command.

    There is no mechanism for using arguments in the replacement text, as in csh. -If arguments are needed, a shell function should be used +If arguments are needed, use a shell function (see Shell Functions).

    Aliases are not expanded when the shell is not interactive, @@ -8460,7 +8541,9 @@ in compound commands.

    For almost every purpose, shell functions are preferred over aliases.


    -
    +
    +
    + @@ -8593,8 +8676,14 @@ destroys the array element at index subscript. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. unset name, where name is an array, removes the -entire array. A subscript of ‘*’ or ‘@’ also removes the entire array. +unset name[subscript] behaves differently +depending on the array type when given a +subscript of ‘*’ or ‘@’. +When name is an associative array, it removes the element with key +‘*’ or ‘@’. +If name is an indexed array, unset removes all of the elements, +but does not remove the array itself.

    When using a variable name with a subscript as an argument to a command, such as with unset, without using the word expansion syntax @@ -8613,18 +8702,15 @@ builtins display array values in a way that allows them to be reused as input.


    -
    +
    +
    +

    6.8 The Directory Stack

    - - -

    The directory stack is a list of recently-visited directories. The pushd builtin adds directories to the stack as it changes @@ -8637,17 +8723,20 @@ of the directory stack.

    The contents of the directory stack are also visible as the value of the DIRSTACK shell variable.

    +
    -
    +
    +

    6.8.1 Directory Stack Builtins

    -
    dirs
    -
    -
    +
    dirs
    +
    dirs [-clpv] [+N | -N]
     
    @@ -8657,27 +8746,27 @@ are added to the list with the pushd command; the The current directory is always the first directory in the stack.

    -
    -c
    +
    -c

    Clears the directory stack by deleting all of the elements.

    -
    -l
    +
    -l

    Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory.

    -
    -p
    +
    -p

    Causes dirs to print the directory stack with one entry per line.

    -
    -v
    +
    -v

    Causes dirs to print the directory stack with one entry per line, prefixing each entry with its index in the stack.

    -
    +N
    +
    +N

    Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.

    -
    -N
    +
    -N

    Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. @@ -8685,80 +8774,116 @@ with zero.

    -
    popd
    -
    -
    +
    popd
    +
    popd [-n] [+N | -N]
     
    -

    When no arguments are given, popd -removes the top directory from the stack and -performs a cd to the new top directory. +

    Removes elements from the directory stack. The elements are numbered from 0 starting at the first directory -listed with dirs; that is, popd is equivalent to popd +0. +listed by dirs; +that is, popd is equivalent to popd +0. +

    +

    When no arguments are given, popd +removes the top directory from the stack and changes to +the new top directory. +

    +

    Arguments, if supplied, have the following meanings:

    -
    -n
    +
    -n

    Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.

    -
    +N
    +
    +N

    Removes the Nth directory (counting from the left of the -list printed by dirs), starting with zero. +list printed by dirs), starting with zero, from the stack.

    -
    -N
    +
    -N

    Removes the Nth directory (counting from the right of the -list printed by dirs), starting with zero. +list printed by dirs), starting with zero, from the stack.

    +

    If the top element of the directory stack is modified, and +the -n option was not supplied, popd uses the cd +builtin to change to the directory at the top of the stack. +If the cd fails, popd returns a non-zero value. +

    +

    Otherwise, popd returns an unsuccessful status if +an invalid option is encountered, the directory stack +is empty, or a non-existent directory stack entry is specified. +

    +

    If the popd command is successful, +Bash runs dirs to show the final contents of the directory stack, +and the return status is 0. +

    -
    pushd
    +
    pushd
    pushd [-n] [+N | -N | dir]
     
    -

    Save the current directory on the top of the directory stack -and then cd to dir. -With no arguments, pushd exchanges the top two directories -and makes the new top the current directory. +

    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, pushd exchanges the top two elements +of the directory stack. +

    +

    Arguments, if supplied, have the following meanings:

    -
    -n
    +
    -n

    Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated.

    -
    +N
    +
    +N

    Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.

    -
    -N
    +
    -N

    Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.

    -
    dir
    -

    Makes dir be the top of the stack, making -it the new current directory as if it had been supplied as an argument -to the cd builtin. +

    dir
    +

    Makes dir be the top of the stack.

    + +

    After the stack has been modified, if the -n option was not +supplied, pushd uses the cd builtin to change to the +directory at the top of the stack. +If the cd fails, pushd returns a non-zero value. +

    +

    Otherwise, if no arguments are supplied, pushd returns 0 unless the +directory stack is empty. +When rotating the directory stack, pushd returns 0 unless +the directory stack is empty or a non-existent directory stack element +is specified. +

    +

    If the pushd command is successful, +Bash runs dirs to show the final contents of the directory stack. +


    -
    +
    +
    +
    +

    6.9 Controlling the Prompt

    -

    Bash examines the value of the array variable PROMPT_COMMANDS just before +

    Bash examines the value of the array variable PROMPT_COMMAND just before printing each primary prompt. -If any elements in PROMPT_COMMANDS are set and non-null, Bash +If any elements in PROMPT_COMMAND are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line.

    @@ -8767,90 +8892,91 @@ can appear in the prompt variables PS0, PS1, PS2 PS4:

    -
    \a
    +
    \a

    A bell character.

    -
    \d
    +
    \d

    The date, in "Weekday Month Date" format (e.g., "Tue May 26").

    -
    \D{format}
    +
    \D{format}

    The format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required.

    -
    \e
    +
    \e

    An escape character.

    -
    \h
    +
    \h

    The hostname, up to the first ‘.’.

    -
    \H
    +
    \H

    The hostname.

    -
    \j
    +
    \j

    The number of jobs currently managed by the shell.

    -
    \l
    +
    \l

    The basename of the shell’s terminal device name.

    -
    \n
    +
    \n

    A newline.

    -
    \r
    +
    \r

    A carriage return.

    -
    \s
    +
    \s

    The name of the shell, the basename of $0 (the portion following the final slash).

    -
    \t
    +
    \t

    The time, in 24-hour HH:MM:SS format.

    -
    \T
    +
    \T

    The time, in 12-hour HH:MM:SS format.

    -
    \@
    +
    \@

    The time, in 12-hour am/pm format.

    -
    \A
    +
    \A

    The time, in 24-hour HH:MM format.

    -
    \u
    +
    \u

    The username of the current user.

    -
    \v
    +
    \v

    The version of Bash (e.g., 2.00)

    -
    \V
    +
    \V

    The release of Bash, version + patchlevel (e.g., 2.00.0)

    -
    \w
    -

    The current working directory, with $HOME abbreviated with a tilde +

    \w
    +

    The value of the PWD shell variable ($PWD), +with $HOME abbreviated with a tilde (uses the $PROMPT_DIRTRIM variable).

    -
    \W
    +
    \W

    The basename of $PWD, with $HOME abbreviated with a tilde.

    -
    \!
    +
    \!

    The history number of this command.

    -
    \#
    +
    \#

    The command number of this command.

    -
    \$
    +
    \$

    If the effective uid is 0, #, otherwise $.

    -
    \nnn
    +
    \nnn

    The character whose ASCII code is the octal value nnn.

    -
    \\
    +
    \\

    A backslash.

    -
    \[
    +
    \[

    Begin a sequence of non-printing characters. This could be used to embed a terminal control sequence into the prompt.

    -
    \]
    +
    \]

    End a sequence of non-printing characters.

    @@ -8871,7 +8997,9 @@ appear within command substitution or contain characters special to word expansion.


    -
    +
    +
    + @@ -8909,7 +9037,7 @@ option to the hash builtin command. -f and -d options to the enable builtin.
  • Using the enable builtin command to enable disabled shell builtins.
  • Specifying the -p option to the command builtin. -
  • Turning off restricted mode with ‘set +r’ or ‘set +o restricted’. +
  • Turning off restricted mode with ‘set +r’ or ‘shopt -u restricted_shell’.
  • These restrictions are enforced after any startup files are read. @@ -8921,8 +9049,8 @@ the shell spawned to execute the script.

    The restricted shell mode is only one component of a useful restricted environment. It should be accompanied by setting PATH to a value that allows execution of only a few verified commands (commands that -allow shell escapes are particularly vulnerable), leaving the user -in a non-writable directory other than his home directory after login, +allow shell escapes are particularly vulnerable), changing the current +directory to a non-writable directory other than $HOME after login, not allowing the restricted shell to execute shell scripts, and cleaning the environment of variables that cause some commands to modify their behavior (e.g., VISUAL or PAGER). @@ -8932,7 +9060,9 @@ such as jails, zones, or containers.


    -
    +
    +
    + @@ -9042,7 +9172,10 @@ a value to a readonly variable.
  • A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special -builtin, but not with any other simple command. +builtin, but not with any other simple command. For any other simple +command, the shell aborts execution of that command, and execution continues +at the top level ("the shell shall not perform any further processing of the +command in which the error occurred").
  • A non-interactive shell exits with an error status if the iteration variable in a for statement or the selection variable in a @@ -9127,15 +9260,15 @@ shell function names and definitions. variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. -
  • When the cd builtin is invoked in logical mode, and the pathname +
  • When the cd builtin is invoked in logical mode, and the pathname constructed from $PWD and the directory name supplied as an argument does not refer to an existing directory, cd will fail instead of -falling back to physical mode. +falling back to physical mode.
  • When the cd builtin cannot change a directory because the length of the pathname constructed from $PWD and the directory name supplied as an argument -exceeds PATH_MAX when all symbolic links are expanded, cd will +exceeds PATH_MAX when all symbolic links are expanded, cd will fail instead of attempting to use only the supplied directory name.
  • The pwd builtin verifies that the value it prints is the same as the @@ -9195,7 +9328,9 @@ the --enable-strict-posix-default to configure when bu (see Optional Features).


    -
    +
    +
    + @@ -9260,14 +9395,14 @@ For bash-4.3 and later versions, the BASH_COMPAT variable is prefer and it is required for bash-5.1 and later versions.

    -
    compat31
    +
    compat31
    • quoting the rhs of the [[ command’s regexp matching operator (=~) has no special effect
    -
    compat32
    +
    compat32
    • interrupting a command list such as "a ; b ; c" causes the execution of the next command in the list (in bash-4.0 and later versions, @@ -9277,7 +9412,7 @@ entire list)
    -
    compat40
    +
    compat40
    • the ‘<’ and ‘>’ operators to the [[ command do not consider the current locale when comparing strings; they use ASCII @@ -9288,7 +9423,7 @@ strcoll(3).
    -
    compat41
    +
    compat41
    • in posix mode, time may be followed by options and still be recognized as a reserved word (this is POSIX interpretation 267) @@ -9300,7 +9435,7 @@ the single quotes are considered quoted
    -
    compat42
    +
    compat42
    • the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2 @@ -9313,7 +9448,7 @@ are not special within double-quoted word expansions
    -
    compat43
    +
    compat43
    • the shell does not print a warning message if an attempt is made to use a quoted compound assignment as an argument to declare @@ -9330,7 +9465,7 @@ the loop state to prevent this
    -
    compat44
    +
    compat44
    • the shell sets up the values used by BASH_ARGV and BASH_ARGC so they can expand to the shell’s positional parameters even if extended @@ -9345,7 +9480,7 @@ mode
    -
    compat50 (set using BASH_COMPAT)
    +
    compat50 (set using BASH_COMPAT)
    • Bash-5.1 changed the way $RANDOM is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or @@ -9357,32 +9492,58 @@ printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 suppresses that message when the -l option is supplied.
    + +
    +
    compat51 (set using BASH_COMPAT)
    +
      +
    • The unset builtin will unset the array a given an argument like +‘a[@]’. +Bash-5.2 will unset an element with key ‘@’ (associative arrays) +or remove all the elements without unsetting the array (indexed arrays) +
    • arithmetic commands ( ((...)) ) and the expressions in an arithmetic for +statement can be expanded more than once +
    • expressions used as arguments to arithmetic operators in the [[ +conditional command can be expanded more than once +
    • the expressions in substring parameter brace expansion can be +expanded more than once +
    • the expressions in the $(( ... )) word expansion can be expanded +more than once +
    • arithmetic expressions used as indexed array subscripts can be +expanded more than once +
    • test -v, when given an argument of ‘A[@]’, where A is +an existing associative array, will return true if the array has any set +elements. +Bash-5.2 will look for and report on a key named ‘@’ +
    • the ${parameter[:]=value} word expansion will return +value, before any variable-specific transformations have been +performed (e.g., converting to lowercase). +Bash-5.2 will return the final value assigned to the variable. +

    -
    +
    +
    +
    +

    7 Job Control

    This chapter discusses what job control is, how it works, and how Bash allows you to access its facilities.

    - - - - - +
    -
    +
    + @@ -9431,9 +9592,9 @@ 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 -suspend character (typically ‘^Z’, Control-Z) while a +suspend character (typically ‘^Z’, Control-Z) while a process is running causes that process to be stopped and returns -control to Bash. Typing the delayed suspend character +control to Bash. Typing the delayed suspend character (typically ‘^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 @@ -9444,7 +9605,7 @@ 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 ‘%’ introduces a job specification (jobspec). +character ‘%’ introduces a job specification (jobspec).

    Job number n may be referred to as ‘%n’. The symbols ‘%%’ and ‘%+’ refer to the shell’s notion of the @@ -9496,16 +9657,17 @@ job changes state. The -f option causes wait to wait until the job or process terminates before returning.


    -
    +
    +
    +

    7.2 Job Control Builtins

    -
    bg
    -
    -
    +
    bg
    +
    bg [jobspec …]
     
    @@ -9518,9 +9680,8 @@ enabled, or, when run with job control enabled, any that was started without job control.

    -
    fg
    -
    -
    +
    fg
    +
    fg [jobspec]
     
    @@ -9532,9 +9693,8 @@ job control enabled, jobspec does not specify a valid job or jobspec specifies a job that was started without job control.

    -
    jobs
    -
    -
    +
    jobs
    +
    jobs [-lnprs] [jobspec]
     jobs -x command [arguments]
     
    @@ -9543,24 +9703,24 @@ jobs -x command [arguments] following meanings:

    -
    -l
    +
    -l

    List process IDs in addition to the normal information.

    -
    -n
    +
    -n

    Display information only about jobs that have changed status since the user was last notified of their status.

    -
    -p
    +
    -p

    List only the process ID of the job’s process group leader.

    -
    -r
    +
    -r

    Display only running jobs.

    -
    -s
    +
    -s

    Display only stopped jobs.

    @@ -9576,9 +9736,8 @@ corresponding process group ID, and executes command, passing it arguments, returning its exit status.

    -
    kill
    -
    -
    +
    kill
    +
    kill [-s sigspec] [-n signum] [-sigspec] jobspec or pid
     kill -l|-L [exit_status]
     
    @@ -9600,9 +9759,8 @@ 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.

    -
    wait
    -
    -
    +
    wait
    +
    wait [-fn] [-p varname] [jobspec or pid …]
     
    @@ -9616,7 +9774,7 @@ the last-executed process substitution, if its process id is the same as $!, and the return status is zero. If the -n option is supplied, wait waits for a single job -from the list of pids or jobspecs or, if no arguments are +from the list of pids or jobspecs or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments @@ -9635,9 +9793,8 @@ If neither jobspec nor pid specifies an active child proce of the shell, the return status is 127.

    -
    disown
    -
    -
    +
    disown
    +
    disown [-ar] [-h] [jobspec … | pid … ]
     
    @@ -9653,9 +9810,8 @@ mark all jobs; the -r option without a jobspec argument restricts operation to running jobs.

    -
    suspend
    -
    -
    +
    suspend
    +
    suspend [-f]
     
    @@ -9671,16 +9827,16 @@ builtins do not accept jobspec arguments. They must be supplied process IDs.


    -
    +
    +
    +

    7.3 Job Control Variables

    -
    auto_resume - -
    +
    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 @@ -9707,9 +9863,12 @@ analogous to the ‘%’ job ID.


    -
    +
    +
    +
    +

    8 Command Line Editing

    @@ -9720,7 +9879,7 @@ used by several different programs, including Bash. Command line editing is enabled by default when using an interactive shell, unless the --noediting option is supplied at shell invocation. Line editing is also used when using the -e option to the -read builtin command (see Bash Builtins). +read builtin command (see Bash Builtin Commands). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the -o emacs or @@ -9728,32 +9887,20 @@ Line editing can be enabled at any time using the -o emacs or (see The Set Builtin), or disabled using the +o emacs or +o vi options to set.

    - - - - - - - - - - +
    -
    +
    + @@ -9795,9 +9942,11 @@ The RET key may be labeled Return or < some keyboards.


    -
    +
    +
    +

    8.2 Readline Interaction

    @@ -9813,21 +9962,17 @@ the line, you simply press RET. You do not have to be at t end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    - - - - - - - +
    -
    +
    + @@ -9855,22 +10000,22 @@ blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    -
    C-b
    +
    C-b

    Move back one character.

    -
    C-f
    +
    C-f

    Move forward one character.

    -
    DEL or Backspace
    +
    DEL or Backspace

    Delete the character to the left of the cursor.

    -
    C-d
    +
    C-d

    Delete the character underneath the cursor.

    -
    Printing characters
    +
    Printing characters

    Insert the character into the line at the cursor.

    -
    C-_ or C-x C-u
    +
    C-_ or C-x C-u

    Undo the last editing command. You can undo all the way back to an empty line.

    @@ -9882,7 +10027,9 @@ to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    -
    +
    +
    + @@ -9896,19 +10043,19 @@ other commands have been added in addition to C-b, C-f, about the line.

    -
    C-a
    +
    C-a

    Move to the start of the line.

    -
    C-e
    +
    C-e

    Move to the end of the line.

    -
    M-f
    +
    M-f

    Move forward a word, where a word is composed of letters and digits.

    -
    M-b
    +
    M-b

    Move backward a word.

    -
    C-l
    +
    C-l

    Clear the screen, reprinting the current line at the top.

    @@ -9918,7 +10065,9 @@ forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    -
    +
    +
    + @@ -9947,23 +10096,23 @@ another line.

    Here is the list of commands for killing text.

    -
    C-k
    +
    C-k

    Kill the text from the current cursor position to the end of the line.

    -
    M-d
    +
    M-d

    Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by M-f.

    -
    M-DEL
    +
    M-DEL

    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    -
    C-w
    +
    C-w

    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    @@ -9974,20 +10123,22 @@ Word boundaries are the same as those used by M-b. means to copy the most-recently-killed text from the kill buffer.

    -
    C-y
    +
    C-y

    Yank the most recently killed text back into the buffer at the cursor.

    -
    M-y
    +
    M-y

    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    -
    +
    +
    +

    8.2.4 Readline Arguments

    @@ -10007,7 +10158,9 @@ the C-d command an argument of 10, you could type ‘M-1 0 which will delete the next ten characters on the input line.


    -
    +
    +
    + @@ -10054,7 +10207,10 @@ 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.


    -
    +
    +
    +
    + @@ -10065,7 +10221,8 @@ Next: Bash Builtins. +See Bash Builtin Commands.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. @@ -10081,21 +10238,15 @@ init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    - - - - - +
    -
    +
    + @@ -10109,7 +10260,7 @@ constructs (see Conditional Init Construc denote variable settings and key bindings.

    -
    Variable Settings
    +
    Variable Settings

    You can modify the run-time behavior of Readline by altering the values of variables in Readline using the set command within the init file. @@ -10135,64 +10286,60 @@ the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    The bind -V command lists the current Readline variable names -and values. See Bash Builtins. +and values. See Bash Builtin Commands.

    A great deal of run-time behavior is changeable with the following variables.

    -
    bell-style
    -
    -

    Controls what happens when Readline wants to ring the terminal bell. +

    bell-style
    +

    Controls what happens when Readline wants to ring the terminal bell. If set to ‘none’, Readline never rings the bell. If set to ‘visible’, Readline uses a visible bell if one is available. If set to ‘audible’ (the default), Readline attempts to ring the terminal’s bell.

    -
    bind-tty-special-chars
    -
    -

    If set to ‘on’ (the default), Readline attempts to bind the control +

    bind-tty-special-chars
    +

    If set to ‘on’ (the default), Readline attempts to bind the control characters treated specially by the kernel’s terminal driver to their Readline equivalents.

    -
    blink-matching-paren
    -
    -

    If set to ‘on’, Readline attempts to briefly move the cursor to an +

    +

    If set to ‘on’, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is ‘off’.

    -
    colored-completion-prefix
    -
    -

    If set to ‘on’, when listing completions, Readline displays the +

    colored-completion-prefix
    +

    If set to ‘on’, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. +If there is a color definition in LS_COLORS for the custom suffix +‘readline-colored-completion-prefix’, Readline uses this color for +the common prefix instead of its default. The default is ‘off’.

    -
    colored-stats
    -
    -

    If set to ‘on’, Readline displays possible completions using different +

    colored-stats
    +

    If set to ‘on’, Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is ‘off’.

    -
    comment-begin
    -
    -

    The string to insert at the beginning of the line when the +

    comment-begin
    +

    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    -
    completion-display-width
    -
    -

    The number of screen columns used to display possible matches +

    completion-display-width
    +

    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. @@ -10200,44 +10347,40 @@ A value of 0 will cause matches to be displayed one per line. The default value is -1.

    -
    completion-ignore-case
    -
    -

    If set to ‘on’, Readline performs filename matching and completion +

    completion-ignore-case
    +

    If set to ‘on’, Readline performs filename matching and completion in a case-insensitive fashion. The default value is ‘off’.

    -
    completion-map-case
    -
    -

    If set to ‘on’, and completion-ignore-case is enabled, Readline +

    completion-map-case
    +

    If set to ‘on’, and completion-ignore-case is enabled, Readline treats hyphens (‘-’) and underscores (‘_’) as equivalent when performing case-insensitive filename matching and completion. The default value is ‘off’.

    -
    completion-prefix-display-length
    -
    -

    The length in characters of the common prefix of a list of possible +

    completion-prefix-display-length
    +

    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    -
    completion-query-items
    -
    -

    The number of possible completions that determines when the user is +

    completion-query-items
    +

    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than or equal to this value, Readline will ask whether or not the user wishes to view them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -A negative value means Readline should never ask. +This variable must be set to an integer value greater than or equal to zero. +A zero value means Readline should never ask; negative values are +treated as zero. The default limit is 100.

    -
    convert-meta
    -
    -

    If set to ‘on’, Readline will convert characters with the +

    convert-meta
    +

    If set to ‘on’, Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an ESC character, converting them to a meta-prefixed key sequence. The default value is ‘on’, but @@ -10245,31 +10388,27 @@ will be set to ‘off’ if the locale is one that contains eight-bit characters.

    -
    disable-completion
    -
    -

    If set to ‘On’, Readline will inhibit word completion. +

    disable-completion
    +

    If set to ‘On’, Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to self-insert. The default is ‘off’.

    -
    echo-control-characters
    -
    -

    When set to ‘on’, on operating systems that indicate they support it, +

    echo-control-characters
    +

    When set to ‘on’, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is ‘on’.

    -
    editing-mode
    -
    -

    The editing-mode variable controls which default set of +

    editing-mode
    +

    The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either ‘emacs’ or ‘vi’.

    -
    emacs-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    emacs-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and @@ -10280,46 +10419,54 @@ sequence into the mode string. The default is ‘@’.

    -
    enable-bracketed-paste
    -
    -

    When set to ‘On’, Readline will configure the terminal in a way +

    enable-active-region
    +

    The point is the current cursor position, and mark refers +to a saved cursor position (see Commands For Moving). +The text between the point and mark is referred to as the region. +When this variable is set to ‘On’, Readline allows certain commands +to designate the region as active. +When the region is active, Readline highlights the text in the region using +the terminal’s standout mode. +The active region shows the text inserted by bracketed-paste and any +matching text found by incremental and non-incremental history searches. +The default is ‘On’. +

    +
    +
    enable-bracketed-paste
    +

    When set to ‘On’, Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is ‘On’.

    -
    enable-keypad
    -
    -

    When set to ‘on’, Readline will try to enable the application +

    enable-keypad
    +

    When set to ‘on’, Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is ‘off’.

    -
    enable-meta-key
    +
    enable-meta-key

    When set to ‘on’, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is ‘on’.

    -
    expand-tilde
    -
    -

    If set to ‘on’, tilde expansion is performed when Readline +

    expand-tilde
    +

    If set to ‘on’, tilde expansion is performed when Readline attempts word completion. The default is ‘off’.

    -
    history-preserve-point
    -
    -

    If set to ‘on’, the history code attempts to place the point (the +

    history-preserve-point
    +

    If set to ‘on’, the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is ‘off’.

    -
    history-size
    -
    -

    Set the maximum number of history entries saved in the history list. +

    history-size
    +

    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not @@ -10329,9 +10476,8 @@ If an attempt is made to set history-size to a non-numeric value, the maximum number of history entries will be set to 500.

    -
    horizontal-scroll-mode
    -
    -

    This variable can be set to either ‘on’ or ‘off’. Setting it +

    horizontal-scroll-mode
    +

    This variable can be set to either ‘on’ or ‘off’. Setting it to ‘on’ means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. @@ -10339,9 +10485,8 @@ This variable is automatically set to ‘on’ for terminal By default, this variable is set to ‘off’.

    -
    input-meta
    -
    - +
    input-meta
    +

    If set to ‘on’, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The @@ -10350,17 +10495,15 @@ locale contains eight-bit characters. The name meta-flag is a synonym for this variable.

    -
    isearch-terminators
    -
    -

    The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see Searching). +

    isearch-terminators
    +

    The string of characters that should terminate an incremental search without +subsequently executing the character as a command (see Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    -
    keymap
    -
    -

    Sets Readline’s idea of the current keymap for key binding commands. +

    keymap
    +

    Sets Readline’s idea of the current keymap for key binding commands. Built-in keymap names are emacs, emacs-standard, @@ -10378,7 +10521,7 @@ The value of the editing-mode variable also affects the default keymap.

    -
    keyseq-timeout
    +
    keyseq-timeout

    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer @@ -10395,29 +10538,26 @@ decide which key sequence to complete. The default value is 500.

    -
    mark-directories
    +
    mark-directories

    If set to ‘on’, completed directory names have a slash appended. The default is ‘on’.

    -
    mark-modified-lines
    -
    -

    This variable, when set to ‘on’, causes Readline to display an +

    mark-modified-lines
    +

    This variable, when set to ‘on’, causes Readline to display an asterisk (‘*’) at the start of history lines which have been modified. This variable is ‘off’ by default.

    -
    mark-symlinked-directories
    -
    -

    If set to ‘on’, completed names which are symbolic links +

    mark-symlinked-directories
    +

    If set to ‘on’, completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is ‘off’.

    -
    match-hidden-files
    -
    -

    This variable, when set to ‘on’, causes Readline to match files whose +

    match-hidden-files
    +

    This variable, when set to ‘on’, causes Readline to match files whose names begin with a ‘.’ (hidden files) when performing filename completion. If set to ‘off’, the leading ‘.’ must be @@ -10425,55 +10565,49 @@ supplied by the user in the filename to be completed. This variable is ‘on’ by default.

    -
    menu-complete-display-prefix
    -
    -

    If set to ‘on’, menu completion displays the common prefix of the +

    menu-complete-display-prefix
    +

    If set to ‘on’, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is ‘off’.

    -
    output-meta
    -
    -

    If set to ‘on’, Readline will display characters with the +

    output-meta
    +

    If set to ‘on’, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is ‘off’, but Readline will set it to ‘on’ if the locale contains eight-bit characters.

    -
    page-completions
    -
    -

    If set to ‘on’, Readline uses an internal more-like pager +

    page-completions
    +

    If set to ‘on’, Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is ‘on’ by default.

    -
    print-completions-horizontally
    +
    print-completions-horizontally

    If set to ‘on’, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is ‘off’.

    -
    revert-all-at-newline
    -
    -

    If set to ‘on’, Readline will undo all changes to history lines +

    revert-all-at-newline
    +

    If set to ‘on’, Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. The default is ‘off’.

    -
    show-all-if-ambiguous
    -
    -

    This alters the default behavior of the completion functions. If +

    show-all-if-ambiguous
    +

    This alters the default behavior of the completion functions. If set to ‘on’, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is ‘off’.

    -
    show-all-if-unmodified
    -
    -

    This alters the default behavior of the completion functions in +

    show-all-if-unmodified
    +

    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to ‘on’, words which have more than one possible completion without any @@ -10483,17 +10617,15 @@ of ringing the bell. The default value is ‘off’.

    -
    show-mode-in-prompt
    -
    -

    If set to ‘on’, add a string to the beginning of the prompt +

    show-mode-in-prompt
    +

    If set to ‘on’, add a string to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., emacs-mode-string). The default value is ‘off’.

    -
    skip-completed-text
    -
    -

    If set to ‘on’, this alters the default completion behavior when +

    skip-completed-text
    +

    If set to ‘on’, this alters the default completion behavior when inserting a single match into the line. It’s only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters @@ -10506,9 +10638,8 @@ completion. The default value is ‘off’.

    -
    vi-cmd-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    vi-cmd-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a @@ -10520,9 +10651,8 @@ sequence into the mode string. The default is ‘(cmd)’.

    -
    vi-ins-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    vi-ins-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a @@ -10534,9 +10664,8 @@ sequence into the mode string. The default is ‘(ins)’.

    -
    visible-stats
    -
    -

    If set to ‘on’, a character denoting a file’s type +

    visible-stats
    +

    If set to ‘on’, a character denoting a file’s type is appended to the filename when listing possible completions. The default is ‘off’.

    @@ -10544,7 +10673,7 @@ completions. The default is ‘off’.
    -
    Key Bindings
    +
    Key Bindings

    The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command @@ -10565,10 +10694,10 @@ to a string that is inserted when the key is pressed (a macro).

    The bind -p command displays Readline function names and bindings in a format that can put directly into an initialization file. -See Bash Builtins. +See Bash Builtin Commands.

    -
    keynamefunction-name or macro
    +
    keynamefunction-name or macro

    keyname is the name of a key spelled out in English. For example:

    Control-u: universal-argument
    @@ -10599,7 +10728,7 @@ and
     TAB.
     

    -
    "keyseq": function-name or macro
    +
    "keyseq": function-name or macro

    keyseq differs from keyname above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key @@ -10625,22 +10754,22 @@ the text ‘Function Key 1’. specifying key sequences:

    -
    \C-
    +
    \C-

    control prefix

    -
    \M-
    +
    \M-

    meta prefix

    -
    \e
    +
    \e

    an escape character

    -
    \\
    +
    \\

    backslash

    -
    \"
    +
    \"

    ", a double quotation mark

    -
    \'
    +
    \'

    ', a single quote or apostrophe

    @@ -10649,35 +10778,35 @@ specifying key sequences: set of backslash escapes is available:

    -
    \a
    +
    \a

    alert (bell)

    -
    \b
    +
    \b

    backspace

    -
    \d
    +
    \d

    delete

    -
    \f
    +
    \f

    form feed

    -
    \n
    +
    \n

    newline

    -
    \r
    +
    \r

    carriage return

    -
    \t
    +
    \t

    horizontal tab

    -
    \v
    +
    \v

    vertical tab

    -
    \nnn
    +
    \nnn

    the eight-bit character whose value is the octal value nnn (one to three digits)

    -
    \xHH
    +
    \xHH

    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    @@ -10699,7 +10828,9 @@ insert a single ‘\’ into the line:

    -
    +
    +
    + @@ -10711,7 +10842,7 @@ bindings and variable settings to be performed as the result of tests. There are four parser directives used.

    -
    $if
    +
    $if

    The $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, after any comparison operator, @@ -10719,7 +10850,7 @@ extends to the end of the line; unless otherwise noted, no characters are required to isolate it.

    -
    mode
    +
    mode

    The mode= form of the $if directive is used to test whether Readline is in emacs or vi mode. This may be used in conjunction @@ -10728,7 +10859,7 @@ the emacs-standard and emacs-ctlx keymaps only if Readline is starting out in emacs mode.

    -
    term
    +
    term

    The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal’s function keys. The word on the right side of the @@ -10738,7 +10869,7 @@ allows sun to match both sun and sun-cmd, for instance.

    -
    version
    +
    version

    The version test may be used to perform comparisons against specific Readline versions. The version expands to the current Readline version. @@ -10760,7 +10891,7 @@ $endif

    -
    application
    +
    application

    The application construct is used to include application-specific settings. Each program using the Readline library sets the application name, and you can test for @@ -10776,7 +10907,7 @@ $endif

    -
    variable
    +
    variable

    The variable construct provides simple equality tests for Readline variables and values. The permitted comparison operators are ‘=’, ‘==’, and ‘!=’. @@ -10796,17 +10927,17 @@ $endif

    -
    $endif
    +
    $endif

    This command, as seen in the previous example, terminates an $if command.

    -
    $else
    +
    $else

    Commands in this branch of the $if directive are executed if the test fails.

    -
    $include
    +
    $include

    This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from /etc/inputrc: @@ -10817,7 +10948,9 @@ For example, the following directive reads from /etc/inputrc:


    -
    +
    +
    + @@ -10929,36 +11062,21 @@ $endif

    -
    +
    +
    +
    +

    8.4 Bindable Readline Commands

    - - - - - - - - - -

    This section describes Readline commands that may be bound to key sequences. You can list your key bindings by executing bind -P or, for a more terse format, suitable for an -inputrc file, bind -p. (See Bash Builtins.) +inputrc file, bind -p. (See Bash Builtin Commands.) Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor @@ -10966,77 +11084,68 @@ position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.

    +
    -
    +
    +

    8.4.1 Commands For Moving

    -
    beginning-of-line (C-a) - -
    +
    beginning-of-line (C-a)

    Move to the start of the current line.

    -
    end-of-line (C-e) - -
    +
    end-of-line (C-e)

    Move to the end of the line.

    -
    forward-char (C-f) - -
    +
    forward-char (C-f)

    Move forward a character.

    -
    backward-char (C-b) - -
    +
    backward-char (C-b)

    Move back a character.

    -
    forward-word (M-f) - -
    +
    forward-word (M-f)

    Move forward to the end of the next word. Words are composed of letters and digits.

    -
    backward-word (M-b) - -
    +
    backward-word (M-b)

    Move back to the start of the current or previous word. Words are composed of letters and digits.

    -
    shell-forward-word (M-C-f) - -
    +
    shell-forward-word (M-C-f)

    Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters.

    -
    shell-backward-word (M-C-b) - -
    +
    shell-backward-word (M-C-b)

    Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters.

    -
    previous-screen-line () - -
    +
    previous-screen-line ()

    Attempt to move point to the same physical screen column on the previous physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if point is not greater than the length of the prompt plus the screen width.

    -
    next-screen-line () - -
    +
    next-screen-line ()

    Attempt to move point to the same physical screen column on the next physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if the length @@ -11044,41 +11153,35 @@ of the current Readline line is not greater than the length of the prompt plus the screen width.

    -
    clear-display (M-C-l) - -
    +
    clear-display (M-C-l)

    Clear the screen and, if possible, the terminal’s scrollback buffer, then redraw the current line, leaving the current line at the top of the screen.

    -
    clear-screen (C-l) - -
    +
    clear-screen (C-l)

    Clear the screen, then redraw the current line, leaving the current line at the top of the screen.

    -
    redraw-current-line () - -
    +
    redraw-current-line ()

    Refresh the current line. By default, this is unbound.


    -
    +
    +
    +

    8.4.2 Commands For Manipulating The History

    -
    accept-line (Newline or Return) - -
    +
    accept-line (Newline or 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 setting of @@ -11087,68 +11190,50 @@ If this line is a modified history line, then restore the history line to its original state.

    -
    previous-history (C-p) - -
    +
    previous-history (C-p)

    Move ‘back’ through the history list, fetching the previous command.

    -
    next-history (C-n) - -
    +
    next-history (C-n)

    Move ‘forward’ through the history list, fetching the next command.

    -
    beginning-of-history (M-<) - -
    +
    beginning-of-history (M-<)

    Move to the first line in the history.

    -
    end-of-history (M->) - -
    +
    end-of-history (M->)

    Move to the end of the input history, i.e., the line currently being entered.

    -
    reverse-search-history (C-r) - -
    +
    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. This command sets the region to the matched text and activates the mark.

    -
    forward-search-history (C-s) - -
    +
    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. This command sets the region to the matched text and activates the mark.

    -
    non-incremental-reverse-search-history (M-p) - -
    +
    non-incremental-reverse-search-history (M-p)

    Search backward starting at the current line and moving ‘up’ through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    -
    non-incremental-forward-search-history (M-n) - -
    +
    non-incremental-forward-search-history (M-n)

    Search forward starting at the current line and moving ‘down’ through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    -
    history-search-forward () - -
    +
    history-search-forward ()

    Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11156,9 +11241,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-search-backward () - -
    +
    history-search-backward ()

    Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11166,9 +11249,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-substring-search-forward () - -
    +
    history-substring-search-forward ()

    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11176,9 +11257,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-substring-search-backward () - -
    +
    history-substring-search-backward ()

    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11186,9 +11265,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    yank-nth-arg (M-C-y) - -
    +
    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 n, @@ -11199,9 +11276,7 @@ Once the argument n is computed, the argument is extracted as if the ‘!n’ history expansion had been specified.

    -
    yank-last-arg (M-. or M-_) - -
    +
    yank-last-arg (M-. or M-_)

    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. @@ -11215,9 +11290,7 @@ The history expansion facilities are used to extract the last argument, as if the ‘!$’ history expansion had been specified.

    -
    operate-and-get-next (C-o) - -
    +
    operate-and-get-next (C-o)

    Accept the current line for return to the calling application as if a newline had been entered, and fetch the next line relative to the current line from the history @@ -11226,65 +11299,59 @@ A numeric argument, if supplied, specifies the history entry to use instead of the current line.

    +
    fetch-history ()
    +

    With a numeric argument, fetch that entry from the history list +and make it the current line. +Without an argument, move back to the first entry in the history list. +

    +

    -
    +
    +
    +

    8.4.3 Commands For Changing Text

    -
    end-of-file (usually C-d) - -
    +
    end-of-file (usually C-d)

    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    -
    delete-char (C-d) - -
    +
    delete-char (C-d)

    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    -
    backward-delete-char (Rubout) - -
    +
    backward-delete-char (Rubout)

    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    -
    forward-backward-delete-char () - -
    +
    forward-backward-delete-char ()

    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    -
    quoted-insert (C-q or C-v) - -
    +
    quoted-insert (C-q or C-v)

    Add the next character typed to the line verbatim. This is how to insert key sequences like C-q, for example.

    -
    self-insert (a, b, A, 1, !, …) - -
    +
    self-insert (a, b, A, 1, !, …)

    Insert yourself.

    -
    bracketed-paste-begin () - -
    +
    bracketed-paste-begin ()

    This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating @@ -11298,9 +11365,7 @@ mark is active, Readline redisplay uses the terminal’s standout mode to denote the region.

    -
    transpose-chars (C-t) - -
    +
    transpose-chars (C-t)

    Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point @@ -11309,39 +11374,29 @@ transposes the last two characters of the line. Negative arguments have no effect.

    -
    transpose-words (M-t) - -
    +
    transpose-words (M-t)

    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    -
    upcase-word (M-u) - -
    +
    upcase-word (M-u)

    Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor.

    -
    downcase-word (M-l) - -
    +
    downcase-word (M-l)

    Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor.

    -
    capitalize-word (M-c) - -
    +
    capitalize-word (M-c)

    Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor.

    -
    overwrite-mode () - -
    +
    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 @@ -11359,75 +11414,59 @@ before point with a space.


    -
    +
    +
    +

    8.4.4 Killing And Yanking

    -
    kill-line (C-k) - -
    +
    kill-line (C-k)

    Kill the text from point to the end of the line. With a negative numeric argument, kill backward from the cursor to the beginning of the current line.

    -
    backward-kill-line (C-x Rubout) - -
    +
    backward-kill-line (C-x Rubout)

    Kill backward from the cursor to the beginning of the current line. With a negative numeric argument, kill forward from the cursor to the end of the current line.

    -
    unix-line-discard (C-u) - -
    +
    unix-line-discard (C-u)

    Kill backward from the cursor to the beginning of the current line.

    -
    kill-whole-line () - -
    +
    kill-whole-line ()

    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    -
    kill-word (M-d) - -
    +
    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 forward-word.

    -
    backward-kill-word (M-DEL) - -
    +
    backward-kill-word (M-DEL)

    Kill the word behind point. Word boundaries are the same as backward-word.

    -
    shell-kill-word (M-C-d) - -
    +
    shell-kill-word (M-C-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 shell-forward-word.

    -
    shell-backward-kill-word () - -
    +
    shell-backward-kill-word ()

    Kill the word behind point. Word boundaries are the same as shell-backward-word.

    -
    shell-transpose-words (M-C-t) - -
    +
    shell-transpose-words (M-C-t)

    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes @@ -11436,88 +11475,68 @@ Word boundaries are the same as shell-forward-word and shell-backward-word.

    -
    unix-word-rubout (C-w) - -
    +
    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.

    -
    unix-filename-rubout () - -
    +
    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-horizontal-space ()

    Delete all spaces and tabs around point. By default, this is unbound.

    -
    kill-region () - -
    +
    kill-region ()

    Kill the text in the current region. By default, this command is unbound.

    -
    copy-region-as-kill () - -
    +
    copy-region-as-kill ()

    Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound.

    -
    copy-backward-word () - -
    +
    copy-backward-word ()

    Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. By default, this command is unbound.

    -
    copy-forward-word () - -
    +
    copy-forward-word ()

    Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. By default, this command is unbound.

    -
    yank (C-y) - -
    +
    yank (C-y)

    Yank the top of the kill ring into the buffer at point.

    -
    yank-pop (M-y) - -
    +
    yank-pop (M-y)

    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is yank or yank-pop.


    -
    +
    +
    +

    8.4.5 Specifying Numeric Arguments

    -
    digit-argument (M-0, M-1, … M--) - -
    +
    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.

    -
    universal-argument () - -
    +
    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. @@ -11534,16 +11553,16 @@ By default, this is not bound to a key.


    -
    +
    +
    +

    8.4.6 Letting Readline Type For You

    -
    complete (TAB) - -
    +
    complete (TAB)

    Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash attempts completion treating the text as a variable (if the @@ -11553,25 +11572,19 @@ command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted.

    -
    possible-completions (M-?) - -
    +
    possible-completions (M-?)

    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    -
    insert-completions (M-*) - -
    +
    insert-completions (M-*)

    Insert all completions of the text before point that would have been generated by possible-completions.

    -
    menu-complete () - -
    +
    menu-complete ()

    Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list @@ -11586,17 +11599,13 @@ This command is intended to be bound to TAB, but is unbound by default.

    -
    menu-complete-backward () - -
    +
    menu-complete-backward ()

    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    -
    delete-char-or-list () - -
    +
    delete-char-or-list ()

    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to @@ -11604,64 +11613,46 @@ If at the end of the line, behaves identically to This command is unbound by default.

    -
    complete-filename (M-/) - -
    +
    complete-filename (M-/)

    Attempt filename completion on the text before point.

    -
    possible-filename-completions (C-x /) - -
    +
    possible-filename-completions (C-x /)

    List the possible completions of the text before point, treating it as a filename.

    -
    complete-username (M-~) - -
    +
    complete-username (M-~)

    Attempt completion on the text before point, treating it as a username.

    -
    possible-username-completions (C-x ~) - -
    +
    possible-username-completions (C-x ~)

    List the possible completions of the text before point, treating it as a username.

    -
    complete-variable (M-$) - -
    +
    complete-variable (M-$)

    Attempt completion on the text before point, treating it as a shell variable.

    -
    possible-variable-completions (C-x $) - -
    +
    possible-variable-completions (C-x $)

    List the possible completions of the text before point, treating it as a shell variable.

    -
    complete-hostname (M-@) - -
    +
    complete-hostname (M-@)

    Attempt completion on the text before point, treating it as a hostname.

    -
    possible-hostname-completions (C-x @) - -
    +
    possible-hostname-completions (C-x @)

    List the possible completions of the text before point, treating it as a hostname.

    -
    complete-command (M-!) - -
    +
    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 @@ -11669,32 +11660,24 @@ functions, shell builtins, and finally executable filenames, in that order.

    -
    possible-command-completions (C-x !) - -
    +
    possible-command-completions (C-x !)

    List the possible completions of the text before point, treating it as a command name.

    -
    dynamic-complete-history (M-TAB) - -
    +
    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.

    -
    dabbrev-expand () - -
    +
    dabbrev-expand ()

    Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches.

    -
    complete-into-braces (M-{) - -
    +
    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 Brace Expansion). @@ -11703,35 +11686,29 @@ enclosed within braces so the list is available to the shell


    -
    +
    +
    +

    8.4.7 Keyboard Macros

    -
    start-kbd-macro (C-x () - -
    +
    start-kbd-macro (C-x ()

    Begin saving the characters typed into the current keyboard macro.

    -
    end-kbd-macro (C-x )) - -
    +
    end-kbd-macro (C-x ))

    Stop saving the characters typed into the current keyboard macro and save the definition.

    -
    call-last-kbd-macro (C-x e) - -
    +
    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.

    -
    print-last-kbd-macro () - -
    +
    print-last-kbd-macro ()

    Print the last keboard macro defined in a format suitable for the inputrc file.

    @@ -11739,94 +11716,72 @@ in the macro appear as if typed at the keyboard.

    -
    +
    +
    +

    8.4.8 Some Miscellaneous Commands

    -
    re-read-init-file (C-x C-r) - -
    +
    re-read-init-file (C-x C-r)

    Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.

    -
    abort (C-g) - -
    +
    abort (C-g)

    Abort the current editing command and ring the terminal’s bell (subject to the setting of bell-style).

    -
    do-lowercase-version (M-A, M-B, M-x, …) - -
    +
    do-lowercase-version (M-A, M-B, M-x, …)

    If the metafied character x is upper case, run the command that is bound to the corresponding metafied lower case character. The behavior is undefined if x is already lower case.

    -
    prefix-meta (ESC) - -
    +
    prefix-meta (ESC)

    Metafy the next character typed. This is for keyboards without a meta key. Typing ‘ESC f’ is equivalent to typing M-f.

    -
    undo (C-_ or C-x C-u) - -
    +
    undo (C-_ or C-x C-u)

    Incremental undo, separately remembered for each line.

    -
    revert-line (M-r) - -
    +
    revert-line (M-r)

    Undo all changes made to this line. This is like executing the undo command enough times to get back to the beginning.

    -
    tilde-expand (M-&) - -
    +
    tilde-expand (M-&)

    Perform tilde expansion on the current word.

    -
    set-mark (C-@) - -
    +
    set-mark (C-@)

    Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.

    -
    exchange-point-and-mark (C-x C-x) - -
    +
    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.

    -
    character-search (C-]) - -
    +
    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.

    -
    character-search-backward (M-C-]) - -
    +
    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.

    -
    skip-csi-sequence () - -
    +
    skip-csi-sequence ()

    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is @@ -11836,9 +11791,7 @@ stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    -
    insert-comment (M-#) - -
    +
    insert-comment (M-#)

    Without a numeric argument, the value of the 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 @@ -11853,107 +11806,85 @@ If a numeric argument causes the comment character to be removed, the line will be executed by the shell.

    -
    dump-functions () - -
    +
    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 inputrc file. This command is unbound by default.

    -
    dump-variables () - -
    +
    dump-variables ()

    Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    -
    dump-macros () - -
    +
    dump-macros ()

    Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    -
    glob-complete-word (M-g) - -
    +
    spell-correct-word (C-x s)
    +

    Perform spelling correction on the current word, treating it as a directory +or filename, in the same way as the cdspell shell option. +Word boundaries are the same as those used by shell-forward-word. +

    +
    +
    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.

    -
    glob-expand-word (C-x *) - -
    +
    glob-expand-word (C-x *)

    The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion.

    -
    glob-list-expansions (C-x g) - -
    +
    glob-list-expansions (C-x g)

    The list of expansions that would have been generated by glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion.

    -
    display-shell-version (C-x C-v) - -
    +
    display-shell-version (C-x C-v)

    Display version information about the current instance of Bash.

    -
    shell-expand-line (M-C-e) - -
    +
    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 Shell Expansions).

    -
    history-expand-line (M-^) - -
    +
    history-expand-line (M-^)

    Perform history expansion on the current line.

    -
    magic-space () - -
    +
    magic-space ()

    Perform history expansion on the current line and insert a space -(see History Interaction). +(see History Expansion).

    -
    alias-expand-line () - -
    +
    alias-expand-line ()

    Perform alias expansion on the current line (see Aliases).

    -
    history-and-alias-expand-line () - -
    +
    history-and-alias-expand-line ()

    Perform history and alias expansion on the current line.

    -
    insert-last-argument (M-. or M-_) - -
    +
    insert-last-argument (M-. or M-_)

    A synonym for yank-last-arg.

    -
    edit-and-execute-command (C-x C-e) - -
    +
    edit-and-execute-command (C-x C-e)

    Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke @@ -11966,7 +11897,10 @@ as the editor, in that order.


    -
    +
    +
    +
    + @@ -11990,7 +11924,9 @@ history lines with ‘k’ and subsequent lines with &lsquo so forth.


    -
    +
    +
    + @@ -12021,7 +11957,7 @@ for the command word from any successful expansion

    Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default Bash completion -described above (see Commands For Completion) is performed. +described above (see Letting Readline Type For You) is performed.

    First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are @@ -12152,7 +12088,9 @@ complete -D -F _completion_loader -o bashdefault -o default


    -
    +
    +
    + @@ -12164,9 +12102,8 @@ facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening.

    -
    compgen
    -
    -
    +
    compgen
    +
    compgen [option] [word]
     
    @@ -12189,9 +12126,8 @@ will be displayed. matches were generated.

    -
    complete
    -
    -
    +
    complete
    +
    complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat]
     [-W wordlist] [-F function] [-C command] [-X filterpat]
     [-P prefix] [-S suffix] name [name …]
    @@ -12232,27 +12168,27 @@ should be quoted to protect them from expansion before the
     

    -
    -o comp-option
    +
    -o comp-option

    The comp-option controls several aspects of the compspec’s behavior beyond the simple generation of completions. comp-option may be one of:

    -
    bashdefault
    +
    bashdefault

    Perform the rest of the default Bash completions if the compspec generates no matches.

    -
    default
    +
    default

    Use Readline’s default filename completion if the compspec generates no matches.

    -
    dirnames
    +
    dirnames

    Perform directory name completion if the compspec generates no matches.

    -
    filenames
    +
    filenames

    Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). @@ -12260,21 +12196,21 @@ This option is intended to be used with shell functions specified with -F.

    -
    noquote
    +
    noquote

    Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default).

    -
    nosort
    +
    nosort

    Tell Readline not to sort the list of possible completions alphabetically.

    -
    nospace
    +
    nospace

    Tell Readline not to append a space (the default) to words completed at the end of the line.

    -
    plusdirs
    +
    plusdirs

    After any matches defined by the compspec are generated, directory name completion is attempted and any matches are added to the results of the other actions. @@ -12283,118 +12219,118 @@ matches are added to the results of the other actions.

    -
    -A action
    +
    -A action

    The action may be one of the following to generate a list of possible completions:

    -
    alias
    +
    alias

    Alias names. May also be specified as -a.

    -
    arrayvar
    +
    arrayvar

    Array variable names.

    -
    binding
    +
    binding

    Readline key binding names (see Bindable Readline Commands).

    -
    builtin
    +
    builtin

    Names of shell builtin commands. May also be specified as -b.

    -
    command
    +
    command

    Command names. May also be specified as -c.

    -
    directory
    +
    directory

    Directory names. May also be specified as -d.

    -
    disabled
    +
    disabled

    Names of disabled shell builtins.

    -
    enabled
    +
    enabled

    Names of enabled shell builtins.

    -
    export
    +
    export

    Names of exported shell variables. May also be specified as -e.

    -
    file
    +
    file

    File names. May also be specified as -f.

    -
    function
    +
    function

    Names of shell functions.

    -
    group
    +
    group

    Group names. May also be specified as -g.

    -
    helptopic
    -

    Help topics as accepted by the help builtin (see Bash Builtins). +

    helptopic
    +

    Help topics as accepted by the help builtin (see Bash Builtin Commands).

    -
    hostname
    +
    hostname

    Hostnames, as taken from the file specified by the HOSTFILE shell variable (see Bash Variables).

    -
    job
    +
    job

    Job names, if job control is active. May also be specified as -j.

    -
    keyword
    +
    keyword

    Shell reserved words. May also be specified as -k.

    -
    running
    +
    running

    Names of running jobs, if job control is active.

    -
    service
    +
    service

    Service names. May also be specified as -s.

    -
    setopt
    +
    setopt

    Valid arguments for the -o option to the set builtin (see The Set Builtin).

    -
    shopt
    +
    shopt

    Shell option names as accepted by the shopt builtin -(see Bash Builtins). +(see Bash Builtin Commands).

    -
    signal
    +
    signal

    Signal names.

    -
    stopped
    +
    stopped

    Names of stopped jobs, if job control is active.

    -
    user
    +
    user

    User names. May also be specified as -u.

    -
    variable
    +
    variable

    Names of all shell variables. May also be specified as -v.

    -
    -C command
    +
    -C command

    command is executed in a subshell environment, and its output is used as the possible completions.

    -
    -F function
    +
    -F function

    The shell function function is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are @@ -12405,22 +12341,22 @@ When it finishes, the possible completions are retrieved from the value of the COMPREPLY array variable.

    -
    -G globpat
    +
    -G globpat

    The filename expansion pattern globpat is expanded to generate the possible completions.

    -
    -P prefix
    +
    -P prefix

    prefix is added at the beginning of each possible completion after all other options have been applied.

    -
    -S suffix
    +
    -S suffix

    suffix is appended to each possible completion after all other options have been applied.

    -
    -W wordlist
    +
    -W wordlist

    The wordlist is split using the characters in the IFS special variable as delimiters, and each resultant word is expanded. @@ -12428,7 +12364,7 @@ The possible completions are the members of the resultant list which match the word being completed.

    -
    -X filterpat
    +
    -X filterpat

    filterpat is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching @@ -12445,9 +12381,8 @@ a name for which no specification exists, or an error occurs adding a completion specification.

    -
    compopt
    -
    -
    +
    compopt
    +
    compopt [-o option] [-DEI] [+o option] [name]
     

    Modify completion options for each name according to the @@ -12479,7 +12414,9 @@ specification exists, or an output error occurs.


    -
    +
    +
    + @@ -12602,9 +12539,12 @@ in the examples/complete subdirectory.
    -
    +
    +
    +
    +

    9 Using History Interactively

    @@ -12615,19 +12555,15 @@ It should be considered a user’s guide. For information on using the GNU History Library in other programs, see the GNU Readline Library Manual.

    - - - - - +
    -
    +
    + @@ -12657,7 +12593,7 @@ the value of the HISTFILESIZE variable. When a shell with history enabled exits, the last $HISTSIZE lines are copied from the history list to the file named by $HISTFILE. -If the histappend shell option is set (see Bash Builtins), +If the histappend shell option is set (see Bash Builtin Commands), the lines are appended to the history file, otherwise the history file is overwritten. If HISTFILE @@ -12680,7 +12616,7 @@ The 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 (see Commands For History). +history list (see Commands For Manipulating The History).

    The shell allows control over which commands are saved on the history list. The HISTCONTROL and HISTIGNORE @@ -12697,9 +12633,11 @@ The shopt builtin is used to set these options. See The Shopt Builtin, for a description of shopt.


    -
    +
    +
    +

    9.2 Bash History Builtins

    @@ -12708,9 +12646,8 @@ Next:
    +
    fc [-e ename] [-lnr] [first] [last]
     fc -s [pat=rep] [command]
     
    @@ -12751,9 +12688,8 @@ that typing ‘r cc’ runs the last command beginning with and typing ‘r’ re-executes the last command (see Aliases).

    -
    history
    -
    -
    +
    history
    +
    history [n]
     history -c
     history -d offset
    @@ -12774,12 +12710,12 @@ and the history line.
     

    Options, if supplied, have the following meanings:

    -
    -c
    +
    -c

    Clear the history list. This may be combined with the other options to replace the history list completely.

    -
    -d offset
    +
    -d offset

    Delete the history entry at position offset. If offset is positive, it should be specified as it appears when the history is displayed. @@ -12789,39 +12725,40 @@ end of the history, and an index of ‘-1’ refers to the history -d command.

    -
    -d start-end
    -

    Delete the history entries between positions start and end, -inclusive. Positive and negative values for start and end +

    -d start-end
    +

    Delete the range of history entries between positions start and +end, inclusive. +Positive and negative values for start and end are interpreted as described above.

    -
    -a
    +
    -a

    Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file.

    -
    -n
    +
    -n

    Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session.

    -
    -r
    +
    -r

    Read the history file and append its contents to the history list.

    -
    -w
    +
    -w

    Write out the current history list to the history file.

    -
    -p
    +
    -p

    Perform history substitution on the args and display the result on the standard output, without storing the results in the history list.

    -
    -s
    +
    -s

    The args are added to the end of the history list as a single entry.

    @@ -12833,11 +12770,18 @@ used, if filename is given, then it is used as the history file. If not, then the value of the HISTFILE variable is used.

    +

    The return value is 0 unless an invalid option is encountered, an +error occurs while reading or writing the history file, an invalid +offset or range is supplied as an argument to -d, or the +history expansion supplied as an argument to -p fails. +


    -
    +
    +
    + @@ -12908,19 +12852,17 @@ as explained above (see Bash Variables). The shel the history comment character to mark history timestamps when writing the history file.

    - - - - - +
    -
    +
    +

    9.3.1 Event Designators

    @@ -12932,31 +12874,31 @@ position in the history list.

    -
    !
    +
    !

    Start a history substitution, except when followed by a space, tab, the end of the line, ‘=’ or ‘(’ (when the extglob shell option is enabled using the shopt builtin).

    -
    !n
    +
    !n

    Refer to command line n.

    -
    !-n
    +
    !-n

    Refer to the command n lines back.

    -
    !!
    +
    !!

    Refer to the previous command. This is a synonym for ‘!-1’.

    -
    !string
    +
    !string

    Refer to the most recent command preceding the current position in the history list starting with string.

    -
    !?string[?]
    +
    !?string[?]

    Refer to the most recent command preceding the current position in the history list containing string. @@ -12967,22 +12909,24 @@ If string is missing, the string from the most recent search is used; it is an error if there is no previous search string.

    -
    ^string1^string2^
    +
    ^string1^string2^

    Quick Substitution. Repeat the last command, replacing string1 with string2. Equivalent to !!:s^string1^string2^.

    -
    !#
    +
    !#

    The entire command line typed so far.


    -
    +
    +
    +

    9.3.2 Word Designators

    @@ -12996,17 +12940,17 @@ inserted into the current line separated by single spaces.

    For example,

    -
    !!
    +
    !!

    designates the preceding command. When you type this, the preceding command is repeated in toto.

    -
    !!:$
    +
    !!:$

    designates the last argument of the preceding command. This may be shortened to !$.

    -
    !fi:2
    +
    !fi:2

    designates the second argument of the most recent command starting with the letters fi.

    @@ -13015,42 +12959,42 @@ the letters fi.

    Here are the word designators:

    -
    0 (zero)
    +
    0 (zero)

    The 0th word. For many applications, this is the command word.

    -
    n
    +
    n

    The nth word.

    -
    ^
    +
    ^

    The first argument; that is, word 1.

    -
    $
    +
    $

    The last argument.

    -
    %
    +
    %

    The first word matched by the most recent ‘?string?’ search, if the search string begins with a character that is part of a word.

    -
    x-y
    +
    x-y

    A range of words; ‘-y’ abbreviates ‘0-y’.

    -
    *
    +
    *

    All of the words, except the 0th. This is a synonym for ‘1-$’. It is not an error to use ‘*’ if there is just one word in the event; the empty string is returned in that case.

    -
    x*
    +
    x*

    Abbreviates ‘x-$

    -
    x-
    +
    x-

    Abbreviates ‘x-$’ like ‘x*’, but omits the last word. If ‘x’ is missing, it defaults to 0.

    @@ -13061,9 +13005,11 @@ If ‘x’ is missing, it defaults to 0. previous command is used as the event.


    -
    +
    +
    +

    9.3.3 Modifiers

    @@ -13072,39 +13018,39 @@ of the following modifiers, each preceded by a ‘:’. These modify, or edit, the word or words selected from the history event.

    -
    h
    +
    h

    Remove a trailing pathname component, leaving only the head.

    -
    t
    +
    t

    Remove all leading pathname components, leaving the tail.

    -
    r
    +
    r

    Remove a trailing suffix of the form ‘.suffix’, leaving the basename.

    -
    e
    +
    e

    Remove all but the trailing suffix.

    -
    p
    +
    p

    Print the new command but do not execute it.

    -
    q
    +
    q

    Quote the substituted words, escaping further substitutions.

    -
    x
    +
    x

    Quote the substituted words as with ‘q’, but break into words at spaces, tabs, and newlines. The ‘q’ and ‘x’ modifiers are mutually exclusive; the last one supplied is used.

    -
    s/old/new/
    +
    s/old/new/

    Substitute new for the first occurrence of old in the event line. Any character may be used as the delimiter in place of ‘/’. @@ -13122,18 +13068,18 @@ The final delimiter is optional if it is the last character on the input line.

    -
    &
    +
    &

    Repeat the previous substitution.

    -
    g
    -
    a
    +
    g
    +
    a

    Cause changes to be applied over the entire event line. Used in conjunction with ‘s’, as in gs/old/new/, or with ‘&’.

    -
    G
    +
    G

    Apply the following ‘s’ or ‘&’ modifier once to each word in the event.

    @@ -13141,9 +13087,13 @@ in the event.

    -
    +
    +
    +
    +
    +

    10 Installing Bash

    @@ -13154,32 +13104,20 @@ non-Unix systems such as BeOS and Interix. Other independent ports exist for MS-DOS, OS/2, and Windows platforms.

    - - - - - - - - - - +
    -
    +
    + @@ -13210,7 +13148,14 @@ reporting script.
  • Optionally, type ‘make tests’ to run the Bash test suite.
  • Type ‘make install’ to install bash and bashbug. -This will also install the manual pages and Info file. +This will also install the manual pages and Info file, message translation +files, some supplemental documentation, a number of example loadable +builtin commands, and a set of header files for developing loadable +builtins. +You may need additional privileges to install bash to your +desired destination, so ‘sudo make install’ might be required. +More information about controlling the locations where bash and +other files are installed is below (see Installation Names).
  • @@ -13218,7 +13163,7 @@ This will also install the manual pages and Info file. values for various system-dependent variables used during compilation. It uses those values to create a Makefile in each directory of the package (the top directory, the -builtins, doc, and support directories, +builtins, doc, po, and support directories, each directory under lib, and several others). It also creates a config.h file containing system-dependent definitions. Finally, it creates a shell script named config.status that you @@ -13262,10 +13207,10 @@ to do them, and mail diffs or instructions to considered for the next release.

    The file configure.ac is used to create configure -by a program called Autoconf. You only need -configure.ac if you want to change it or regenerate -configure using a newer version of Autoconf. If -you do this, make sure you are using Autoconf version 2.50 or +by a program called Autoconf. +You only need configure.ac if you want to change it or regenerate +configure using a newer version of Autoconf. +If you do this, make sure you are using Autoconf version 2.69 or newer.

    You can remove the program binaries and object files from the @@ -13274,7 +13219,9 @@ files that configure created (so you can compile Bash for a different kind of computer), type ‘make distclean’.


    -
    +
    +
    + @@ -13300,7 +13247,9 @@ can do that on the command line like this: is available.


    -
    +
    +
    + @@ -13340,28 +13289,62 @@ Bash for at least one architecture before you can create build directories for other architectures.


    -
    +
    +
    +

    10.4 Installation Names

    By default, ‘make install’ will install into -/usr/local/bin, /usr/local/man, etc. You can -specify an installation prefix other than /usr/local by +/usr/local/bin, /usr/local/man, etc.; +that is, the installation prefix defaults to /usr/local. +You can specify an installation prefix other than /usr/local by giving configure the option --prefix=PATH, -or by specifying a value for the DESTDIRmake’ -variable when running ‘make install’. +or by specifying a value for the prefixmake’ +variable when running ‘make install’ +(e.g., ‘make install prefix=PATH’). +The prefix variable provides a default for exec_prefix and +other variables used when installing bash.

    You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give configure the option --exec-prefix=PATH, ‘make install’ will use PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +Documentation and other data files will still use the regular prefix. +

    +

    If you would like to change the installation locations for a single run, +you can specify these variables as arguments to make: +‘make install exec_prefix=/’ will install bash and +bashbug into /bin instead of the default /usr/local/bin. +

    +

    If you want to see the files bash will install and where it will install +them without changing anything on your system, specify the variable +DESTDIR as an argument to make. Its value should be the +absolute directory path you’d like to use as the root of your sample +installation tree. For example, +

    +
    +
    mkdir /fs1/bash-install
    +make install DESTDIR=/fs1/bash-install
    +
    + +

    will install bash into /fs1/bash-install/usr/local/bin/bash, +the documentation into directories within +/fs1/bash-install/usr/local/share, the example loadable builtins into +/fs1/bash-install/usr/local/lib/bash, and so on. +You can use the usual exec_prefix and prefix variables to alter +the directory paths beneath the value of DESTDIR. +

    +

    The GNU Makefile standards provide a more complete description of these +variables and their effects.


    -
    +
    +
    + @@ -13380,7 +13363,9 @@ or a canonical name with three fields: ‘CPU-COMPANY-SYSTEM&rs values of each field.


    -
    +
    +
    + @@ -13397,7 +13382,9 @@ script. A warning: the Bash configure looks for a site script, but not all configure scripts do.


    -
    +
    +
    + @@ -13407,29 +13394,29 @@ Next:
    -
    --cache-file=file
    +
    --cache-file=file

    Use and save the results of the tests in file instead of ./config.cache. Set file to /dev/null to disable caching, for debugging configure.

    -
    --help
    +
    --help

    Print a summary of the options to configure, and exit.

    -
    --quiet
    -
    --silent
    -
    -q
    +
    --quiet
    +
    --silent
    +
    -q

    Do not print messages saying which checks are being made.

    -
    --srcdir=dir
    +
    --srcdir=dir

    Look for the Bash source code in directory dir. Usually configure can determine that directory automatically.

    -
    --version
    +
    --version

    Print the version of Autoconf used to generate the configure script, and exit.

    @@ -13439,7 +13426,9 @@ script, and exit. options. ‘configure --help’ prints the complete list.


    -
    +
    +
    + @@ -13457,11 +13446,11 @@ that is enabled by default, use --disable-feature. --with- options that the Bash configure recognizes.

    -
    --with-afs
    +
    --with-afs

    Define if you are using the Andrew File System from Transarc.

    -
    --with-bash-malloc
    +
    --with-bash-malloc

    Use the Bash version of malloc in the directory lib/malloc. This is not the same malloc that appears in GNU libc, but an older version @@ -13473,17 +13462,17 @@ which this should be turned off, and configure disables this option automatically for a number of systems.

    -
    --with-curses
    +
    --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.

    -
    --with-gnu-malloc
    +
    --with-gnu-malloc

    A synonym for --with-bash-malloc.

    -
    --with-installed-readline[=PREFIX]
    +
    --with-installed-readline[=PREFIX]

    Define this to make Bash link with a locally-installed version of Readline rather than the version in lib/readline. This works only with Readline 5.0 and later versions. If PREFIX is yes or not @@ -13500,255 +13489,276 @@ the installed version of Readline in subdirectories of that directory PREFIX/lib).

    -
    --with-purify
    -

    Define this to use the Purify memory allocation checker from Rational -Software. +

    --with-libintl-prefix[=PREFIX]
    +

    Define this to make Bash link with a locally-installed version of the +libintl library instead ofthe version in lib/intl.

    -
    --enable-minimal-config
    +
    --with-libiconv-prefix[=PREFIX]
    +

    Define this to make Bash look for libiconv in PREFIX instead of the +standard system locations. There is no version included with Bash. +

    +
    +
    --enable-minimal-config

    This produces a shell with minimal features, close to the historical Bourne shell.

    There are several --enable- options that alter how Bash is -compiled and linked, rather than changing run-time features. +compiled, linked, and installed, rather than changing run-time features.

    -
    --enable-largefile
    +
    --enable-largefile

    Enable support for 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.

    -
    --enable-profiling
    +
    --enable-profiling

    This builds a Bash binary that produces profiling information to be processed by gprof each time it is executed.

    -
    --enable-static-link
    +
    --enable-separate-helpfiles
    +

    Use external files for the documentation displayed by the help builtin +instead of storing the text internally. +

    +
    +
    --enable-static-link

    This causes Bash to be linked statically, if gcc is being used. This could be used to build a version to use as root’s shell. -

    +

    +

    The ‘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 ‘enable-feature’.

    -

    All of the following options except for ‘disabled-builtins’, -‘direxpand-default’, and +

    All of the following options except for +‘alt-array-implementation’, +‘disabled-builtins’, +‘direxpand-default’, +‘strict-posix-default’, +and ‘xpg-echo-default’ are enabled by default, unless the operating system does not provide the necessary support.

    -
    --enable-alias
    +
    --enable-alias

    Allow alias expansion and include the alias and unalias builtins (see Aliases).

    -
    --enable-arith-for-command
    +
    --enable-alt-array-implementation
    +

    This builds bash using an alternate implementation of arrays +(see Arrays) that provides faster access at the expense of using +more memory (sometimes many times more, depending on how sparse an array is). +

    +
    +
    --enable-arith-for-command

    Include support for the alternate form of the for command that behaves like the C language for statement (see Looping Constructs).

    -
    --enable-array-variables
    +
    --enable-array-variables

    Include support for one-dimensional array shell variables (see Arrays).

    -
    --enable-bang-history
    +
    --enable-bang-history

    Include support for csh-like history substitution -(see History Interaction). +(see History Expansion).

    -
    --enable-brace-expansion
    +
    --enable-brace-expansion

    Include csh-like brace expansion ( b{a,b}cbac bbc ). See Brace Expansion, for a complete description.

    -
    --enable-casemod-attributes
    +
    --enable-casemod-attributes

    Include support for case-modifying attributes in the declare builtin -and assignment statements. Variables with the uppercase attribute, +and assignment statements. Variables with the uppercase attribute, for example, will have their values converted to uppercase upon assignment.

    -
    --enable-casemod-expansion
    +
    --enable-casemod-expansion

    Include support for case-modifying word expansions.

    -
    --enable-command-timing
    +
    --enable-command-timing

    Include support for recognizing time as a reserved word and for displaying timing statistics for the pipeline following time (see Pipelines). This allows pipelines as well as shell builtins and functions to be timed.

    -
    --enable-cond-command
    +
    --enable-cond-command

    Include support for the [[ conditional command. (see Conditional Constructs).

    -
    --enable-cond-regexp
    +
    --enable-cond-regexp

    Include support for matching POSIX regular expressions using the ‘=~’ binary operator in the [[ conditional command. (see Conditional Constructs).

    -
    --enable-coprocesses
    +
    --enable-coprocesses

    Include support for coprocesses and the coproc reserved word (see Pipelines).

    -
    --enable-debugger
    +
    --enable-debugger

    Include support for the bash debugger (distributed separately).

    -
    --enable-dev-fd-stat-broken
    +
    --enable-dev-fd-stat-broken

    If calling stat on /dev/fd/N returns different results than calling fstat on file descriptor N, supply this option to enable a workaround. This has implications for conditional commands that test file attributes.

    -
    --enable-direxpand-default
    +
    --enable-direxpand-default

    Cause the direxpand shell option (see The Shopt Builtin) to be enabled by default when the shell starts. It is normally disabled by default.

    -
    --enable-directory-stack
    +
    --enable-directory-stack

    Include support for a csh-like directory stack and the pushd, popd, and dirs builtins (see The Directory Stack).

    -
    --enable-disabled-builtins
    +
    --enable-disabled-builtins

    Allow builtin commands to be invoked via ‘builtin xxx’ even after xxx has been disabled using ‘enable -n xxx’. -See Bash Builtins, for details of the builtin and +See Bash Builtin Commands, for details of the builtin and enable builtin commands.

    -
    --enable-dparen-arithmetic
    +
    --enable-dparen-arithmetic

    Include support for the ((…)) command (see Conditional Constructs).

    -
    --enable-extended-glob
    +
    --enable-extended-glob

    Include support for the extended pattern matching features described above under Pattern Matching.

    -
    --enable-extended-glob-default
    -

    Set the default value of the extglob shell option described +

    --enable-extended-glob-default
    +

    Set the default value of the extglob shell option described above under The Shopt Builtin to be enabled.

    -
    --enable-function-import
    +
    --enable-function-import

    Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default.

    -
    --enable-glob-asciirange-default
    -

    Set the default value of the globasciiranges shell option described +

    --enable-glob-asciirange-default
    +

    Set the default value of the globasciiranges shell option described above under The Shopt Builtin to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions.

    -
    --enable-help-builtin
    +
    --enable-help-builtin

    Include the help builtin, which displays help on shell builtins and -variables (see Bash Builtins). +variables (see Bash Builtin Commands).

    -
    --enable-history
    +
    --enable-history

    Include command history and the fc and history builtin commands (see Bash History Facilities).

    -
    --enable-job-control
    +
    --enable-job-control

    This enables the job control features (see Job Control), if the operating system supports them.

    -
    --enable-multibyte
    +
    --enable-multibyte

    This enables support for multibyte characters if the operating system provides the necessary support.

    -
    --enable-net-redirections
    +
    --enable-net-redirections

    This enables the special handling of filenames of the form /dev/tcp/host/port and /dev/udp/host/port when used in redirections (see Redirections).

    -
    --enable-process-substitution
    +
    --enable-process-substitution

    This enables process substitution (see Process Substitution) if the operating system provides the necessary support.

    -
    --enable-progcomp
    +
    --enable-progcomp

    Enable the programmable completion facilities (see Programmable Completion). If Readline is not enabled, this option has no effect.

    -
    --enable-prompt-string-decoding
    +
    --enable-prompt-string-decoding

    Turn on the interpretation of a number of backslash-escaped characters in the $PS0, $PS1, $PS2, and $PS4 prompt strings. See Controlling the Prompt, for a complete list of prompt string escape sequences.

    -
    --enable-readline
    +
    --enable-readline

    Include support for command-line editing and history with the Bash version of the Readline library (see Command Line Editing).

    -
    --enable-restricted
    +
    --enable-restricted

    Include support for a restricted shell. If this is enabled, Bash, when called as rbash, enters a restricted mode. See The Restricted Shell, for a description of restricted mode.

    -
    --enable-select
    +
    --enable-select

    Include the select compound command, which allows the generation of simple menus (see Conditional Constructs).

    -
    --enable-separate-helpfiles
    -

    Use external files for the documentation displayed by the help builtin -instead of storing the text internally. -

    -
    -
    --enable-single-help-strings
    +
    --enable-single-help-strings

    Store the text displayed by the help builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals.

    -
    --enable-strict-posix-default
    +
    --enable-strict-posix-default

    Make Bash POSIX-conformant by default (see Bash POSIX Mode).

    -
    --enable-usg-echo-default
    +
    --enable-translatable-strings
    +

    Enable support for $"string" translatable strings +(see Locale-Specific Translation). +

    +
    +
    --enable-usg-echo-default

    A synonym for --enable-xpg-echo-default.

    -
    --enable-xpg-echo-default
    +
    --enable-xpg-echo-default

    Make the echo builtin expand backslash-escaped characters by default, without requiring the -e option. This sets the default value of the xpg_echo shell option to on, which makes the Bash echo behave more like the version specified in the Single Unix Specification, version 3. -See Bash Builtins, for a description of the escape sequences that +See Bash Builtin Commands, for a description of the escape sequences that echo recognizes.

    @@ -13762,9 +13772,12 @@ Read the comments associated with each definition for more information about its effect.


    -
    +
    +
    +
    +

    Appendix A Reporting Bugs

    @@ -13773,7 +13786,8 @@ 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 -ftp://ftp.gnu.org/pub/gnu/bash/. +ftp://ftp.gnu.org/pub/gnu/bash/ and from +http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

    Once you have determined that a bug actually exists, use the bashbug command to submit a bug report. @@ -13799,9 +13813,11 @@ the template it provides for filing a bug report. bug-bash@gnu.org.


    -
    +
    +
    +

    Appendix B Major Differences From The Bourne Shell

    @@ -13836,7 +13852,7 @@ The Bash history list maintains timestamp information and uses the value of the HISTTIMEFORMAT variable to display it.
  • Bash implements csh-like history expansion -(see History Interaction). +(see History Expansion).
  • Bash has one-dimensional array variables (see Arrays), and the appropriate variable expansions and assignment syntax to use them. @@ -13851,7 +13867,7 @@ is supported (see ANSI-C Quoting). locale-specific translation of the characters between the double quotes. The -D, --dump-strings, and --dump-po-strings invocation options list the translatable strings found in a script -(see Locale Translation). +(see Locale-Specific Translation).
  • Bash implements the ! keyword to negate the return value of a pipeline (see Pipelines). @@ -13907,15 +13923,15 @@ which expands to the substring of var’s value of length (see Shell Parameter Expansion).
  • The expansion -${var/[/]pattern[/replacement]}, +${var/[/]pattern[/replacement]}, which matches pattern and replaces it with replacement in -the value of var, is available (see Shell Parameter Expansion). +the value of var, is available (see Shell Parameter Expansion).
  • The expansion ${!prefix*} expansion, which expands to the names of all shell variables whose names begin with prefix, is available (see Shell Parameter Expansion). -
  • Bash has indirect variable expansion using ${!word} +
  • Bash has indirect variable expansion using ${!word} (see Shell Parameter Expansion).
  • Bash can expand positional parameters beyond $9 using @@ -13944,8 +13960,8 @@ to negate the set of characters between the brackets. The Bourne shell uses only ‘!’.
  • Bash implements the full set of POSIX filename expansion operators, -including character classes, equivalence classes, and -collating symbols (see Filename Expansion). +including character classes, equivalence classes, and +collating symbols (see Filename Expansion).
  • Bash implements extended pattern matching features when the extglob shell option is enabled (see Pattern Matching). @@ -13955,7 +13971,7 @@ shell option is enabled (see Pattern Matching).
  • Bash functions are permitted to have local variables using the local builtin, and thus useful recursive functions may be written -(see Bash Builtins). +(see Bash Builtin Commands).
  • Variable assignments preceding commands affect only that command, even builtins and functions (see Environment). @@ -13993,13 +14009,13 @@ physical modes.
  • 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 -builtin and command builtins (see Bash Builtins). +builtin and command builtins (see Bash Builtin Commands).
  • The command builtin allows selective disabling of functions -when command lookup is performed (see Bash Builtins). +when command lookup is performed (see Bash Builtin Commands).
  • Individual builtins may be enabled or disabled using the enable -builtin (see Bash Builtins). +builtin (see Bash Builtin Commands).
  • The Bash exec builtin takes additional options that allow users to control the contents of the environment passed to the executed @@ -14022,12 +14038,12 @@ searching the $PATH, using ‘hash -p’ (see Bourne Shell Builtins).
  • Bash includes a help builtin for quick reference to shell -facilities (see Bash Builtins). +facilities (see Bash Builtin Commands).
  • The printf builtin is available to display formatted output -(see Bash Builtins). +(see Bash Builtin Commands). -
  • The Bash read builtin (see Bash Builtins) +
  • The Bash read builtin (see Bash Builtin Commands) will read a line ending in ‘\’ with the -r option, and will use the REPLY variable as a default if no non-option arguments are supplied. @@ -14063,7 +14079,7 @@ which specifies the behavior based on the number of arguments.
  • Bash includes the caller builtin, which displays the context of any active subroutine call (a shell function or a script executed with -the . or source builtins). This supports the bash +the . or source builtins). This supports the Bash debugger.
  • The trap builtin (see Bourne Shell Builtins) allows a @@ -14096,7 +14112,7 @@ function has been given the trace attribute or the functrace option has been enabled using the shopt builtin.

  • The Bash type builtin is more extensive and gives more information -about the names it finds (see Bash Builtins). +about the names it finds (see Bash Builtin Commands).
  • The Bash umask builtin permits a -p option to cause the output to be displayed in the form of a umask command @@ -14137,7 +14153,11 @@ shell scripts.

    More features unique to Bash may be found in Bash Features.

    -

    B.1 Implementation Differences From The SVR4.2 Shell

    + +
    +

    B.1 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: @@ -14185,9 +14205,12 @@ only for certain failures, as enumerated in the POSIX standard.


  • -
    +
    +
    +
    +

    Appendix C GNU Free Documentation License

    @@ -14661,31 +14684,27 @@ to permit their use in free software.
    -
    +
    +
    +

    Appendix D Indexes

    - - - - - - - +
    -
    +
    +

    D.1 Index of Shell Builtin Commands

    Jump to:   . @@ -14883,9 +14902,11 @@ Next:

    -
    +
    +
    +

    D.2 Index of Shell Reserved Words

    Jump to:   ! @@ -15003,9 +15024,11 @@ Next: , Pre

    -
    +
    +
    +

    D.3 Parameter and Variable Index

    + @@ -15213,11 +15237,12 @@ Next: , Pre - + + - + @@ -15261,6 +15286,7 @@ Next: , Pre + @@ -15279,8 +15305,8 @@ Next: , Pre - - + + @@ -15354,9 +15380,11 @@ Next: , Pre
    Jump to:   ! @@ -15165,6 +15188,7 @@ Next: , Pre
    editing-mode: Readline Init File Syntax
    EMACS: Bash Variables
    emacs-mode-string: Readline Init File Syntax
    enable-active-region: Readline Init File Syntax
    enable-bracketed-paste: Readline Init File Syntax
    enable-keypad: Readline Init File Syntax
    ENV: Bash Variables
    keymap: Readline Init File Syntax

    L
    LANG: Bash Variables
    LANG: Creating Internationalized Scripts
    LANG: Bash Variables
    LC_ALL: Bash Variables
    LC_COLLATE: Bash Variables
    LC_CTYPE: Bash Variables
    LC_MESSAGES: Locale Translation
    LC_MESSAGES: Creating Internationalized Scripts
    LC_MESSAGES: Bash Variables
    LC_NUMERIC: Bash Variables
    LC_TIME: Bash Variables

    R
    RANDOM: Bash Variables
    READLINE_ARGUMENT: Bash Variables
    READLINE_LINE: Bash Variables
    READLINE_MARK: Bash Variables
    READLINE_POINT: Bash Variables
    SRANDOM: Bash Variables

    T
    TEXTDOMAIN: Locale Translation
    TEXTDOMAINDIR: Locale Translation
    TEXTDOMAIN: Creating Internationalized Scripts
    TEXTDOMAINDIR: Creating Internationalized Scripts
    TIMEFORMAT: Bash Variables
    TMOUT: Bash Variables
    TMPDIR: Bash Variables

    -
    +
    + +
    diff --git a/doc/bashref.info b/doc/bashref.info index 20ebf243..4b5eb14f 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -1,13 +1,13 @@ -This is bashref.info, produced by makeinfo version 6.7 from +This is bashref.info, produced by makeinfo version 6.8 from bashref.texi. This text is a brief description of the features that are present in the -Bash shell (version 5.1, 29 October 2020). +Bash shell (version 5.2, 26 December 2021). - This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.1. + This is Edition 5.2, last updated 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, @@ -27,11 +27,11 @@ Bash Features ************* This text is a brief description of the features that are present in the -Bash shell (version 5.1, 29 October 2020). The Bash home page is +Bash shell (version 5.2, 26 December 2021). The Bash home page is . - This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash -Reference Manual', for 'Bash', Version 5.1. + This is Edition 5.2, last updated 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. Bash contains features that appear in other popular shells, and some features that only appear in Bash. Some of the shells that Bash has @@ -359,11 +359,11 @@ as such, and to prevent parameter expansion. Each of the shell metacharacters (*note 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 (*note -History Interaction::), the HISTORY EXPANSION character, usually '!', +History Interaction::), the "history expansion" character, usually '!', must be quoted to prevent history expansion. *Note Bash History Facilities::, for more details concerning history expansion. - There are three quoting mechanisms: the ESCAPE CHARACTER, single + There are three quoting mechanisms: the "escape character", single quotes, and double quotes.  @@ -419,10 +419,11 @@ File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Dou 3.1.2.4 ANSI-C Quoting ...................... -Words of the form '$'STRING'' are treated specially. The word expands -to STRING, with backslash-escaped characters replaced as specified by -the ANSI C standard. Backslash escape sequences, if present, are -decoded as follows: +Character sequences of the form $'STRING' are treated as a special kind +of single quotes. The sequence expands to STRING, with +backslash-escaped characters in STRING replaced as specified by the ANSI +C standard. Backslash escape sequences, if present, are decoded as +follows: '\a' alert (bell) @@ -473,22 +474,114 @@ File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoti 3.1.2.5 Locale-Specific Translation ................................... -A double-quoted string preceded by a dollar sign ('$') will cause the -string to be translated according to the current locale. The GETTEXT -infrastructure performs the message catalog lookup and translation, -using the 'LC_MESSAGES' and 'TEXTDOMAIN' shell variables, as explained -below. See the gettext documentation for additional details. If the -current locale is 'C' or 'POSIX', or if there are no translations -available, the dollar sign is ignored. If the string is translated and -replaced, the replacement is double-quoted. +* Menu: - Some systems use the message catalog selected by the 'LC_MESSAGES' -shell variable. Others create the name of the message catalog from the -value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of -'.mo'. If you use the 'TEXTDOMAIN' variable, you may need to set the -'TEXTDOMAINDIR' variable to the location of the message catalog files. -Still others use both variables in this fashion: -'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo. +* Creating Internationalized Scripts:: How to use translations and different + languages in your scripts. + +Prefixing a double-quoted string with a dollar sign ('$'), such as +$"hello, world", will cause the string to be translated according to the +current locale. The 'gettext' infrastructure performs the lookup and +translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN' +shell variables, as explained below. See the gettext documentation for +additional details not covered here. If the current locale is 'C' or +'POSIX', if there are no translations available, of if the string is not +translated, the dollar sign is ignored. Since this is a form of double +quoting, the string remains double-quoted by default, whether or not it +is translated and replaced. If the 'noexpand_translation' option is +enabled using the 'shopt' builtin (*note The Shopt Builtin::), +translated strings are single-quoted instead of double-quoted. + + The rest of this section is a brief overview of how you use gettext +to create translations for strings in a shell script named SCRIPTNAME. +There are more details in the gettext documentation. + + +File: bashref.info, Node: Creating Internationalized Scripts, Up: Locale Translation + +Once you've marked the strings in your script that you want to translate +using $"...", you create a gettext "template" file using the command + + bash --dump-po-strings SCRIPTNAME > DOMAIN.pot + +The DOMAIN is your "message domain". It's just an arbitrary string +that's used to identify the files gettext needs, like a package or +script name. It needs to be unique among all the message domains on +systems where you install the translations, so gettext knows which +translations correspond to your script. You'll use the template file to +create translations for each target language. The template file +conventionally has the suffix '.pot'. + + You copy this template file to a separate file for each target +language you want to support (called "PO" files, which use the suffix +'.po'). PO files use various naming conventions, but when you are +working to translate a template file into a particular language, you +first copy the template file to a file whose name is the language you +want to target, with the '.po' suffix. For instance, the Spanish +translations of your strings would be in a file named 'es.po', and to +get started using a message domain named "example," you would run + + cp example.pot es.po + +Ultimately, PO files are often named DOMAIN.po and installed in +directories that contain multiple translation files for a particular +language. + + Whichever naming convention you choose, you will need to translate +the strings in the PO files into the appropriate languages. This has to +be done manually. + + When you have the translations and PO files complete, you'll use the +gettext tools to produce what are called "MO" files, which are compiled +versions of the PO files the gettext tools use to look up translations +efficiently. MO files are also called "message catalog" files. You use +the 'msgfmt' program to do this. For instance, if you had a file with +Spanish translations, you could run + + msgfmt -o es.mo es.po + +to produce the corresponding MO file. + + Once you have the MO files, you decide where to install them and use +the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +are. Make sure to use the same message domain to name the MO files as +you did for the PO files when you install them. + + Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to +select the desired language. + + You set the 'TEXTDOMAIN' variable to the script's message domain. As +above, you use the message domain to name your translation files. + + You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the +name of a directory where the message catalog files are stored. If you +install the message files into the system's standard message catalog +directory, you don't need to worry about this variable. + + The directory where the message catalog files are stored varies +between systems. Some use the message catalog selected by the +'LC_MESSAGES' shell variable. Others create the name of the message +catalog from the value of the 'TEXTDOMAIN' shell variable, possibly +adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may +need to set the 'TEXTDOMAINDIR' variable to the location of the message +catalog files, as above. It's common to use both variables in this +fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. + + If you used that last convention, and you wanted to store the message +catalog files with Spanish (es) and Esperanto (eo) translations into a +local directory you use for custom translation files, you could run + + TEXTDOMAIN=example + TEXTDOMAINDIR=/usr/local/share/locale + + cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo + cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo + + When all of this is done, and the message catalog files containing +the compiled translations are installed in the correct location, your +users will be able to see translated strings in any of the supported +languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +before running your script.  File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax @@ -582,13 +675,13 @@ the control operators '|' or '|&'. The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command's output. This connection is performed before any redirections -specified by the command. +specified by COMMAND1. If '|&' is used, COMMAND1's standard error, in addition to its standard output, is connected to COMMAND2's standard input through the pipe; it is shorthand for '2>&1 |'. This implicit redirection of the standard error to the standard output is performed after any -redirections specified by the command. +redirections specified by COMMAND1. The reserved word 'time' causes timing statistics to be printed for the pipeline once it finishes. The statistics currently consist of @@ -612,11 +705,11 @@ information. If the pipeline is not executed asynchronously (*note Lists::), the shell waits for all commands in the pipeline to complete. - Each command in a pipeline is executed in its own subshell, which is -a separate process (*note Command Execution Environment::). If the + Each command in a pipeline is executed in its own "subshell", which +is a separate process (*note Command Execution Environment::). If the 'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt Builtin::), the last element of a pipeline may be run by the shell -process. +process when job control is not active. The exit status of a pipeline is the exit status of the last command in the pipeline, unless the 'pipefail' option is enabled (*note The Set @@ -645,8 +738,8 @@ commands, equivalent to a semicolon. If a command is terminated by the control operator '&', the shell executes the command asynchronously in a subshell. This is known as -executing the command in the BACKGROUND, and these are referred to as -ASYNCHRONOUS commands. The shell does not wait for the command to +executing the command in the "background", and these are referred to as +"asynchronous" commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (*note Job Control::), the standard input for asynchronous commands, in the absence of any explicit redirections, is redirected @@ -814,7 +907,8 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre substitution, arithmetic expansion, and quote removal (*note Shell Parameter Expansion::) before matching is attempted. Each PATTERN undergoes tilde expansion, parameter expansion, command - substitution, and arithmetic expansion. + substitution, arithmetic expansion, process substitution, and quote + removal. There may be an arbitrary number of 'case' clauses, each terminated by a ';;', ';&', or ';;&'. The first pattern that matches @@ -883,11 +977,11 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre (( EXPRESSION )) The arithmetic EXPRESSION is evaluated according to the rules - described below (*note 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 - let "EXPRESSION" - *Note Bash Builtins::, for a full description of the 'let' builtin. + described below (*note Shell Arithmetic::). The EXPRESSION + undergoes the same expansions as if it were within double quotes, + but double quote characters in EXPRESSION are not treated specially + are removed. If the value of the expression is non-zero, the + return status is 0; otherwise the return status is 1. '[[...]]' [[ EXPRESSION ]] @@ -895,12 +989,13 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre Return a status of 0 or 1 depending on the evaluation of the conditional expression EXPRESSION. Expressions are composed of the primaries described below in *note Bash Conditional Expressions::. - Word splitting and filename expansion are not performed on the - words between the '[[' and ']]'; tilde expansion, parameter and - variable expansion, arithmetic expansion, command substitution, - process substitution, and quote removal are performed. Conditional - operators such as '-f' must be unquoted to be recognized as - primaries. + The words between the '[[' and ']]' do not undergo word splitting + and filename expansion. The shell performs tilde expansion, + parameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal on those + words (the expansions that would occur if the words were enclosed + in double quotes). Conditional operators such as '-f' must be + unquoted to be recognized as primaries. When used with '[[', the '<' and '>' operators sort lexicographically using the current locale. @@ -913,67 +1008,92 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre 'shopt' in *note The Shopt Builtin::) is enabled, the match is performed without regard to the case of alphabetic characters. The return value is 0 if the string matches ('==') or does not match - ('!=') the pattern, and 1 otherwise. Any part of the pattern may - be quoted to force the quoted portion to be matched as a string. + ('!=') the pattern, and 1 otherwise. + + If you quote any part of the pattern, using any of the shell's + quoting mechanisms, the quoted portion is matched literally. This + means every character in the quoted portion matches itself, instead + of having any special pattern matching meaning. An additional binary operator, '=~', is available, with the same - precedence as '==' and '!='. When it is used, the string to the + precedence as '==' and '!='. When you use '=~', the string to the right of the operator is considered a POSIX extended regular - expression and matched accordingly (using the POSIX 'regcomp' and - 'regexec' interfaces usually described in regex(3)). The return - value is 0 if the string matches the pattern, and 1 otherwise. If - the regular expression is syntactically incorrect, the conditional - expression's return value is 2. If the 'nocasematch' shell option - (see the description of 'shopt' in *note The Shopt Builtin::) is - enabled, the match is performed without regard to the case of - alphabetic characters. Any part of the pattern may be quoted to - force the quoted portion to be matched as a string. Bracket - expressions in regular expressions must be treated carefully, since - normal quoting characters lose their meanings between brackets. If - the pattern is stored in a shell variable, quoting the variable - expansion forces the entire pattern to be matched as a string. + expression pattern and matched accordingly (using the POSIX + 'regcomp' and 'regexec' interfaces usually described in regex(3)). + The return value is 0 if the string matches the pattern, and 1 if + it does not. If the regular expression is syntactically incorrect, + the conditional expression returns 2. If the 'nocasematch' shell + option (see the description of 'shopt' in *note The Shopt + Builtin::) is enabled, the match is performed without regard to the + case of alphabetic characters. - The pattern will match if it matches any part of the string. - Anchor the pattern using the '^' and '$' regular expression - operators to force it to match the entire string. The array - variable 'BASH_REMATCH' records which parts of the string matched - the pattern. The element of 'BASH_REMATCH' with index 0 contains - the portion of the string matching the entire regular expression. - Substrings matched by parenthesized subexpressions within the - regular expression are saved in the remaining 'BASH_REMATCH' - indices. The element of 'BASH_REMATCH' with index N is the portion - of the string matching the Nth parenthesized subexpression. + You can quote any part of the pattern to force the quoted portion + to be matched literally instead of as a regular expression (see + above). If the pattern is stored in a shell variable, quoting the + variable expansion forces the entire pattern to be matched + literally. + + The pattern will match if it matches any part of the string. If + you want to force the pattern to match the entire string, anchor + the pattern using the '^' and '$' regular expression operators. For example, the following will match a line (stored in the shell - variable LINE) if there is a sequence of characters anywhere in the - value consisting of any number, including zero, of characters in - the 'space' character class, zero or one instances of 'a', then a - 'b': + variable 'line') if there is a sequence of characters anywhere in + the value consisting of any number, including zero, of characters + in the 'space' character class, immediately followed by zero or one + instances of 'a', then a 'b': + [[ $line =~ [[:space:]]*(a)?b ]] - That means values like 'aab' and ' aaaaaab' will match, as will a - line containing a 'b' anywhere in its value. + That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and ' + ab' will all match, as will a line containing a 'b' anywhere in its + value. + + If you want to match a character that's special to the regular + expression grammar ('^$|[]()\.*+?'), it has to be quoted to remove + its special meaning. This means that in the pattern 'xxx.txt', the + '.' matches any character in the string (its usual regular + expression meaning), but in the pattern '"xxx.txt"', it can only + match a literal '.'. + + Likewise, if you want to include a character in your pattern that + has a special meaning to the regular expression grammar, you must + make sure it's not quoted. If you want to anchor a pattern at the + beginning or end of the string, for instance, you cannot quote the + '^' or '$' characters using any form of shell quoting. + + If you want to match 'initial string' at the start of a line, the + following will work: + [[ $line =~ ^"initial string" ]] + but this will not: + [[ $line =~ "^initial string" ]] + because in the second example the '^' is quoted and doesn't have + its usual special meaning. + + It is sometimes difficult to specify a regular expression properly + without using quotes, or to keep track of the quoting used by + regular expressions while paying attention to shell quoting and the + shell's quote removal. Storing the regular expression in a shell + variable is often a useful way to avoid problems with quoting + characters that are special to the shell. For example, the + following is equivalent to the pattern used above: - Storing the regular expression in a shell variable is often a - useful way to avoid problems with quoting characters that are - special to the shell. It is sometimes difficult to specify a - regular expression literally without using quotes, or to keep track - of the quoting used by regular expressions while paying attention - to the shell's quote removal. Using a shell variable to store the - pattern decreases these problems. For example, the following is - equivalent to the above: pattern='[[:space:]]*(a)?b' [[ $line =~ $pattern ]] - If you want to match a character that's special to the regular - expression grammar, it has to be quoted to remove its special - meaning. This means that in the pattern 'xxx.txt', the '.' matches - any character in the string (its usual regular expression meaning), - but in the pattern '"xxx.txt"' it can only match a literal '.'. Shell programmers should take special care with backslashes, since - backslashes are used both by the shell and regular expressions to - remove the special meaning from the following character. The - following two sets of commands are _not_ equivalent: + backslashes are used by both the shell and regular expressions to + remove the special meaning from the following character. This + means that after the shell's word expansions complete (*note Shell + Expansions::), any backslashes remaining in parts of the pattern + that were originally not quoted can remove the special meaning of + pattern characters. If any part of the pattern is quoted, the + shell does its best to ensure that the regular expression treats + those remaining backslashes as literal, if they appeared in a + quoted portion. + + The following two sets of commands are _not_ equivalent: + pattern='\.' [[ . =~ $pattern ]] @@ -984,12 +1104,46 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre The first two matches will succeed, but the second two will not, because in the second two the backslash will be part of the pattern - to be matched. In the first two examples, the backslash removes - the special meaning from '.', so the literal '.' matches. If the + to be matched. In the first two examples, the pattern passed to + the regular expression parser is '\.'. The backslash removes the + special meaning from '.', so the literal '.' matches. In the + second two examples, the pattern passed to the regular expression + parser has the backslash quoted (e.g., '\\\.'), which will not + match the string, since it does not contain a backslash. If the string in the first examples were anything other than '.', say 'a', the pattern would not match, because the quoted '.' in the pattern loses its special meaning of matching any single character. + Bracket expressions in regular expressions can be sources of errors + as well, since characters that are normally special in regular + expressions lose their special meanings between brackets. However, + you can use bracket expressions to match special pattern characters + without quoting them, so they are sometimes useful for this + purpose. + + Though it might seem like a strange way to write it, the following + pattern will match a '.' in the string: + + [[ . =~ [.] ]] + + The shell performs any word expansions before passing the pattern + to the regular expression functions, so you can assume that the + shell's quoting takes precedence. As noted above, the regular + expression parser will interpret any unquoted backslashes remaining + in the pattern after shell expansion according to its own rules. + The intention is to avoid making shell programmers quote things + twice as much as possible, so shell quoting should be sufficient to + quote special pattern characters where that's necessary. + + The array variable 'BASH_REMATCH' records which parts of the string + matched the pattern. The element of 'BASH_REMATCH' with index 0 + contains the portion of the string matching the entire regular + expression. Substrings matched by parenthesized subexpressions + within the regular expression are saved in the remaining + 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N + is the portion of the string matching the Nth parenthesized + subexpression. + Expressions may be combined using the following operators, listed in decreasing order of precedence: @@ -1024,9 +1178,9 @@ list may be redirected to a single stream. '()' ( LIST ) - Placing a list of commands between parentheses causes a subshell - environment to be created (*note Command Execution Environment::), - and each of the commands in LIST to be executed in that subshell. + Placing a list of commands between parentheses forces the shell to + create a subshell (*note Command Execution Environment::), and each + of the commands in LIST is executed in that subshell environment. Since the LIST is executed in a subshell, variable assignments do not remain in effect after the subshell completes. @@ -1039,10 +1193,10 @@ list may be redirected to a single stream. In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The -braces are 'reserved words', so they must be separated from the LIST by -'blank's or other shell metacharacters. The parentheses are -'operators', and are recognized as separate tokens by the shell even if -they are not separated from the LIST by whitespace. +braces are reserved words, so they must be separated from the LIST by +'blank's or other shell metacharacters. The parentheses are operators, +and are recognized as separate tokens by the shell even if they are not +separated from the LIST by whitespace. The exit status of both of these constructs is the exit status of LIST. @@ -1058,29 +1212,51 @@ A coprocess is executed asynchronously in a subshell, as if the command had been terminated with the '&' control operator, with a two-way pipe established between the executing shell and the coprocess. - The format for a coprocess is: + The syntax for a coprocess is: + coproc [NAME] COMMAND [REDIRECTIONS] -This creates a coprocess named NAME. If NAME is not supplied, the -default name is COPROC. NAME must not be supplied if COMMAND is a -simple command (*note Simple Commands::); otherwise, it is interpreted -as the first word of the simple command. +This creates a coprocess named NAME. COMMAND may be either a simple +command (*note Simple Commands::) or a compound command (*note Compound +Commands::). NAME is a shell variable name. If NAME is not supplied, +the default name is 'COPROC'. + + The recommended form to use for a coprocess is + + coproc NAME { COMMAND; } + +This form is recommended because simple commands result in the coprocess +always being named 'COPROC', and it is simpler to use and more complete +than the other compound commands. + + There are other forms of coprocesses: + + coproc NAME COMPOUND-COMMAND + coproc COMPOUND-COMMAND + coproc SIMPLE-COMMAND + +If COMMAND is a compound command, NAME is optional. The word following +'coproc' determines whether that word is interpreted as a variable name: +it is interpreted as NAME if it is not a reserved word that introduces a +compound command. If COMMAND is a simple command, NAME is not allowed; +this is to avoid confusion between NAME and the first word of the simple +command. When the coprocess is executed, the shell creates an array variable -(*note Arrays::) named 'NAME' in the context of the executing shell. -The standard output of COMMAND is connected via a pipe to a file +(*note Arrays::) named NAME in the context of the executing shell. The +standard output of COMMAND is connected via a pipe to a file descriptor +in the executing shell, and that file descriptor is assigned to NAME[0]. +The standard input of COMMAND is connected via a pipe to a file descriptor in the executing shell, and that file descriptor is assigned -to 'NAME'[0]. The standard input of COMMAND is connected via a pipe to -a file descriptor in the executing shell, and that file descriptor is -assigned to 'NAME'[1]. This pipe is established before any redirections -specified by the command (*note Redirections::). The file descriptors -can be utilized as arguments to shell commands and redirections using -standard word expansions. Other than those created to execute command -and process substitutions, the file descriptors are not available in +to NAME[1]. This pipe is established before any redirections specified +by the command (*note Redirections::). The file descriptors can be +utilized as arguments to shell commands and redirections using standard +word expansions. Other than those created to execute command and +process substitutions, the file descriptors are not available in subshells. The process ID of the shell spawned to execute the coprocess is -available as the value of the variable 'NAME'_PID. The 'wait' builtin +available as the value of the variable 'NAME_PID'. The 'wait' builtin command may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the @@ -1105,88 +1281,9 @@ line, different ways to specify the input source, and so on). Parallel can replace 'xargs' or feed commands from its input sources to several different instances of Bash. - For a complete description, refer to the GNU Parallel documentation. -A few examples should provide a brief introduction to its use. - - For example, it is easy to replace 'xargs' to gzip all html files in -the current directory and its subdirectories: - find . -type f -name '*.html' -print | parallel gzip -If you need to protect special characters such as newlines in file -names, use find's '-print0' option and parallel's '-0' option. - - You can use Parallel to move files from the current directory when -the number of files is too large to process with one 'mv' invocation: - printf '%s\n' * | parallel mv {} destdir - - As you can see, the {} is replaced with each line read from standard -input. While using 'ls' will work in most instances, it is not -sufficient to deal with all filenames. 'printf' is a shell builtin, and -therefore is not subject to the kernel's limit on the number of -arguments to a program, so you can use '*' (but see below about the -'dotglob' shell option). If you need to accommodate special characters -in filenames, you can use - - printf '%s\0' * | parallel -0 mv {} destdir - -as alluded to above. - - This will run as many 'mv' commands as there are files in the current -directory. You can emulate a parallel 'xargs' by adding the '-X' -option: - printf '%s\0' * | parallel -0 -X mv {} destdir - - (You may have to modify the pattern if you have the 'dotglob' option -enabled.) - - GNU Parallel can replace certain common idioms that operate on lines -read from a file (in this case, filenames listed one per line): - while IFS= read -r x; do - do-something1 "$x" "config-$x" - do-something2 < "$x" - done < file | process-output - -with a more compact syntax reminiscent of lambdas: - cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" | - process-output - - Parallel provides a built-in mechanism to remove filename extensions, -which lends itself to batch file transformations or renaming: - ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}" -This will recompress all files in the current directory with names -ending in .gz using bzip2, running one job per CPU (-j+0) in parallel. -(We use 'ls' for brevity here; using 'find' as above is more robust in -the face of filenames containing unexpected characters.) Parallel can -take arguments from the command line; the above can also be written as - - parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz - - If a command generates output, you may want to preserve the input -order in the output. For instance, the following command - { - echo foss.org.my ; - echo debian.org ; - echo freenetproject.org ; - } | parallel traceroute -will display as output the traceroute invocation that finishes first. -Adding the '-k' option - { - echo foss.org.my ; - echo debian.org ; - echo freenetproject.org ; - } | parallel -k traceroute -will ensure that the output of 'traceroute foss.org.my' is displayed -first. - - Finally, Parallel can be used to run a sequence of shell commands in -parallel, similar to 'cat file | bash'. It is not uncommon to take a -list of filenames, create a series of shell commands to operate on them, -and feed that list of commands to a shell. Parallel can speed this up. -Assuming that 'file' contains a list of shell commands, one per line, - - parallel -j 10 < file - -will evaluate the commands using the shell (since no explicit command is -supplied as an argument), in blocks of ten shell jobs at a time. + For a complete description, refer to the GNU Parallel documentation, +which is available at +.  File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features @@ -1210,15 +1307,15 @@ new process is created to interpret them. This defines a shell function named FNAME. The reserved word 'function' is optional. If the 'function' reserved word is supplied, -the parentheses are optional. The BODY of the function is the compound -command COMPOUND-COMMAND (*note Compound Commands::). That command is -usually a LIST enclosed between { and }, but may be any compound command -listed above, with one exception: If the 'function' reserved word is -used, but the parentheses are not supplied, the braces are required. +the parentheses are optional. The "body" of the function is the +compound command COMPOUND-COMMAND (*note Compound Commands::). That +command is usually a LIST enclosed between { and }, but may be any +compound command listed above. If the 'function' reserved word is used, +but the parentheses are not supplied, the braces are recommended. COMPOUND-COMMAND is executed whenever FNAME is specified as the name of -a command. When the shell is in POSIX mode (*note Bash POSIX Mode::), -FNAME must be a valid shell NAME and may not be the same as one of the -special builtins (*note Special Builtins::). In default mode, a +a simple command. When the shell is in POSIX mode (*note Bash POSIX +Mode::), FNAME must be a valid shell name and may not be the same as one +of the special builtins (*note Special Builtins::). In default mode, a function name can be any unquoted shell word that does not contain '$'. Any redirections (*note Redirections::) associated with the shell function are performed when the function is executed. A function @@ -1281,7 +1378,7 @@ hides a global variable of the same name: references and assignments refer to the local variable, leaving the global variable unmodified. When the function returns, the global variable is once again visible. - The shell uses DYNAMIC SCOPING to control a variable's visibility + The shell uses "dynamic scoping" to control a variable's visibility within functions. With dynamic scoping, visible variables and their values are a result of the sequence of function calls that caused execution to reach the current function. The value of a variable that a @@ -1290,10 +1387,10 @@ that caller is the "global" scope or another shell function. This is also the value that a local variable declaration "shadows", and the value that is restored when the function returns. - For example, if a variable VAR is declared as local in function -FUNC1, and FUNC1 calls another function FUNC2, references to VAR made -from within FUNC2 will resolve to the local variable VAR from FUNC1, -shadowing any global variable named VAR. + For example, if a variable 'var' is declared as local in function +'func1', and 'func1' calls another function 'func2', references to 'var' +made from within 'func2' will resolve to the local variable 'var' from +'func1', shadowing any global variable named 'var'. The following script demonstrates this behavior. When executed, the script displays @@ -1328,7 +1425,8 @@ been shadowed will become visible. the 'declare' ('typeset') builtin command (*note Bash Builtins::). The '-F' option to 'declare' or 'typeset' will list the function names only (and optionally the source file and line number, if the 'extdebug' shell -option is enabled). Functions may be exported so that subshells +option is enabled). Functions may be exported so that child shell +processes (those created when executing a separate shell invocation) automatically have them defined with the '-f' option to the 'export' builtin (*note Bourne Shell Builtins::). @@ -1348,11 +1446,12 @@ File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: She * Positional Parameters:: The shell's command-line arguments. * Special Parameters:: Parameters denoted by special characters. -A PARAMETER is an entity that stores values. It can be a 'name', a -number, or one of the special characters listed below. A VARIABLE is a -parameter denoted by a 'name'. A variable has a VALUE and zero or more -ATTRIBUTES. Attributes are assigned using the 'declare' builtin command -(see the description of the 'declare' builtin in *note Bash Builtins::). +A "parameter" is an entity that stores values. It can be a 'name', a +number, or one of the special characters listed below. A "variable" is +a parameter denoted by a 'name'. A variable has a 'value' and zero or +more 'attributes'. Attributes are assigned using the 'declare' builtin +command (see the description of the 'declare' builtin in *note 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 @@ -1362,24 +1461,23 @@ the 'unset' builtin command. NAME=[VALUE] If VALUE is not given, the variable is assigned the null string. All VALUEs undergo tilde expansion, parameter and variable expansion, -command substitution, arithmetic expansion, and quote removal (detailed -below). If the variable has its 'integer' attribute set, then VALUE is -evaluated as an arithmetic expression even if the '$((...))' expansion -is not used (*note Arithmetic Expansion::). Word splitting is not -performed, with the exception of '"$@"' as explained below. Filename -expansion is not performed. Assignment statements may also appear as -arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly', -and 'local' builtin commands (DECLARATION commands). When in POSIX mode -(*note Bash POSIX Mode::), these builtins may appear in a command after -one or more instances of the 'command' builtin and retain these -assignment statement properties. +command substitution, arithmetic expansion, and quote removal (*note +Shell Parameter Expansion::). If the variable has its 'integer' +attribute set, then VALUE is evaluated as an arithmetic expression even +if the '$((...))' expansion is not used (*note Arithmetic Expansion::). +Word splitting and filename expansion are not performed. Assignment +statements may also appear as arguments to the 'alias', 'declare', +'typeset', 'export', 'readonly', and 'local' builtin commands +("declaration" commands). When in POSIX mode (*note Bash POSIX Mode::), +these builtins may appear in a command after one or more instances of +the 'command' builtin and retain these assignment statement properties. In the context where an assignment statement is assigning a value to a shell variable or array index (*note Arrays::), the '+=' operator can be used to append to or add to the variable's previous value. This includes arguments to builtin commands such as 'declare' that accept -assignment statements (DECLARATION commands). When '+=' is applied to a -variable for which the INTEGER attribute has been set, VALUE is +assignment statements (declaration commands). When '+=' is applied to a +variable for which the 'integer' attribute has been set, VALUE is evaluated as an arithmetic expression and added to the variable's current value, which is also evaluated. When '+=' is applied to an array variable using compound assignment (*note Arrays::), the @@ -1389,9 +1487,9 @@ maximum index (for indexed arrays), or added as additional key-value pairs in an associative array. When applied to a string-valued variable, VALUE is expanded and appended to the variable's value. - A variable can be assigned the NAMEREF attribute using the '-n' + A variable can be assigned the 'nameref' attribute using the '-n' option to the 'declare' or 'local' builtin commands (*note Bash -Builtins::) to create a NAMEREF, or a reference to another variable. +Builtins::) to create a "nameref", or a reference to another variable. This allows variables to be manipulated indirectly. Whenever the nameref variable is referenced, assigned to, unset, or has its attributes modified (other than using or changing the nameref attribute @@ -1401,9 +1499,9 @@ shell functions to refer to a variable whose name is passed as an argument to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 -inside the function creates a nameref variable REF whose value is the +inside the function creates a nameref variable 'ref' whose value is the variable name passed as the first argument. References and assignments -to REF, and changes to its attributes, are treated as references, +to 'ref', and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was passed as '$1'. @@ -1423,7 +1521,7 @@ File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up 3.4.1 Positional Parameters --------------------------- -A POSITIONAL PARAMETER is a parameter denoted by one or more digits, +A "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 'set' builtin command. Positional parameter 'N' may be @@ -1488,9 +1586,8 @@ only be referenced; assignment to them is not allowed. shell itself (such as the '-i' option). '$' - ($$) Expands to the process ID of the shell. In a '()' subshell, - it expands to the process ID of the invoking shell, not the - subshell. + ($$) Expands to the process ID of the shell. In a subshell, it + expands to the process ID of the invoking shell, not the subshell. '!' ($!) Expands to the process ID of the job most recently placed @@ -1544,13 +1641,13 @@ 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: PROCESS SUBSTITUTION. This is performed at the same time as -tilde, parameter, variable, and arithmetic expansion and command +available: "process substitution". This is performed at the same time +as tilde, parameter, variable, and arithmetic expansion and command substitution. After these expansions are performed, quote characters present in the -original word are removed unless they have been quoted themselves (QUOTE -REMOVAL). +original word are removed unless they have been quoted themselves +("quote removal"). Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions expand a @@ -1568,7 +1665,7 @@ File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell E --------------------- Brace expansion is a mechanism by which arbitrary strings may be -generated. This mechanism is similar to FILENAME EXPANSION (*note +generated. This mechanism is similar to "filename expansion" (*note Filename Expansion::), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional PREAMBLE, followed by either a series of comma-separated strings or a sequence @@ -1583,17 +1680,17 @@ are not sorted; left to right order is preserved. For example, ade ace abe A sequence expression takes the form '{X..Y[..INCR]}', where X and Y -are either integers or single characters, and INCR, an optional -increment, is an integer. When integers are supplied, the expression -expands to each number between X and Y, inclusive. Supplied integers -may be prefixed with '0' to force each term to have the same width. -When either X or Y begins with a zero, the shell attempts to force all -generated terms to contain the same number of digits, zero-padding where -necessary. When characters are supplied, the expression expands to each -character lexicographically between X and Y, inclusive, using the -default C locale. Note that both X and Y must be of the same type. -When the increment is supplied, it is used as the difference between -each term. The default increment is 1 or -1 as appropriate. +are either integers or letters, and INCR, an optional increment, is an +integer. When integers are supplied, the expression expands to each +number between X and Y, inclusive. Supplied integers may be prefixed +with '0' to force each term to have the same width. When either X or Y +begins with a zero, the shell attempts to force all generated terms to +contain the same number of digits, zero-padding where necessary. When +letters are supplied, the expression expands to each character +lexicographically between X and Y, inclusive, using the default C +locale. Note that both X and Y must be of the same type (integer or +letter). When the increment is supplied, it is used as the difference +between each term. The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It @@ -1623,9 +1720,9 @@ File: bashref.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, P If a word begins with an unquoted tilde character ('~'), all of the characters up to the first unquoted slash (or all characters, if there -is no unquoted slash) are considered a TILDE-PREFIX. If none of the +is no unquoted slash) are considered a "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 LOGIN NAME. +tilde-prefix following the tilde are treated as a possible "login name". If this login name is the null string, the tilde is replaced with the value of the 'HOME' shell variable. If 'HOME' is unset, the home directory of the user executing the shell is substituted instead. @@ -1681,7 +1778,7 @@ assigns the expanded value. Bash also performs tilde expansion on words satisfying the conditions of variable assignments (*note Shell Parameters::) when they appear as arguments to simple commands. Bash does not do this, except for the -DECLARATION commands listed above, when in POSIX mode. +declaration commands listed above, when in POSIX mode.  File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions @@ -1708,7 +1805,7 @@ parameter with more than one digit, or when PARAMETER is followed by a character that is not to be interpreted as part of its name. If the first character of PARAMETER is an exclamation point (!), and -PARAMETER is not a NAMEREF, it introduces a level of indirection. Bash +PARAMETER is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of PARAMETER as the new PARAMETER; this is then expanded and that value is used in the rest of the expansion, rather than the expansion of the original PARAMETER. @@ -1734,22 +1831,39 @@ omitted, the operator tests only for existence. If PARAMETER is unset or null, the expansion of WORD is substituted. Otherwise, the value of PARAMETER is substituted. + $ v=123 + $ echo ${v-unset} + 123 + '${PARAMETER:=WORD}' If PARAMETER is unset or null, the expansion of WORD is assigned to PARAMETER. The value of PARAMETER is then substituted. Positional parameters and special parameters may not be assigned to in this way. + $ var= + $ : ${var:=DEFAULT} + $ echo $var + DEFAULT + '${PARAMETER:?WORD}' If PARAMETER is null or unset, the expansion of WORD (or a message to that effect if WORD is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of PARAMETER is substituted. + $ var= + $ : ${var:?var is unset or null} + bash: var: var is unset or null + '${PARAMETER:+WORD}' If PARAMETER is null or unset, nothing is substituted, otherwise the expansion of WORD is substituted. + $ var=123 + $ echo ${var:+var is set and not null} + var is set and not null + '${PARAMETER:OFFSET}' '${PARAMETER:OFFSET:LENGTH}' This is referred to as Substring Expansion. It expands to up to @@ -1940,26 +2054,72 @@ omitted, the operator tests only for existence. array in turn, and the expansion is the resultant list. '${PARAMETER/PATTERN/STRING}' - +'${PARAMETER//PATTERN/STRING}' +'${PARAMETER/#PATTERN/STRING}' +'${PARAMETER/%PATTERN/STRING}' The PATTERN is expanded to produce a pattern just as in filename expansion. PARAMETER is expanded and the longest match of PATTERN - against its value is replaced with STRING. The match is performed - according to the rules described below (*note Pattern Matching::). - If PATTERN begins with '/', all matches of PATTERN are replaced - with STRING. Normally only the first match is replaced. If - PATTERN begins with '#', it must match at the beginning of the - expanded value of PARAMETER. If PATTERN begins with '%', it must - match at the end of the expanded value of PARAMETER. If STRING is - null, matches of PATTERN are deleted and the '/' following PATTERN - may be omitted. If the 'nocasematch' shell option (see the - description of 'shopt' in *note The Shopt Builtin::) is enabled, - the match is performed without regard to the case of alphabetic - characters. If PARAMETER is '@' or '*', the substitution operation - is applied to each positional parameter in turn, and the expansion - is the resultant list. If PARAMETER is an array variable - subscripted with '@' or '*', the substitution operation is applied - to each member of the array in turn, and the expansion is the - resultant list. + against its value is replaced with STRING. STRING undergoes tilde + expansion, parameter and variable expansion, arithmetic expansion, + command and process substitution, and quote removal. The match is + performed according to the rules described below (*note Pattern + Matching::). + + In the first form above, only the first match is replaced. If + there are two slashes separating PARAMETER and PATTERN (the second + form above), all matches of PATTERN are replaced with STRING. If + PATTERN is preceded by '#' (the third form above), it must match at + the beginning of the expanded value of PARAMETER. If PATTERN is + preceded by '%' (the fourth form above), it must match at the end + of the expanded value of PARAMETER. If the expansion of STRING is + null, matches of PATTERN are deleted. If STRING is null, matches + of PATTERN are deleted and the '/' following PATTERN may be + omitted. + + If the 'patsub_replacement' shell option is enabled using 'shopt', + any unquoted instances of '&' in STRING are replaced with the + matching portion of PATTERN. This is intended to duplicate a + common 'sed' idiom. Backslash is used to quote '&' in STRING; the + backslash is removed in order to permit a literal '&' in the + replacement string. Pattern substitution performs the check for + '&' after expanding STRING, so users should take care to quote + backslashes intended to escape the '&' and inhibit replacement so + they survive any quote removal performed by the expansion of + STRING. For instance, + + var=abcdef + echo ${var/abc/& } + echo "${var/abc/& }" + echo ${var/abc/"& "} + + will display three lines of "abc def", while + + var=abcdef + echo ${var/abc/\& } + echo "${var/abc/\& }" + echo ${var/abc/"\& "} + + will display two lines of "abc def" and a third line of "& def". + The first two are replaced because the backslash is removed by + quote removal performed during the expansion of STRING (the + expansion is performed in a context that doesn't take any enclosing + double quotes into account, as with other word expansions). In the + third case, the double quotes affect the expansion of '\&', and, + because '&' is not one of the characters for which backslash is + special in double quotes, the backslash survives the expansion, + inhibits the replacement, but is removed because it is treated + specially. One could use '\\&', unquoted, as the replacement + string to achive the same effect. It should rarely be necessary to + enclose only STRING in double quotes. + + If the 'nocasematch' shell option (see the description of 'shopt' + in *note The Shopt Builtin::) is enabled, the match is performed + without regard to the case of alphabetic characters. If PARAMETER + is '@' or '*', the substitution operation is applied to each + positional parameter in turn, and the expansion is the resultant + list. If PARAMETER is an array variable subscripted with '@' or + '*', the substitution operation is applied to each member of the + array in turn, and the expansion is the resultant list. '${PARAMETER^PATTERN}' '${PARAMETER^^PATTERN}' @@ -1970,18 +2130,22 @@ omitted, the operator tests only for existence. filename expansion. Each character in the expanded value of PARAMETER is tested against PATTERN, and, if it matches the pattern, its case is converted. The pattern should not attempt to - match more than one character. The '^' operator converts lowercase - letters matching PATTERN to uppercase; the ',' operator converts - matching uppercase letters to lowercase. The '^^' and ',,' - expansions convert each matched character in the expanded value; - the '^' and ',' expansions match and convert only the first - character in the expanded value. If PATTERN is omitted, it is - treated like a '?', which matches every character. If PARAMETER is - '@' or '*', the case modification operation is applied to each - positional parameter in turn, and the expansion is the resultant - list. If PARAMETER is an array variable subscripted with '@' or - '*', the case modification operation is applied to each member of - the array in turn, and the expansion is the resultant list. + match more than one character. + + The '^' operator converts lowercase letters matching PATTERN to + uppercase; the ',' operator converts matching uppercase letters to + lowercase. The '^^' and ',,' expansions convert each matched + character in the expanded value; the '^' and ',' expansions match + and convert only the first character in the expanded value. If + PATTERN is omitted, it is treated like a '?', which matches every + character. + + If PARAMETER is '@' or '*', the case modification operation is + applied to each positional parameter in turn, and the expansion is + the resultant list. If PARAMETER is an array variable subscripted + with '@' or '*', the case modification operation is applied to each + member of the array in turn, and the expansion is the resultant + list. '${PARAMETER@OPERATOR}' The expansion is either a transformation of the value of PARAMETER @@ -2021,6 +2185,10 @@ omitted, the operator tests only for existence. 'a' The expansion is a string consisting of flag values representing PARAMETER's attributes. + 'k' + Like the 'K' transformation, but expands the keys and values + of indexed and associative arrays to separate words after word + splitting. If PARAMETER is '@' or '*', the operation is applied to each positional parameter in turn, and the expansion is the resultant @@ -2075,12 +2243,12 @@ is: $(( EXPRESSION )) - The expression is treated as if it were within double quotes, but a -double quote inside the parentheses is not treated specially. All -tokens in the expression undergo parameter and variable expansion, -command substitution, and quote removal. The result is treated as the -arithmetic expression to be evaluated. Arithmetic expansions may be -nested. + The EXPRESSION undergoes the same expansions as if it were within +double quotes, but double quote characters in EXPRESSION are not treated +specially and are removed. All tokens in the expression undergo +parameter and variable expansion, command substitution, and quote +removal. The result is treated as the arithmetic expression to be +evaluated. Arithmetic expansions may be nested. The evaluation is performed according to the rules listed below (*note Shell Arithmetic::). If the expression is invalid, Bash prints a @@ -2175,9 +2343,12 @@ characters. When a pattern is used for filename expansion, the character '.' at the start of a filename or immediately following a slash must be matched -explicitly, unless the shell option 'dotglob' is set. The filenames '.' -and '..' must always be matched explicitly, even if 'dotglob' is set. -In other cases, the '.' character is not treated specially. +explicitly, unless the shell option 'dotglob' is set. In order to match +the filenames '.' and '..', the pattern must begin with '.' (for +example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell +option is enabled, the filenames '.' and '..' are never matched, even if +the pattern begins with a '.'. When not matching filenames, the '.' +character is not treated specially. When matching a filename, the slash character must always be matched explicitly by a slash in the pattern, but in other matching contexts it @@ -2185,8 +2356,8 @@ can be matched by a special pattern character as described below (*note Pattern Matching::). See the description of 'shopt' in *note The Shopt Builtin::, for a -description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob' -options. +description of the 'nocaseglob', 'nullglob', 'globskipdots', 'failglob', +and 'dotglob' options. The 'GLOBIGNORE' shell variable may be used to restrict the set of file names matching a pattern. If 'GLOBIGNORE' is set, each matching @@ -2245,7 +2416,7 @@ characters must be quoted if they are to be matched literally. setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the value 'C', or enable the 'globasciiranges' shell option. - Within '[' and ']', CHARACTER CLASSES can be specified using the + Within '[' and ']', "character classes" can be specified using the syntax '[:'CLASS':]', where CLASS is one of the following classes defined in the POSIX standard: alnum alpha ascii blank cntrl digit graph lower @@ -2254,8 +2425,8 @@ characters must be quoted if they are to be matched literally. The 'word' character class matches letters, digits, and the character '_'. - Within '[' and ']', an EQUIVALENCE CLASS can be specified using the - syntax '[='C'=]', which matches all characters with the same + Within '[' and ']', an "equivalence class" can be specified using + the syntax '[='C'=]', which matches all characters with the same collation weight (as defined by the current locale) as the character C. @@ -2263,10 +2434,12 @@ characters must be quoted if they are to be matched literally. symbol SYMBOL. If the 'extglob' shell option is enabled using the 'shopt' builtin, -several extended pattern matching operators are recognized. In the -following description, a PATTERN-LIST is a list of one or more patterns -separated by a '|'. Composite patterns may be formed using one or more -of the following sub-patterns: +the shell recognizes several extended pattern matching operators. In +the following description, a PATTERN-LIST is a list of one or more +patterns separated by a '|'. When matching filenames, the 'dotglob' +shell option determines the set of filenames that are tested, as +described above. Composite patterns may be formed using one or more of +the following sub-patterns: '?(PATTERN-LIST)' Matches zero or one occurrence of the given patterns. @@ -2283,6 +2456,14 @@ of the following sub-patterns: '!(PATTERN-LIST)' Matches anything except one of the given patterns. + When matching filenames, the 'dotglob' shell option determines the +set of filenames that are tested: when 'dotglob' is enabled, the set of +filenames includes all files beginning with '.', but the filenames '.' +and '..' must be matched by a pattern or sub-pattern that begins with a +dot; when it is disabled, the set does not include any filenames +beginning with "." unless the pattern or sub-pattern begins with a '.'. +As above, '.' only has a special meaning when matching filenames. + Complicated extended pattern matching against long strings is slow, especially when the patterns contain alternations and the strings contain multiple matches. Using separate matches against shorter @@ -2305,8 +2486,8 @@ File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell 3.6 Redirections ================ -Before a command is executed, its input and output may be REDIRECTED -using a special notation interpreted by the shell. Redirection allows +Before a command is executed, its input and output may be "redirected" +using a special notation interpreted by the shell. "Redirection" allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2322,7 +2503,8 @@ file descriptor greater than 10 and assign it to {VARNAME}. If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines the file descriptor to close. If {VARNAME} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor's lifetime manually. +the file descriptor's lifetime manually. The 'varredir_close' shell +option manages this behavior (*note The Shopt Builtin::). In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is '<', the @@ -2584,11 +2766,13 @@ following order. expansion, and quote removal before being assigned to the variable. 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. +current shell environment. In the case of such a command (one that +consists only of assignment statements and redirections), assignment +statements are performed before redirections. 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 @@ -2642,8 +2826,8 @@ taken. 5. 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 - SHELL SCRIPT and the shell executes it as described in *note Shell - Scripts::. + "shell script" and the shell executes it as described in *note + Shell Scripts::. 6. If the command was not begun asynchronously, the shell waits for the command to complete and collects its exit status. @@ -2654,7 +2838,8 @@ File: bashref.info, Node: Command Execution Environment, Next: Environment, P 3.7.3 Command Execution Environment ----------------------------------- -The shell has an EXECUTION ENVIRONMENT, which consists of the following: +The shell has an "execution environment", which consists of the +following: * open files inherited by the shell at invocation, as modified by redirections supplied to the 'exec' builtin @@ -2705,6 +2890,8 @@ inherited from the shell. A command invoked in this separate environment cannot affect the shell's execution environment. + A "subshell" is a copy of the shell process. + Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the @@ -2729,12 +2916,12 @@ File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Execu ----------------- When a program is invoked it is given an array of strings called the -ENVIRONMENT. This is a list of name-value pairs, of the form +"environment". This is a list of name-value pairs, of the form '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 EXPORT to child +for each name found, automatically marking it for 'export' to child processes. Executed commands inherit the environment. The 'export' and 'declare -x' commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the @@ -2765,11 +2952,11 @@ File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: ----------------- The exit status of an executed command is the value returned by the -WAITPID system call or equivalent function. Exit statuses fall between -0 and 255, though, as explained below, the shell may use values above -125 specially. Exit statuses from shell builtins and compound commands -are also limited to this range. Under certain circumstances, the shell -will use special values to indicate specific failure modes. +'waitpid' system call or equivalent function. Exit statuses fall +between 0 and 255, though, as explained below, the shell may use values +above 125 specially. Exit statuses from shell builtins and compound +commands are also limited to this range. Under certain circumstances, +the shell will use special values to indicate specific failure modes. For the shell's purposes, a command which exits with a zero exit status has succeeded. A non-zero exit status indicates failure. This @@ -2795,6 +2982,9 @@ conditional and list constructs. All builtins return an exit status of 2 to indicate incorrect usage, generally invalid options or missing arguments. + The exit status of the last command is available in the special +parameter $? (*note Special Parameters::). +  File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands @@ -2835,6 +3025,33 @@ the 'wait' builtin, the reception of a signal for which a trap has been set will cause the 'wait' builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. + When job control is not enabled, and Bash is waiting for a foreground +command to complete, the shell receives keyboard-generated signals such +as 'SIGINT' (usually generated by '^C') that users commonly intend to +send to that command. This happens because the shell and the command +are in the same process group as the terminal, and '^C' sends 'SIGINT' +to all processes in that process group. See *note Job Control::, for a +more in-depth discussion of process groups. + + When Bash is running without job control enabled and receives +'SIGINT' while waiting for a foreground command, it waits until that +foreground command terminates and then decides what to do about the +'SIGINT': + + 1. If the command terminates due to the 'SIGINT', Bash concludes that + the user meant to end the entire script, and acts on the 'SIGINT' + (e.g., by running a 'SIGINT' trap or exiting itself); + + 2. If the pipeline does not terminate due to 'SIGINT', the program + handled the 'SIGINT' itself and did not treat it as a fatal signal. + In that case, Bash does not treat 'SIGINT' as a fatal signal, + either, instead assuming that the 'SIGINT' was used as part of the + program's normal operation (e.g., 'emacs' uses it to abort editing + commands) or deliberately discarded. However, Bash will run any + trap set on 'SIGINT', as it does with any other trapped signal it + receives while it is waiting for the foreground command to + complete, for compatibility. +  File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features @@ -2857,8 +3074,8 @@ parameters are unset. A shell script may be made executable by using the 'chmod' command to turn on the execute bit. When Bash finds such a file while searching -the '$PATH' for a command, it spawns a subshell to execute it. In other -words, executing +the '$PATH' for a command, it creates a new instance of itself to +execute it. In other words, executing filename ARGUMENTS is equivalent to executing bash filename ARGUMENTS @@ -2962,19 +3179,19 @@ standard. Read and execute commands from the FILENAME argument in the current shell context. If FILENAME does not contain a slash, the 'PATH' - variable is used to find FILENAME. When Bash is not in POSIX mode, - the current directory is searched if FILENAME is not found in - '$PATH'. If any ARGUMENTS are supplied, they become the positional - parameters when FILENAME is executed. Otherwise the positional - parameters are unchanged. If the '-T' option is enabled, 'source' - inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string - is saved and restored around the call to 'source', and 'source' - unsets the 'DEBUG' trap while it executes. If '-T' is not set, and - the sourced file changes the 'DEBUG' trap, the new value is - retained when 'source' completes. The return status is the exit - status of the last command executed, or zero if no commands are - executed. If FILENAME is not found, or cannot be read, the return - status is non-zero. This builtin is equivalent to 'source'. + variable is used to find FILENAME, but FILENAME does not need to be + executable. When Bash is not in POSIX mode, the current directory + is searched if FILENAME is not found in '$PATH'. If any ARGUMENTS + are supplied, they become the positional parameters when FILENAME + is executed. Otherwise the positional parameters are unchanged. + If the '-T' option is enabled, '.' inherits any trap on 'DEBUG'; if + it is not, any 'DEBUG' trap string is saved and restored around the + call to '.', and '.' unsets the 'DEBUG' trap while it executes. If + '-T' is not set, and the sourced file changes the 'DEBUG' trap, the + new value is retained when '.' completes. The return status is the + exit status of the last command executed, or zero if no commands + are executed. If FILENAME is not found, or cannot be read, the + return status is non-zero. This builtin is equivalent to 'source'. 'break' break [N] @@ -2988,10 +3205,9 @@ standard. cd [-L|[-P [-e]] [-@] [DIRECTORY] Change the current working directory to DIRECTORY. If DIRECTORY is - not supplied, the value of the 'HOME' shell variable is used. Any - additional arguments following DIRECTORY are ignored. If the shell - variable 'CDPATH' exists, it is used as a search path: each - directory name in 'CDPATH' is searched for DIRECTORY, with + not supplied, the value of the 'HOME' shell variable is used. If + the shell variable 'CDPATH' exists, it is used as a search path: + each directory name in 'CDPATH' is searched for DIRECTORY, with alternative directory names in 'CDPATH' separated by a colon (':'). If DIRECTORY begins with a slash, 'CDPATH' is not used. @@ -3022,6 +3238,11 @@ standard. absolute pathname of the new working directory is written to the standard output. + If the directory change is successful, 'cd' sets the value of the + 'PWD' environment variable to the new directory name, and sets the + 'OLDPWD' environment variable to the value of the current working + directory before the change. + The return status is zero if the directory is successfully changed, non-zero otherwise. @@ -3073,7 +3294,7 @@ standard. Mark each NAME to be passed to child processes in the environment. If the '-f' option is supplied, the NAMEs refer to shell functions; otherwise the names refer to shell variables. The '-n' option - means to no longer mark each NAME for export. If no NAMES are + means to no longer mark each NAME for export. If no NAMEs are supplied, or if the '-p' option is given, a list of names of all exported variables is displayed. The '-p' option displays output in a form that may be reused as input. If a variable name is @@ -3277,10 +3498,16 @@ standard. 4. Otherwise, the expression is false. 4 arguments - If the first argument is '!', 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. + The following conditions are applied in the order listed. + + 1. If the first argument is '!', the result is the negation + of the three-argument expression composed of the + remaining arguments. + 2. If the first argument is exactly '(' and the fourth + argument is exactly ')', the result is the two-argument + test of the second and third arguments. + 3. Otherwise, the expression is parsed and evaluated + according to precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence @@ -3369,7 +3596,7 @@ standard. given, each NAME refers to a shell variable and that variable is removed. If the '-f' option is given, the NAMEs refer to shell functions, and the function definition is removed. If the '-n' - option is supplied, and NAME is a variable with the NAMEREF + option is supplied, and NAME is a variable with the 'nameref' attribute, NAME will be unset rather than the variable it references. '-n' has no effect if the '-f' option is supplied. If no options are supplied, each NAME refers to a variable; if there @@ -3377,7 +3604,8 @@ standard. unset. Readonly variables and functions may not be unset. Some shell variables lose their special behavior if they are unset; such behavior is noted in the description of the individual variables. - The return status is zero unless a NAME is readonly. + The return status is zero unless a NAME is readonly or may not be + unset.  File: bashref.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands @@ -3406,6 +3634,7 @@ standard. bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND + bind READLINE-COMMAND-LINE Display current Readline (*note Command Line Editing::) key and function bindings, bind a key sequence to a Readline function or @@ -3470,10 +3699,13 @@ standard. 'READLINE_LINE' variable to the contents of the Readline line buffer and the 'READLINE_POINT' and 'READLINE_MARK' variables to the current location of the insertion point and the saved - insertion point (the MARK), respectively. If the executed - command changes the value of any of 'READLINE_LINE', - 'READLINE_POINT', or 'READLINE_MARK', those new values will be - reflected in the editing state. + insertion point (the MARK), respectively. The shell assigns + any numeric argument the user supplied to the + 'READLINE_ARGUMENT' variable. If there was no argument, that + variable is not set. If the executed command changes the + value of any of 'READLINE_LINE', 'READLINE_POINT', or + 'READLINE_MARK', those new values will be reflected in the + editing state. '-X' List all key sequences bound to shell commands and the @@ -3556,7 +3788,7 @@ standard. It is ignored in all other cases. The '-I' option causes local variables to inherit the attributes - (except the NAMEREF attribute) and value of any existing variable + (except the 'nameref' attribute) and value of any existing variable with the same NAME at a surrounding scope. If there is no existing variable, the local variable is initially unset. @@ -3583,7 +3815,7 @@ standard. attribute is disabled. '-n' - Give each NAME the NAMEREF attribute, making it a name + Give each NAME the 'nameref' attribute, making it a name reference to another variable. That other variable is defined by the value of NAME. All references, assignments, and attribute modifications to NAME, except for those using or @@ -3626,7 +3858,7 @@ standard. 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 (*note Arrays::), one of the - NAMES is not a valid shell variable name, an attempt is made to + 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 '-f'. @@ -3699,13 +3931,20 @@ standard. The '-f' option means to load the new builtin command NAME from shared object FILENAME, on systems that support dynamic loading. - The '-d' option will delete a builtin loaded with '-f'. + Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a + colon-separated list of directories in which to search for + FILENAME. The default is system-dependent. The '-d' option will + delete a builtin loaded with '-f'. If there are no options, a list of the shell builtins is displayed. The '-s' option restricts 'enable' to the POSIX special builtins. If '-s' is used with '-f', the new builtin becomes a special builtin (*note Special Builtins::). + If no options are supplied and a NAME is not a shell builtin, + 'enable' will attempt to load NAME from a shared object named NAME, + as if the command were 'enable -f NAME NAME'. + The return status is zero unless a NAME is not a shell builtin or there is an error loading a new builtin from a shared object. @@ -3826,6 +4065,9 @@ standard. '%q' Causes 'printf' to output the corresponding ARGUMENT in a format that can be reused as shell input. + '%Q' + like '%q', but applies any supplied precision to the ARGUMENT + before quoting it. '%(DATEFMT)T' Causes 'printf' to output the date-time string resulting from using DATEFMT as a format string for 'strftime'(3). The @@ -3934,8 +4176,9 @@ standard. partial input read into the specified variable NAME. If TIMEOUT is 0, 'read' returns immediately, without trying to read any data. The exit status is 0 if input is available on - the specified file descriptor, non-zero otherwise. The exit - status is greater than 128 if the timeout is exceeded. + the specified file descriptor, or the read will return EOF, + non-zero otherwise. The exit status is greater than 128 if + the timeout is exceeded. '-u FD' Read input from file descriptor FD. @@ -3991,7 +4234,7 @@ standard. If the '-f' option is used, 'type' does not attempt to find shell functions, as with the 'command' builtin. - The return status is zero if all of the NAMES are found, non-zero + The return status is zero if all of the NAMEs are found, non-zero if any are not found. 'typeset' @@ -4135,8 +4378,8 @@ allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. 'set' - set [--abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [ARGUMENT ...] - set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [ARGUMENT ...] + set [-abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [--] [-] [ARGUMENT ...] + set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [--] [-] [ARGUMENT ...] If no options or arguments are supplied, 'set' displays the names and values of all shell variables and functions, sorted according @@ -4317,14 +4560,19 @@ parameters, or to display the names and values of shell variables. causes the effective user and group ids to be set to the real user and group ids. + '-r' + Enable restricted shell mode. This option cannot be unset + once it has been set. + '-t' Exit after reading and executing one command. '-u' Treat unset variables and parameters other than the special - parameters '@' or '*' as an error when performing parameter - expansion. An error message will be written to the standard - error, and a non-interactive shell will exit. + parameters '@' or '*', or array variables subscripted with '@' + or '*', as an error when performing parameter expansion. An + error message will be written to the standard error, and a + non-interactive shell will exit. '-v' Print shell input lines as they are read. @@ -4421,7 +4669,7 @@ This builtin allows you to change additional shell optional behavior. option is used, those available with the '-o' option to the 'set' builtin command (*note The Set Builtin::). With no options, or with the '-p' option, a list of all settable options is displayed, - with an indication of whether or not each is set; if OPTNAMES are + with an indication of whether or not each is set; if OPTNAMEs are supplied, the output is restricted to those options. The '-p' option causes output to be displayed in a form that may be reused as input. Other options have the following meanings: @@ -4435,7 +4683,7 @@ This builtin allows you to change additional shell optional behavior. '-q' Suppresses normal output; the return status indicates whether the OPTNAME is set or unset. If multiple OPTNAME arguments - are given with '-q', the return status is zero if all OPTNAMES + are given with '-q', the return status is zero if all OPTNAMEs are enabled; non-zero otherwise. '-o' @@ -4448,7 +4696,7 @@ This builtin allows you to change additional shell optional behavior. Unless otherwise noted, the 'shopt' options are disabled (off) by default. - The return status when listing options is zero if all OPTNAMES are + The return status when listing options is zero if all OPTNAMEs are enabled, non-zero otherwise. When setting or unsetting options, the return status is zero unless an OPTNAME is not a valid shell option. @@ -4616,6 +4864,11 @@ This builtin allows you to change additional shell optional behavior. upper-case and lower-case ASCII characters will collate together. + 'globskipdots' + If set, filename expansion will never match the filenames '.' + and '..', even if the pattern begins with a '.'. This option + is enabled by default. + 'globstar' If set, the pattern '**' used in a filename expansion context will match all files and zero or more directories and @@ -4675,7 +4928,7 @@ This builtin allows you to change additional shell optional behavior. 'localvar_inherit' If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope - before any new value is assigned. The NAMEREF attribute is + before any new value is assigned. The 'nameref' attribute is not inherited. 'localvar_unset' @@ -4706,14 +4959,26 @@ This builtin allows you to change additional shell optional behavior. 'nocasematch' If set, Bash matches patterns in a case-insensitive fashion when performing matching while executing 'case' or '[[' - conditional commands, when performing pattern substitution - word expansions, or when filtering possible completions as - part of programmable completion. + conditional commands (*note Conditional Constructs::, when + performing pattern substitution word expansions, or when + filtering possible completions as part of programmable + completion. + + 'noexpand_translation' + If set, Bash encloses the translated results of $"..." + quoting in single quotes instead of double quotes. If the + string is not translated, this has no effect. 'nullglob' If set, Bash allows filename patterns which match no files to expand to a null string, rather than themselves. + 'patsub_replacement' + If set, Bash expands occurrences of '&' in the replacement + string of pattern substitution to the text matched by the + pattern, as described above (*note Shell Parameter + Expansion::). This option is enabled by default. + 'progcomp' If set, the programmable completion facilities (*note Programmable Completion::) are enabled. This option is @@ -4745,9 +5010,15 @@ This builtin allows you to change additional shell optional behavior. parameters. 'sourcepath' - If set, the 'source' builtin uses the value of 'PATH' to find - the directory containing the file supplied as an argument. - This option is enabled by default. + If set, the '.' ('source') builtin uses the value of 'PATH' to + find the directory containing the file supplied as an + argument. This option is enabled by default. + + 'varredir_close' + If set, the shell automatically closes file descriptors + assigned using the '{varname}' redirection syntax (*note + Redirections::) instead of leaving them open when the command + completes. 'xpg_echo' If set, the 'echo' builtin expands backslash-escape sequences @@ -4980,7 +5251,7 @@ Variables::). 'BASH_LINENO' An array variable whose members are the line numbers in source - files where each corresponding member of FUNCNAME was invoked. + files where each corresponding member of 'FUNCNAME' was invoked. '${BASH_LINENO[$i]}' is the line number in the source file ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or '${BASH_LINENO[$i-1]}' if referenced within another shell @@ -5017,10 +5288,10 @@ Variables::). to the array members are as follows: 'BASH_VERSINFO[0]' - The major version number (the RELEASE). + The major version number (the "release"). 'BASH_VERSINFO[1]' - The minor version number (the VERSION). + The minor version number (the "version"). 'BASH_VERSINFO[2]' The patch level. @@ -5029,7 +5300,7 @@ Variables::). The build version. 'BASH_VERSINFO[4]' - The release status (e.g., BETA1). + The release status (e.g., 'beta1'). 'BASH_VERSINFO[5]' The value of 'MACHTYPE'. @@ -5082,12 +5353,12 @@ Variables::). 'COMP_TYPE' Set to an integer value corresponding to the type of completion - attempted that caused a completion function to be called: TAB, for - normal completion, '?', for listing completions after successive - tabs, '!', for listing alternatives on partial word completion, - '@', to list completions if the word is not unmodified, or '%', for - menu completion. This variable is available only in shell - functions and external commands invoked by the programmable + attempted that caused a completion function to be called: , + for normal completion, '?', for listing completions after + successive tabs, '!', for listing alternatives on partial word + completion, '@', to list completions if the word is not unmodified, + or '%', for menu completion. This variable is available only in + shell functions and external commands invoked by the programmable completion facilities (*note Programmable Completion::). 'COMP_KEY' @@ -5141,16 +5412,16 @@ Variables::). Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity (see the documentation for the C library - function TIME for the definition of Epoch). Assignments to + function 'time' for the definition of Epoch). Assignments to 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses its special properties, even if it is subsequently reset. 'EPOCHSECONDS' Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch (see the documentation for the C - library function TIME for the definition of Epoch). Assignments to - 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it loses - its special properties, even if it is subsequently reset. + library function 'time' for the definition of Epoch). Assignments + to 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it + loses its special properties, even if it is subsequently reset. 'EUID' The numeric effective user id of the current user. This variable @@ -5217,7 +5488,7 @@ Variables::). 'histchars' Up to three characters which control history expansion, quick substitution, and tokenization (*note History Interaction::). The - first character is the HISTORY EXPANSION character, that is, the + first character is the "history expansion" character, that is, the character which signifies the start of a history expansion, normally '!'. The second character is the character which signifies 'quick substitution' when seen as the first character on @@ -5295,7 +5566,7 @@ Variables::). 'HISTTIMEFORMAT' If this variable is set and not null, its value is used as a format - string for STRFTIME to print the time stamp associated with each + string for 'strftime' to print the time stamp associated with each history entry displayed by the 'history' builtin. If this variable is set, time stamps are written to the history file so they may be preserved across shell sessions. This uses the history comment @@ -5449,7 +5720,7 @@ Variables::). with '#? ' 'PS4' - The value of this parameter is expanded like PS1 and the expanded + The value of this parameter is expanded like 'PS1' and the expanded value is the prompt printed before the command line is echoed when the '-x' option is set (*note The Set Builtin::). The first character of the expanded value is replicated multiple times, as @@ -5465,15 +5736,19 @@ Variables::). seeds the random number generator. If 'RANDOM' is unset, it loses its special properties, even if it is subsequently reset. +'READLINE_ARGUMENT' + Any numeric argument given to a Readline command that was defined + using 'bind -x' (*note Bash Builtins:: when it was invoked. + 'READLINE_LINE' The contents of the Readline line buffer, for use with 'bind -x' (*note Bash Builtins::). 'READLINE_MARK' - The position of the MARK (saved insertion point) in the Readline + The position of the "mark" (saved insertion point) in the Readline line buffer, for use with 'bind -x' (*note Bash Builtins::). The characters between the insertion point and the mark are often - called the REGION. + called the "region". 'READLINE_POINT' The position of the insertion point in the Readline line buffer, @@ -5487,7 +5762,7 @@ Variables::). 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. The number of seconds - at shell invocation and the current time is always determined by + at shell invocation and the current time are always determined by querying the system clock. If 'SECONDS' is unset, it loses its special properties, even if it is subsequently reset. @@ -5882,8 +6157,8 @@ File: bashref.info, Node: What is an Interactive Shell?, Next: Is this Shell I 6.3.1 What is an Interactive Shell? ----------------------------------- -An interactive shell is one started without non-option arguments, unless -'-s' is specified, without specifying the '-c' option, and whose input +An interactive shell is one started without non-option arguments (unless +'-s' is specified) and without specifying the '-c' option, whose input and error output are both connected to terminals (as determined by 'isatty(3)'), or one started with the '-i' option. @@ -5941,7 +6216,7 @@ several ways. string escape sequences. 4. Bash executes the values of the set elements of the - 'PROMPT_COMMANDS' array variable as commands before printing the + 'PROMPT_COMMAND' array variable as commands before printing the primary prompt, '$PS1' (*note Bash Variables::). 5. Readline (*note Command Line Editing::) is used to read commands @@ -5993,9 +6268,11 @@ several ways. 19. Parser syntax errors will not cause the shell to exit. - 20. Simple spelling correction for directory arguments to the 'cd' - builtin is enabled by default (see the description of the 'cdspell' - option to the 'shopt' builtin in *note The Shopt Builtin::). + 20. If the 'cdspell' shell option is enabled, the shell will attempt + simple spelling correction for directory arguments to the 'cd' + builtin (see the description of the 'cdspell' option to the 'shopt' + builtin in *note The Shopt Builtin::). The 'cdspell' option is + only effective in interactive shells. 21. The shell will check the value of the 'TMOUT' variable and exit if a command is not read within the specified number of seconds after @@ -6007,10 +6284,11 @@ File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic 6.4 Bash Conditional Expressions ================================ -Conditional expressions are used by the '[[' compound command and the -'test' and '[' builtin commands. The 'test' and '[' commands determine -their behavior based on the number of arguments; see the descriptions of -those commands for any other command-specific actions. +Conditional expressions are used by the '[[' compound command (*note +Conditional Constructs::) and the 'test' and '[' builtin commands (*note +Bourne Shell Builtins::). The 'test' and '[' commands determine their +behavior based on the number of arguments; see the descriptions of those +commands for any other command-specific actions. Expressions may be unary or binary, and are formed from the following primaries. Unary expressions are often used to examine the status of a @@ -6228,8 +6506,8 @@ 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 INTEGER attribute using 'declare -i' is assigned a value. A -null value evaluates to 0. A shell variable need not have its INTEGER +given the 'integer' attribute using '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. Integer constants follow the C language definition, without suffixes @@ -6254,7 +6532,7 @@ File: bashref.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: 6.6 Aliases =========== -ALIASES allow a string to be substituted for a word when it is used as +"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 'alias' and 'unalias' builtin commands. @@ -6269,15 +6547,15 @@ 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 'ls' to '"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 BLANK, then the next command word following the alias is also +is a 'blank', then the next command word following the alias is also checked for alias expansion. Aliases are created and listed with the 'alias' command, and removed with the 'unalias' command. There is no mechanism for using arguments in the replacement text, as -in 'csh'. If arguments are needed, a shell function should be used -(*note Shell Functions::). +in 'csh'. If arguments are needed, use a shell function (*note Shell +Functions::). Aliases are not expanded when the shell is not interactive, unless the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt @@ -6402,7 +6680,11 @@ NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable does not unset the variable. 'unset NAME', where NAME is an array, removes the entire -array. A subscript of '*' or '@' also removes the entire array. +array. 'unset NAME[SUBSCRIPT]' behaves differently depending on the +array type when given a subscript of '*' or '@'. When NAME is an +associative array, it removes the element with key '*' or '@'. If NAME +is an indexed array, 'unset' removes all of the elements, but does not +remove the array itself. When using a variable name with a subscript as an argument to a command, such as with 'unset', without using the word expansion syntax @@ -6477,10 +6759,14 @@ File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack 'popd' popd [-n] [+N | -N] + Removes elements from the directory stack. The elements are + numbered from 0 starting at the first directory listed by 'dirs'; + that is, 'popd' is equivalent to 'popd +0'. + When no arguments are given, 'popd' removes the top directory from - the stack and performs a 'cd' to the new top directory. The - elements are numbered from 0 starting at the first directory listed - with 'dirs'; that is, 'popd' is equivalent to 'popd +0'. + the stack and changes to the new top directory. + + Arguments, if supplied, have the following meanings: '-n' Suppresses the normal change of directory when removing @@ -6488,17 +6774,32 @@ File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack manipulated. '+N' Removes the Nth directory (counting from the left of the list - printed by 'dirs'), starting with zero. + printed by 'dirs'), starting with zero, from the stack. '-N' Removes the Nth directory (counting from the right of the list - printed by 'dirs'), starting with zero. + printed by 'dirs'), starting with zero, from the stack. + + If the top element of the directory stack is modified, and the '-n' + option was not supplied, 'popd' uses the 'cd' builtin to change to + the directory at the top of the stack. If the 'cd' fails, 'popd' + returns a non-zero value. + + Otherwise, 'popd' returns an unsuccessful status if an invalid + option is encountered, the directory stack is empty, or a + non-existent directory stack entry is specified. + + If the 'popd' command is successful, Bash runs 'dirs' to show the + final contents of the directory stack, and the return status is 0. 'pushd' pushd [-n] [+N | -N | DIR] - Save the current directory on the top of the directory stack and - then 'cd' to DIR. With no arguments, 'pushd' exchanges the top two - directories and makes the new top the current directory. + 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, 'pushd' exchanges the top two + elements of the directory stack. + + Arguments, if supplied, have the following meanings: '-n' Suppresses the normal change of directory when rotating or @@ -6513,9 +6814,20 @@ File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack printed by 'dirs', starting with zero) to the top of the list by rotating the stack. 'DIR' - Makes DIR be the top of the stack, making it the new current - directory as if it had been supplied as an argument to the - 'cd' builtin. + Makes DIR be the top of the stack. + + After the stack has been modified, if the '-n' option was not + supplied, 'pushd' uses the 'cd' builtin to change to the directory + at the top of the stack. If the 'cd' fails, 'pushd' returns a + non-zero value. + + Otherwise, if no arguments are supplied, 'pushd' returns 0 unless + the directory stack is empty. When rotating the directory stack, + 'pushd' returns 0 unless the directory stack is empty or a + non-existent directory stack element is specified. + + If the 'pushd' command is successful, Bash runs 'dirs' to show the + final contents of the directory stack.  File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features @@ -6523,9 +6835,9 @@ File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, 6.9 Controlling the Prompt ========================== -Bash examines the value of the array variable 'PROMPT_COMMANDS' just +Bash examines the value of the array variable 'PROMPT_COMMAND' just before printing each primary prompt. If any elements in -'PROMPT_COMMANDS' are set and non-null, Bash executes each value, in +'PROMPT_COMMAND' are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line. In addition, the following table describes the special characters @@ -6571,8 +6883,8 @@ which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4': '\V' The release of Bash, version + patchlevel (e.g., 2.00.0) '\w' - The current working directory, with '$HOME' abbreviated with a - tilde (uses the '$PROMPT_DIRTRIM' variable). + The value of the 'PWD' shell variable ('$PWD'), with '$HOME' + abbreviated with a tilde (uses the '$PROMPT_DIRTRIM' variable). '\W' The basename of '$PWD', with '$HOME' abbreviated with a tilde. '\!' @@ -6638,7 +6950,8 @@ with the exception that the following are disallowed or not performed: * Using the 'enable' builtin command to enable disabled shell builtins. * Specifying the '-p' option to the 'command' builtin. - * Turning off restricted mode with 'set +r' or 'set +o restricted'. + * Turning off restricted mode with 'set +r' or 'shopt -u + restricted_shell'. These restrictions are enforced after any startup files are read. @@ -6649,11 +6962,11 @@ spawned to execute the script. The restricted shell mode is only one component of a useful restricted environment. It should be accompanied by setting 'PATH' to a value that allows execution of only a few verified commands (commands -that allow shell escapes are particularly vulnerable), leaving the user -in a non-writable directory other than his home directory after login, -not allowing the restricted shell to execute shell scripts, and cleaning -the environment of variables that cause some commands to modify their -behavior (e.g., 'VISUAL' or 'PAGER'). +that allow shell escapes are particularly vulnerable), changing the +current directory to a non-writable directory other than '$HOME' after +login, not allowing the restricted shell to execute shell scripts, and +cleaning the environment of variables that cause some commands to modify +their behavior (e.g., 'VISUAL' or 'PAGER'). Modern systems provide more secure ways to implement a restricted environment, such as 'jails', 'zones', or 'containers'. @@ -6764,7 +7077,11 @@ startup files. 25. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a - special builtin, but not with any other simple command. + special builtin, but not with any other simple command. For any + other simple command, the shell aborts execution of that command, + and execution continues at the top level ("the shell shall not + perform any further processing of the command in which the error + occurred"). 26. A non-interactive shell exits with an error status if the iteration variable in a 'for' statement or the selection variable @@ -6848,14 +7165,14 @@ startup files. variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + supplied as an argument exceeds 'PATH_MAX' when all symbolic links are expanded, 'cd' will fail instead of attempting to use only the supplied directory name. @@ -7040,6 +7357,30 @@ required for bash-5.1 and later versions. when producing output that can be reused as input. Bash-5.1 suppresses that message when the '-l' option is supplied. +'compat51 (set using BASH_COMPAT)' + * The 'unset' builtin will unset the array 'a' given an argument + like 'a[@]'. Bash-5.2 will unset an element with key '@' + (associative arrays) or remove all the elements without + unsetting the array (indexed arrays) + * arithmetic commands ( ((...)) ) and the expressions in an + arithmetic for statement can be expanded more than once + * expressions used as arguments to arithmetic operators in the + '[[' conditional command can be expanded more than once + * the expressions in substring parameter brace expansion can be + expanded more than once + * the expressions in the $(( ... )) word expansion can be + expanded more than once + * arithmetic expressions used as indexed array subscripts can be + expanded more than once + * 'test -v', when given an argument of 'A[@]', where A is an + existing associative array, will return true if the array has + any set elements. Bash-5.2 will look for and report on a key + named '@' + * the ${PARAMETER[:]=VALUE} word expansion will return VALUE, + before any variable-specific transformations have been + performed (e.g., converting to lowercase). Bash-5.2 will + return the final value assigned to the variable. +  File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7093,19 +7434,19 @@ when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN' caught, suspends the process. If the operating system on which Bash is running supports job -control, Bash contains facilities to use it. Typing the SUSPEND +control, Bash contains facilities to use it. Typing the "suspend" character (typically '^Z', Control-Z) while a process is running causes that process to be stopped and returns control to Bash. Typing the -DELAYED SUSPEND character (typically '^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 'bg' command to continue it in the background, the -'fg' command to continue it in the foreground, or the 'kill' command to -kill it. A '^Z' takes effect immediately, and has the additional side -effect of causing pending output and typeahead to be discarded. +"delayed suspend" character (typically '^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 'bg' command to continue it in the background, +the 'fg' command to continue it in the foreground, or the 'kill' command +to kill it. A '^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 '%' introduces a job specification (JOBSPEC). +character '%' introduces a job specification ("jobspec"). Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+' refer to the shell's notion of the current job, which is the last job @@ -7234,7 +7575,7 @@ File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, for all running background jobs and the last-executed process substitution, if its process id is the same as $!, and the return status is zero. If the '-n' option is supplied, 'wait' waits for a - single job from the list of PIDS or JOBSPECS or, if no arguments + single job from the list of PIDs or JOBSPECs or, if no arguments are supplied, any job, to complete and returns its exit status. If none of the supplied arguments is a child of the shell, or if no arguments are supplied and the shell has no unwaited-for children, @@ -7582,7 +7923,7 @@ File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home +putting commands in an "inputrc" file, conventionally in their home directory. The name of this file is taken from the value of the shell variable 'INPUTRC'. If that variable is unset, the default is '~/.inputrc'. If that file does not exist or cannot be read, the @@ -7662,7 +8003,10 @@ Variable Settings If set to 'on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the - value of the 'LS_COLORS' environment variable. The default is + value of the 'LS_COLORS' environment variable. If there is a + color definition in 'LS_COLORS' for the custom suffix + 'readline-colored-completion-prefix', Readline uses this color + for the common prefix instead of its default. The default is 'off'. 'colored-stats' @@ -7708,8 +8052,9 @@ Variable Settings than or equal to this value, Readline will ask whether or not the user wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater - than or equal to 0. A negative value means Readline should - never ask. The default limit is '100'. + than or equal to zero. A zero value means Readline should + never ask; negative values are treated as zero. The default + limit is '100'. 'convert-meta' If set to 'on', Readline will convert characters with the @@ -7745,6 +8090,18 @@ Variable Settings non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '@'. + 'enable-active-region' + The "point" is the current cursor position, and "mark" refers + to a saved cursor position (*note Commands For Moving::). The + text between the point and mark is referred to as the + "region". When this variable is set to 'On', Readline allows + certain commands to designate the region as "active". When + the region is active, Readline highlights the text in the + region using the terminal's standout mode. The active region + shows the text inserted by bracketed-paste and any matching + text found by incremental and non-incremental history + searches. The default is 'On'. + 'enable-bracketed-paste' When set to 'On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing @@ -8438,6 +8795,11 @@ File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev supplied, specifies the history entry to use instead of the current line. +'fetch-history ()' + With a numeric argument, fetch that entry from the history list and + make it the current line. Without an argument, move back to the + first entry in the history list. +  File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands @@ -8849,6 +9211,12 @@ File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. +'spell-correct-word (C-x s)' + Perform spelling correction on the current word, treating it as a + directory or filename, in the same way as the 'cdspell' shell + option. Word boundaries are the same as those used by + 'shell-forward-word'. + '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 @@ -9578,9 +9946,9 @@ history file. -d' command. '-d START-END' - Delete the history entries between positions START and END, - inclusive. Positive and negative values for START and END are - interpreted as described above. + Delete the range of history entries between positions START + and END, inclusive. Positive and negative values for START + and END are interpreted as described above. '-a' Append the new history lines to the history file. These are @@ -9613,6 +9981,11 @@ history file. FILENAME is given, then it is used as the history file. If not, then the value of the 'HISTFILE' variable is used. + The return value is 0 unless an invalid option is encountered, an + error occurs while reading or writing the history file, an invalid + OFFSET or range is supplied as an argument to '-d', or the history + expansion supplied as an argument to '-p' fails. +  File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -9897,20 +10270,28 @@ These are installation instructions for Bash. 3. Optionally, type 'make tests' to run the Bash test suite. 4. Type 'make install' to install 'bash' and 'bashbug'. This will - also install the manual pages and Info file. + also install the manual pages and Info file, message translation + files, some supplemental documentation, a number of example + loadable builtin commands, and a set of header files for developing + loadable builtins. You may need additional privileges to install + 'bash' to your desired destination, so 'sudo make install' might be + required. More information about controlling the locations where + 'bash' and other files are installed is below (*note Installation + Names::). The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package -(the top directory, the 'builtins', 'doc', and 'support' directories, -each directory under 'lib', and several others). It also creates a -'config.h' file containing system-dependent definitions. Finally, it -creates a shell script named 'config.status' that you can run in the -future to recreate the current configuration, a file 'config.cache' that -saves the results of its tests to speed up reconfiguring, and a file -'config.log' containing compiler output (useful mainly for debugging -'configure'). If at some point 'config.cache' contains results you -don't want to keep, you may remove or edit it. +(the top directory, the 'builtins', 'doc', 'po', and 'support' +directories, each directory under 'lib', and several others). It also +creates a 'config.h' file containing system-dependent definitions. +Finally, it creates a shell script named 'config.status' that you can +run in the future to recreate the current configuration, a file +'config.cache' that saves the results of its tests to speed up +reconfiguring, and a file 'config.log' containing compiler output +(useful mainly for debugging 'configure'). If at some point +'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 'configure' script understands, type @@ -9941,7 +10322,7 @@ considered for the next release. The file 'configure.ac' is used to create 'configure' by a program called Autoconf. You only need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of Autoconf. If you do -this, make sure you are using Autoconf version 2.50 or newer. +this, make sure you are using Autoconf version 2.69 or newer. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that @@ -10009,10 +10390,13 @@ File: bashref.info, Node: Installation Names, Next: Specifying the System Type ======================= By default, 'make install' will install into '/usr/local/bin', -'/usr/local/man', etc. You can specify an installation prefix other -than '/usr/local' by giving 'configure' the option '--prefix=PATH', or -by specifying a value for the 'DESTDIR' 'make' variable when running -'make install'. +'/usr/local/man', etc.; that is, the "installation prefix" defaults to +'/usr/local'. You can specify an installation prefix other than +'/usr/local' by giving 'configure' the option '--prefix=PATH', or by +specifying a value for the 'prefix' 'make' variable when running 'make +install' (e.g., 'make install prefix=PATH'). The 'prefix' variable +provides a default for 'exec_prefix' and other variables used when +installing bash. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you @@ -10020,6 +10404,30 @@ give 'configure' the option '--exec-prefix=PATH', 'make install' will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. + If you would like to change the installation locations for a single +run, you can specify these variables as arguments to 'make': 'make +install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin' +instead of the default '/usr/local/bin'. + + If you want to see the files bash will install and where it will +install them without changing anything on your system, specify the +variable 'DESTDIR' as an argument to 'make'. Its value should be the +absolute directory path you'd like to use as the root of your sample +installation tree. For example, + + mkdir /fs1/bash-install + make install DESTDIR=/fs1/bash-install + +will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the +documentation into directories within +'/fs1/bash-install/usr/local/share', the example loadable builtins into +'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the +usual 'exec_prefix' and 'prefix' variables to alter the directory paths +beneath the value of 'DESTDIR'. + + The GNU Makefile standards provide a more complete description of +these variables and their effects. +  File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash @@ -10135,16 +10543,20 @@ the Bash 'configure' recognizes. subdirectories of that directory (include files in PREFIX/'include' and the library in PREFIX/'lib'). -'--with-purify' - Define this to use the Purify memory allocation checker from - Rational Software. +'--with-libintl-prefix[=PREFIX]' + Define this to make Bash link with a locally-installed version of + the libintl library instead ofthe version in 'lib/intl'. + +'--with-libiconv-prefix[=PREFIX]' + Define this to make Bash look for libiconv in PREFIX instead of the + standard system locations. There is no version included with Bash. '--enable-minimal-config' This produces a shell with minimal features, close to the historical Bourne shell. - There are several '--enable-' options that alter how Bash is compiled -and linked, rather than changing run-time features. + There are several '--enable-' options that alter how Bash is +compiled, linked, and installed, rather than changing run-time features. '--enable-largefile' Enable support for large files @@ -10157,6 +10569,10 @@ and linked, rather than changing run-time features. This builds a Bash binary that produces profiling information to be processed by 'gprof' each time it is executed. +'--enable-separate-helpfiles' + Use external files for the documentation displayed by the 'help' + builtin instead of storing the text internally. + '--enable-static-link' This causes Bash to be linked statically, if 'gcc' is being used. This could be used to build a version to use as root's shell. @@ -10165,14 +10581,21 @@ and linked, rather than changing run-time features. following options, but it is processed first, so individual options may be enabled using 'enable-FEATURE'. - All of the following options except for 'disabled-builtins', -'direxpand-default', and 'xpg-echo-default' are enabled by default, -unless the operating system does not provide the necessary support. + All of the following options except for 'alt-array-implementation', +'disabled-builtins', 'direxpand-default', 'strict-posix-default', and +'xpg-echo-default' are enabled by default, unless the operating system +does not provide the necessary support. '--enable-alias' Allow alias expansion and include the 'alias' and 'unalias' builtins (*note Aliases::). +'--enable-alt-array-implementation' + This builds bash using an alternate implementation of arrays (*note + Arrays::) that provides faster access at the expense of using more + memory (sometimes many times more, depending on how sparse an array + is). + '--enable-arith-for-command' Include support for the alternate form of the 'for' command that behaves like the C language 'for' statement (*note Looping @@ -10192,7 +10615,7 @@ unless the operating system does not provide the necessary support. '--enable-casemod-attributes' Include support for case-modifying attributes in the 'declare' - builtin and assignment statements. Variables with the UPPERCASE + builtin and assignment statements. Variables with the 'uppercase' attribute, for example, will have their values converted to uppercase upon assignment. @@ -10251,7 +10674,7 @@ unless the operating system does not provide the necessary support. described above under *note Pattern Matching::. '--enable-extended-glob-default' - Set the default value of the EXTGLOB shell option described above + Set the default value of the 'extglob' shell option described above under *note The Shopt Builtin:: to be enabled. '--enable-function-import' @@ -10260,10 +10683,10 @@ unless the operating system does not provide the necessary support. enabled by default. '--enable-glob-asciirange-default' - Set the default value of the GLOBASCIIRANGES shell option described - above under *note The Shopt Builtin:: to be enabled. This controls - the behavior of character ranges when used in pattern matching - bracket expressions. + Set the default value of the 'globasciiranges' shell option + described above under *note The Shopt Builtin:: to be enabled. + This controls the behavior of character ranges when used in pattern + matching bracket expressions. '--enable-help-builtin' Include the 'help' builtin, which displays help on shell builtins @@ -10314,10 +10737,6 @@ unless the operating system does not provide the necessary support. Include the 'select' compound command, which allows the generation of simple menus (*note Conditional Constructs::). -'--enable-separate-helpfiles' - Use external files for the documentation displayed by the 'help' - builtin instead of storing the text internally. - '--enable-single-help-strings' Store the text displayed by the 'help' builtin as a single string for each help topic. This aids in translating the text to @@ -10327,6 +10746,10 @@ unless the operating system does not provide the necessary support. '--enable-strict-posix-default' Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). +'--enable-translatable-strings' + Enable support for '$"STRING"' translatable strings (*note Locale + Translation::). + '--enable-usg-echo-default' A synonym for '--enable-xpg-echo-default'. @@ -10353,7 +10776,8 @@ Appendix A 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 -. + and from +. Once you have determined that a bug actually exists, use the 'bashbug' command to submit a bug report. If you have a fix, you are @@ -10479,15 +10903,15 @@ the baseline reference. substring of 'var''s value of length LENGTH, beginning at OFFSET, is present (*note Shell Parameter Expansion::). - * The expansion '${var/[/]'PATTERN'[/'REPLACEMENT']}', which matches - PATTERN and replaces it with REPLACEMENT in the value of 'var', is + * The expansion '${VAR/[/]'PATTERN'[/'REPLACEMENT']}', which matches + PATTERN and replaces it with REPLACEMENT in the value of VAR, is available (*note Shell Parameter Expansion::). * The expansion '${!PREFIX*}' expansion, which expands to the names of all shell variables whose names begin with PREFIX, is available (*note Shell Parameter Expansion::). - * Bash has INDIRECT variable expansion using '${!word}' (*note Shell + * Bash has indirect variable expansion using '${!word}' (*note Shell Parameter Expansion::). * Bash can expand positional parameters beyond '$9' using '${NUM}'. @@ -10513,8 +10937,8 @@ the baseline reference. shell uses only '!'. * Bash implements the full set of POSIX filename expansion operators, - including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING - SYMBOLS (*note Filename Expansion::). + including character classes, equivalence classes, and collating + symbols (*note Filename Expansion::). * Bash implements extended pattern matching features when the 'extglob' shell option is enabled (*note Pattern Matching::). @@ -10631,7 +11055,7 @@ the baseline reference. * Bash includes the 'caller' builtin, which displays the context of any active subroutine call (a shell function or a script executed - with the '.' or 'source' builtins). This supports the bash + with the '.' or 'source' builtins). This supports the Bash debugger. * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG' @@ -11252,18 +11676,18 @@ D.1 Index of Shell Builtin Commands * :: Bourne Shell Builtins. (line 11) * [: Bourne Shell Builtins. - (line 270) + (line 274) * alias: Bash Builtins. (line 11) * bg: Job Control Builtins. (line 7) * bind: Bash Builtins. (line 21) * break: Bourne Shell Builtins. (line 36) -* builtin: Bash Builtins. (line 104) -* caller: Bash Builtins. (line 113) +* builtin: Bash Builtins. (line 108) +* caller: Bash Builtins. (line 117) * cd: Bourne Shell Builtins. (line 44) -* command: Bash Builtins. (line 130) +* command: Bash Builtins. (line 134) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. @@ -11271,75 +11695,75 @@ D.1 Index of Shell Builtin Commands * compopt: Programmable Completion Builtins. (line 237) * continue: Bourne Shell Builtins. - (line 85) -* declare: Bash Builtins. (line 150) + (line 89) +* declare: Bash Builtins. (line 154) * dirs: Directory Stack Builtins. (line 7) * disown: Job Control Builtins. (line 101) -* echo: Bash Builtins. (line 253) -* enable: Bash Builtins. (line 302) +* echo: Bash Builtins. (line 257) +* enable: Bash Builtins. (line 306) * eval: Bourne Shell Builtins. - (line 94) + (line 98) * exec: Bourne Shell Builtins. - (line 102) + (line 106) * exit: Bourne Shell Builtins. - (line 120) + (line 124) * export: Bourne Shell Builtins. - (line 127) + (line 131) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 143) + (line 147) * hash: Bourne Shell Builtins. - (line 187) -* help: Bash Builtins. (line 331) + (line 191) +* help: Bash Builtins. (line 342) * history: Bash History Builtins. (line 46) * jobs: Job Control Builtins. (line 27) * kill: Job Control Builtins. (line 58) -* let: Bash Builtins. (line 350) -* local: Bash Builtins. (line 358) -* logout: Bash Builtins. (line 374) -* mapfile: Bash Builtins. (line 379) +* let: Bash Builtins. (line 361) +* local: Bash Builtins. (line 369) +* logout: Bash Builtins. (line 385) +* mapfile: Bash Builtins. (line 390) * popd: Directory Stack Builtins. (line 35) -* printf: Bash Builtins. (line 425) +* printf: Bash Builtins. (line 436) * pushd: Directory Stack Builtins. - (line 53) + (line 69) * pwd: Bourne Shell Builtins. - (line 207) -* read: Bash Builtins. (line 474) -* readarray: Bash Builtins. (line 570) + (line 211) +* read: Bash Builtins. (line 488) +* readarray: Bash Builtins. (line 585) * readonly: Bourne Shell Builtins. - (line 217) + (line 221) * return: Bourne Shell Builtins. - (line 236) + (line 240) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 257) + (line 261) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 579) +* source: Bash Builtins. (line 594) * suspend: Job Control Builtins. (line 113) * test: Bourne Shell Builtins. - (line 270) + (line 274) * times: Bourne Shell Builtins. - (line 349) + (line 359) * trap: Bourne Shell Builtins. - (line 355) -* type: Bash Builtins. (line 584) -* typeset: Bash Builtins. (line 616) -* ulimit: Bash Builtins. (line 622) + (line 365) +* type: Bash Builtins. (line 599) +* typeset: Bash Builtins. (line 631) +* ulimit: Bash Builtins. (line 637) * umask: Bourne Shell Builtins. - (line 404) -* unalias: Bash Builtins. (line 728) + (line 414) +* unalias: Bash Builtins. (line 743) * unset: Bourne Shell Builtins. - (line 422) + (line 432) * wait: Job Control Builtins. (line 76) @@ -11354,9 +11778,9 @@ D.2 Index of Shell Reserved Words * !: Pipelines. (line 9) * [[: Conditional Constructs. - (line 125) + (line 126) * ]]: Conditional Constructs. - (line 125) + (line 126) * {: Command Grouping. (line 21) * }: Command Grouping. (line 21) * case: Conditional Constructs. @@ -11378,7 +11802,7 @@ D.2 Index of Shell Reserved Words * in: Conditional Constructs. (line 28) * select: Conditional Constructs. - (line 83) + (line 84) * then: Conditional Constructs. (line 7) * time: Pipelines. (line 9) @@ -11394,21 +11818,21 @@ D.3 Parameter and Variable Index [index] * Menu: -* !: Special Parameters. (line 56) +* !: Special Parameters. (line 55) * #: Special Parameters. (line 39) * $: Special Parameters. (line 51) -* $!: Special Parameters. (line 57) +* $!: Special Parameters. (line 56) * $#: Special Parameters. (line 40) * $$: Special Parameters. (line 52) * $*: Special Parameters. (line 10) * $-: Special Parameters. (line 47) -* $0: Special Parameters. (line 62) +* $0: Special Parameters. (line 61) * $?: Special Parameters. (line 43) * $@: Special Parameters. (line 23) * $_: Bash Variables. (line 14) * *: Special Parameters. (line 9) * -: Special Parameters. (line 46) -* 0: Special Parameters. (line 61) +* 0: Special Parameters. (line 60) * ?: Special Parameters. (line 42) * @: Special Parameters. (line 22) * _: Bash Variables. (line 13) @@ -11446,20 +11870,20 @@ D.3 Parameter and Variable Index * colored-completion-prefix: Readline Init File Syntax. (line 55) * colored-stats: Readline Init File Syntax. - (line 62) + (line 65) * COLUMNS: Bash Variables. (line 202) * comment-begin: Readline Init File Syntax. - (line 68) + (line 71) * completion-display-width: Readline Init File Syntax. - (line 73) + (line 76) * completion-ignore-case: Readline Init File Syntax. - (line 80) + (line 83) * completion-map-case: Readline Init File Syntax. - (line 85) + (line 88) * completion-prefix-display-length: Readline Init File Syntax. - (line 91) + (line 94) * completion-query-items: Readline Init File Syntax. - (line 98) + (line 101) * COMPREPLY: Bash Variables. (line 254) * COMP_CWORD: Bash Variables. (line 208) * COMP_KEY: Bash Variables. (line 237) @@ -11469,29 +11893,31 @@ D.3 Parameter and Variable Index * COMP_WORDBREAKS: Bash Variables. (line 241) * COMP_WORDS: Bash Variables. (line 247) * convert-meta: Readline Init File Syntax. - (line 108) + (line 112) * COPROC: Bash Variables. (line 260) * DIRSTACK: Bash Variables. (line 264) * disable-completion: Readline Init File Syntax. - (line 116) + (line 120) * echo-control-characters: Readline Init File Syntax. - (line 121) + (line 125) * editing-mode: Readline Init File Syntax. - (line 126) + (line 130) * EMACS: Bash Variables. (line 274) * emacs-mode-string: Readline Init File Syntax. - (line 132) + (line 136) +* enable-active-region: Readline Init File Syntax. + (line 146) * enable-bracketed-paste: Readline Init File Syntax. - (line 142) + (line 158) * enable-keypad: Readline Init File Syntax. - (line 150) + (line 166) * ENV: Bash Variables. (line 279) * EPOCHREALTIME: Bash Variables. (line 284) * EPOCHSECONDS: Bash Variables. (line 292) * EUID: Bash Variables. (line 299) * EXECIGNORE: Bash Variables. (line 303) * expand-tilde: Readline Init File Syntax. - (line 161) + (line 177) * FCEDIT: Bash Variables. (line 316) * FIGNORE: Bash Variables. (line 320) * FUNCNAME: Bash Variables. (line 326) @@ -11505,15 +11931,15 @@ D.3 Parameter and Variable Index * HISTFILESIZE: Bash Variables. (line 402) * HISTIGNORE: Bash Variables. (line 413) * history-preserve-point: Readline Init File Syntax. - (line 165) + (line 181) * history-size: Readline Init File Syntax. - (line 171) + (line 187) * HISTSIZE: Bash Variables. (line 433) * HISTTIMEFORMAT: Bash Variables. (line 440) * HOME: Bourne Shell Variables. (line 13) * horizontal-scroll-mode: Readline Init File Syntax. - (line 180) + (line 196) * HOSTFILE: Bash Variables. (line 448) * HOSTNAME: Bash Variables. (line 459) * HOSTTYPE: Bash Variables. (line 462) @@ -11521,18 +11947,21 @@ D.3 Parameter and Variable Index (line 18) * IGNOREEOF: Bash Variables. (line 465) * input-meta: Readline Init File Syntax. - (line 189) + (line 205) * INPUTRC: Bash Variables. (line 475) * INSIDE_EMACS: Bash Variables. (line 479) * isearch-terminators: Readline Init File Syntax. - (line 197) + (line 213) * keymap: Readline Init File Syntax. - (line 204) -* LANG: Bash Variables. (line 485) + (line 220) +* LANG: Creating Internationalized Scripts. + (line 51) +* LANG <1>: Bash Variables. (line 485) * LC_ALL: Bash Variables. (line 489) * LC_COLLATE: Bash Variables. (line 493) * LC_CTYPE: Bash Variables. (line 500) -* LC_MESSAGES: Locale Translation. (line 15) +* LC_MESSAGES: Creating Internationalized Scripts. + (line 51) * LC_MESSAGES <1>: Bash Variables. (line 505) * LC_NUMERIC: Bash Variables. (line 509) * LC_TIME: Bash Variables. (line 513) @@ -11546,15 +11975,15 @@ D.3 Parameter and Variable Index (line 27) * MAPFILE: Bash Variables. (line 540) * mark-modified-lines: Readline Init File Syntax. - (line 234) + (line 250) * mark-symlinked-directories: Readline Init File Syntax. - (line 239) + (line 255) * match-hidden-files: Readline Init File Syntax. - (line 244) + (line 260) * menu-complete-display-prefix: Readline Init File Syntax. - (line 251) + (line 267) * meta-flag: Readline Init File Syntax. - (line 189) + (line 205) * OLDPWD: Bash Variables. (line 544) * OPTARG: Bourne Shell Variables. (line 34) @@ -11563,9 +11992,9 @@ D.3 Parameter and Variable Index (line 38) * OSTYPE: Bash Variables. (line 551) * output-meta: Readline Init File Syntax. - (line 256) + (line 272) * page-completions: Readline Init File Syntax. - (line 262) + (line 278) * PATH: Bourne Shell Variables. (line 42) * PIPESTATUS: Bash Variables. (line 554) @@ -11582,37 +12011,40 @@ D.3 Parameter and Variable Index * PS4: Bash Variables. (line 595) * PWD: Bash Variables. (line 603) * RANDOM: Bash Variables. (line 606) -* READLINE_LINE: Bash Variables. (line 612) -* READLINE_MARK: Bash Variables. (line 616) -* READLINE_POINT: Bash Variables. (line 622) -* REPLY: Bash Variables. (line 626) +* READLINE_ARGUMENT: Bash Variables. (line 612) +* READLINE_LINE: Bash Variables. (line 616) +* READLINE_MARK: Bash Variables. (line 620) +* READLINE_POINT: Bash Variables. (line 626) +* REPLY: Bash Variables. (line 630) * revert-all-at-newline: Readline Init File Syntax. - (line 272) -* SECONDS: Bash Variables. (line 629) -* SHELL: Bash Variables. (line 638) -* SHELLOPTS: Bash Variables. (line 643) -* SHLVL: Bash Variables. (line 652) + (line 288) +* SECONDS: Bash Variables. (line 633) +* SHELL: Bash Variables. (line 642) +* SHELLOPTS: Bash Variables. (line 647) +* SHLVL: Bash Variables. (line 656) * show-all-if-ambiguous: Readline Init File Syntax. - (line 278) + (line 294) * show-all-if-unmodified: Readline Init File Syntax. - (line 284) + (line 300) * show-mode-in-prompt: Readline Init File Syntax. - (line 293) + (line 309) * skip-completed-text: Readline Init File Syntax. - (line 299) -* SRANDOM: Bash Variables. (line 657) -* TEXTDOMAIN: Locale Translation. (line 15) -* TEXTDOMAINDIR: Locale Translation. (line 15) -* TIMEFORMAT: Bash Variables. (line 666) -* TMOUT: Bash Variables. (line 704) -* TMPDIR: Bash Variables. (line 716) -* UID: Bash Variables. (line 720) + (line 315) +* SRANDOM: Bash Variables. (line 661) +* TEXTDOMAIN: Creating Internationalized Scripts. + (line 51) +* TEXTDOMAINDIR: Creating Internationalized Scripts. + (line 51) +* TIMEFORMAT: Bash Variables. (line 670) +* TMOUT: Bash Variables. (line 708) +* TMPDIR: Bash Variables. (line 720) +* UID: Bash Variables. (line 724) * vi-cmd-mode-string: Readline Init File Syntax. - (line 312) + (line 328) * vi-ins-mode-string: Readline Init File Syntax. - (line 323) + (line 339) * visible-stats: Readline Init File Syntax. - (line 334) + (line 350)  File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -11628,7 +12060,7 @@ D.4 Function Index * accept-line (Newline or Return): Commands For History. (line 6) * alias-expand-line (): Miscellaneous Commands. - (line 125) + (line 131) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. @@ -11677,7 +12109,7 @@ D.4 Function Index (line 57) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * display-shell-version (C-x C-v): Miscellaneous Commands. - (line 110) + (line 116) * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands. (line 14) * downcase-word (M-l): Commands For Text. (line 62) @@ -11690,7 +12122,7 @@ D.4 Function Index * dynamic-complete-history (M-): Commands For Completion. (line 90) * edit-and-execute-command (C-x C-e): Miscellaneous Commands. - (line 134) + (line 140) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. @@ -11698,21 +12130,23 @@ D.4 Function Index * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 37) +* fetch-history (): Commands For History. + (line 103) * forward-backward-delete-char (): Commands For Text. (line 21) * forward-char (C-f): Commands For Moving. (line 12) * forward-search-history (C-s): Commands For History. (line 33) * forward-word (M-f): Commands For Moving. (line 18) * glob-complete-word (M-g): Miscellaneous Commands. - (line 92) -* glob-expand-word (C-x *): Miscellaneous Commands. (line 98) -* glob-list-expansions (C-x g): Miscellaneous Commands. +* glob-expand-word (C-x *): Miscellaneous Commands. (line 104) +* glob-list-expansions (C-x g): Miscellaneous Commands. + (line 110) * history-and-alias-expand-line (): Miscellaneous Commands. - (line 128) + (line 134) * history-expand-line (M-^): Miscellaneous Commands. - (line 118) + (line 124) * history-search-backward (): Commands For History. (line 57) * history-search-forward (): Commands For History. @@ -11726,7 +12160,7 @@ D.4 Function Index * insert-completions (M-*): Commands For Completion. (line 22) * insert-last-argument (M-. or M-_): Miscellaneous Commands. - (line 131) + (line 137) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. @@ -11736,7 +12170,7 @@ D.4 Function Index * kill-word (M-d): Commands For Killing. (line 23) * magic-space (): Miscellaneous Commands. - (line 121) + (line 127) * menu-complete (): Commands For Completion. (line 26) * menu-complete-backward (): Commands For Completion. @@ -11784,7 +12218,7 @@ D.4 Function Index (line 37) * shell-backward-word (M-C-b): Commands For Moving. (line 30) * shell-expand-line (M-C-e): Miscellaneous Commands. - (line 113) + (line 119) * shell-forward-word (M-C-f): Commands For Moving. (line 26) * shell-kill-word (M-C-d): Commands For Killing. (line 32) @@ -11792,6 +12226,8 @@ D.4 Function Index (line 41) * skip-csi-sequence (): Miscellaneous Commands. (line 52) +* spell-correct-word (C-x s): Miscellaneous Commands. + (line 92) * start-kbd-macro (C-x (): Keyboard Macros. (line 6) * tilde-expand (M-&): Miscellaneous Commands. (line 30) @@ -11913,6 +12349,8 @@ D.5 Concept Index * interactive shell: Invoking Bash. (line 131) * interactive shell <1>: Interactive Shells. (line 6) * internationalization: Locale Translation. (line 6) +* internationalized scripts: Creating Internationalized Scripts. + (line 3) * job: Definitions. (line 38) * job control: Definitions. (line 42) * job control <1>: Job Control Basics. (line 6) @@ -11968,6 +12406,8 @@ D.5 Concept Index * special builtin: Definitions. (line 82) * special builtin <1>: Special Builtins. (line 6) * startup files: Bash Startup Files. (line 6) +* string translations: Creating Internationalized Scripts. + (line 3) * suspending jobs: Job Control Basics. (line 6) * tilde expansion: Tilde Expansion. (line 6) * token: Definitions. (line 86) @@ -11983,137 +12423,138 @@ D.5 Concept Index  Tag Table: -Node: Top895 -Node: Introduction2813 -Node: What is Bash?3029 -Node: What is a shell?4143 -Node: Definitions6681 -Node: Basic Shell Features9632 -Node: Shell Syntax10851 -Node: Shell Operation11877 -Node: Quoting13170 -Node: Escape Character14470 -Node: Single Quotes14955 -Node: Double Quotes15303 -Node: ANSI-C Quoting16581 -Node: Locale Translation17840 -Node: Comments18993 -Node: Shell Commands19611 -Node: Reserved Words20549 -Node: Simple Commands21305 -Node: Pipelines21959 -Node: Lists24891 -Node: Compound Commands26682 -Node: Looping Constructs27694 -Node: Conditional Constructs30189 -Node: Command Grouping41760 -Node: Coprocesses43239 -Node: GNU Parallel45142 -Node: Shell Functions49443 -Node: Shell Parameters56650 -Node: Positional Parameters61063 -Node: Special Parameters61963 -Node: Shell Expansions65187 -Node: Brace Expansion67310 -Node: Tilde Expansion70033 -Node: Shell Parameter Expansion72650 -Node: Command Substitution87779 -Node: Arithmetic Expansion89134 -Node: Process Substitution90066 -Node: Word Splitting91186 -Node: Filename Expansion93130 -Node: Pattern Matching95679 -Node: Quote Removal99665 -Node: Redirections99960 -Node: Executing Commands109530 -Node: Simple Command Expansion110200 -Node: Command Search and Execution112154 -Node: Command Execution Environment114530 -Node: Environment117514 -Node: Exit Status119173 -Node: Signals120843 -Node: Shell Scripts122810 -Node: Shell Builtin Commands125822 -Node: Bourne Shell Builtins127860 -Node: Bash Builtins148789 -Node: Modifying Shell Behavior178898 -Node: The Set Builtin179243 -Node: The Shopt Builtin189656 -Node: Special Builtins204566 -Node: Shell Variables205545 -Node: Bourne Shell Variables205982 -Node: Bash Variables208086 -Node: Bash Features240720 -Node: Invoking Bash241733 -Node: Bash Startup Files247746 -Node: Interactive Shells252849 -Node: What is an Interactive Shell?253259 -Node: Is this Shell Interactive?253908 -Node: Interactive Shell Behavior254723 -Node: Bash Conditional Expressions258237 -Node: Shell Arithmetic262814 -Node: Aliases265754 -Node: Arrays268374 -Node: The Directory Stack274383 -Node: Directory Stack Builtins275167 -Node: Controlling the Prompt278135 -Node: The Restricted Shell281085 -Node: Bash POSIX Mode283679 -Node: Shell Compatibility Mode294715 -Node: Job Control301371 -Node: Job Control Basics301831 -Node: Job Control Builtins306827 -Node: Job Control Variables312227 -Node: Command Line Editing313383 -Node: Introduction and Notation315054 -Node: Readline Interaction316677 -Node: Readline Bare Essentials317868 -Node: Readline Movement Commands319651 -Node: Readline Killing Commands320611 -Node: Readline Arguments322529 -Node: Searching323573 -Node: Readline Init File325759 -Node: Readline Init File Syntax327018 -Node: Conditional Init Constructs347556 -Node: Sample Init File351752 -Node: Bindable Readline Commands354876 -Node: Commands For Moving356080 -Node: Commands For History358131 -Node: Commands For Text362924 -Node: Commands For Killing366573 -Node: Numeric Arguments369606 -Node: Commands For Completion370745 -Node: Keyboard Macros374936 -Node: Miscellaneous Commands375623 -Node: Readline vi Mode381307 -Node: Programmable Completion382214 -Node: Programmable Completion Builtins389994 -Node: A Programmable Completion Example400689 -Node: Using History Interactively405936 -Node: Bash History Facilities406620 -Node: Bash History Builtins409625 -Node: History Interaction414354 -Node: Event Designators417974 -Node: Word Designators419328 -Node: Modifiers421088 -Node: Installing Bash422899 -Node: Basic Installation424036 -Node: Compilers and Options427294 -Node: Compiling For Multiple Architectures428035 -Node: Installation Names429728 -Node: Specifying the System Type430546 -Node: Sharing Defaults431262 -Node: Operation Controls431935 -Node: Optional Features432893 -Node: Reporting Bugs443411 -Node: Major Differences From The Bourne Shell444605 -Node: GNU Free Documentation License461457 -Node: Indexes486634 -Node: Builtin Index487088 -Node: Reserved Word Index493915 -Node: Variable Index496363 -Node: Function Index512260 -Node: Concept Index525770 +Node: Top897 +Node: Introduction2817 +Node: What is Bash?3033 +Node: What is a shell?4147 +Node: Definitions6685 +Node: Basic Shell Features9636 +Node: Shell Syntax10855 +Node: Shell Operation11881 +Node: Quoting13174 +Node: Escape Character14478 +Node: Single Quotes14963 +Node: Double Quotes15311 +Node: ANSI-C Quoting16589 +Node: Locale Translation17899 +Node: Creating Internationalized Scripts19210 +Node: Comments23327 +Node: Shell Commands23945 +Node: Reserved Words24883 +Node: Simple Commands25639 +Node: Pipelines26293 +Node: Lists29252 +Node: Compound Commands31047 +Node: Looping Constructs32059 +Node: Conditional Constructs34554 +Node: Command Grouping48898 +Node: Coprocesses50376 +Node: GNU Parallel53039 +Node: Shell Functions53956 +Node: Shell Parameters61247 +Node: Positional Parameters65635 +Node: Special Parameters66537 +Node: Shell Expansions69751 +Node: Brace Expansion71878 +Node: Tilde Expansion74612 +Node: Shell Parameter Expansion77233 +Node: Command Substitution95099 +Node: Arithmetic Expansion96454 +Node: Process Substitution97422 +Node: Word Splitting98542 +Node: Filename Expansion100486 +Node: Pattern Matching103235 +Node: Quote Removal107843 +Node: Redirections108138 +Node: Executing Commands117798 +Node: Simple Command Expansion118468 +Node: Command Search and Execution120578 +Node: Command Execution Environment122956 +Node: Environment125991 +Node: Exit Status127654 +Node: Signals129438 +Node: Shell Scripts132887 +Node: Shell Builtin Commands135914 +Node: Bourne Shell Builtins137952 +Node: Bash Builtins159413 +Node: Modifying Shell Behavior190269 +Node: The Set Builtin190614 +Node: The Shopt Builtin201215 +Node: Special Builtins217127 +Node: Shell Variables218106 +Node: Bourne Shell Variables218543 +Node: Bash Variables220647 +Node: Bash Features253463 +Node: Invoking Bash254476 +Node: Bash Startup Files260489 +Node: Interactive Shells265592 +Node: What is an Interactive Shell?266002 +Node: Is this Shell Interactive?266651 +Node: Interactive Shell Behavior267466 +Node: Bash Conditional Expressions271095 +Node: Shell Arithmetic275737 +Node: Aliases278681 +Node: Arrays281294 +Node: The Directory Stack287541 +Node: Directory Stack Builtins288325 +Node: Controlling the Prompt292585 +Node: The Restricted Shell295550 +Node: Bash POSIX Mode298160 +Node: Shell Compatibility Mode309433 +Node: Job Control317462 +Node: Job Control Basics317922 +Node: Job Control Builtins322924 +Node: Job Control Variables328324 +Node: Command Line Editing329480 +Node: Introduction and Notation331151 +Node: Readline Interaction332774 +Node: Readline Bare Essentials333965 +Node: Readline Movement Commands335748 +Node: Readline Killing Commands336708 +Node: Readline Arguments338626 +Node: Searching339670 +Node: Readline Init File341856 +Node: Readline Init File Syntax343117 +Node: Conditional Init Constructs364605 +Node: Sample Init File368801 +Node: Bindable Readline Commands371925 +Node: Commands For Moving373129 +Node: Commands For History375180 +Node: Commands For Text380174 +Node: Commands For Killing383823 +Node: Numeric Arguments386856 +Node: Commands For Completion387995 +Node: Keyboard Macros392186 +Node: Miscellaneous Commands392873 +Node: Readline vi Mode398812 +Node: Programmable Completion399719 +Node: Programmable Completion Builtins407499 +Node: A Programmable Completion Example418194 +Node: Using History Interactively423441 +Node: Bash History Facilities424125 +Node: Bash History Builtins427130 +Node: History Interaction432138 +Node: Event Designators435758 +Node: Word Designators437112 +Node: Modifiers438872 +Node: Installing Bash440683 +Node: Basic Installation441820 +Node: Compilers and Options445542 +Node: Compiling For Multiple Architectures446283 +Node: Installation Names447976 +Node: Specifying the System Type450085 +Node: Sharing Defaults450801 +Node: Operation Controls451474 +Node: Optional Features452432 +Node: Reporting Bugs463650 +Node: Major Differences From The Bourne Shell464925 +Node: GNU Free Documentation License481775 +Node: Indexes506952 +Node: Builtin Index507406 +Node: Reserved Word Index514233 +Node: Variable Index516681 +Node: Function Index533173 +Node: Concept Index546957  End Tag Table diff --git a/doc/bashref.pdf b/doc/bashref.pdf index 50b64fbae5b2045fe6516b54da269560bbae3aaa..ba71927e6ece62b8d4c98e37789d8c3ce7bb1953 100644 GIT binary patch delta 536933 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

    B0xItS+u`uMyjP>Io~U8o5XsT)Bv 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θMV|2 z6fcGjJVzB5w5`XieyTg`bgkt%OVt9x1AnV*XQG9?{=Ba!2^-R|8h=-VMMy5kB4ln; zLNHy3i;g13vWb#>m}|nq-PBoUMk-WwzSN-i&@67KAjo{6p%xnjVMtWS}e^ISE5s;5mnICKf~N;aiBJ?gmQ*DZm2C!k$*+uixiFkT2&rV-ORrB$53y7Kf&YdFFjKPr*F(cshOD})HS|_f>OZ^Qfik`K}3#jc)uxY z52B`(ngTJG0hUDK_Iz6i>p^yfFKi2Bxn5IixHclAA4d(TDK*g>1V8EUjioas_k*Dd ztPaF=u(Rn>G>Tyzh!+%LQsErx@`Rm*%hmq_xk;{B3T19&b98c-7(oLK0X3I_N&^)F zH!zpM>jWu(THB7?xDkE#SIk3z)c|g;co9YI)5i90Hh}{hn*s9RHL#j)_OxKN)X~Lb z8~ONDv8W4sq?xuI%!AkzMHY*Pr%sW>uVVP)S6O_OO35;1uC~W#v8!$FuBh<)-=1;b zZUYTBvz9Mzp8fc1l3ekaWpT!@Zuax8ZgyAiqL+t%{M6azdLyNb)KAwNrIP4h2V0g@ z^`bAzuBhn8%ldfCt6h7&5h6`Rq|EjEn}0m})M@v{L(xJtB-y-ncCRI%H zG#vPUmrq3pUNdR5Z|WnKOq4J6uN8~A8V1pv)|PhLEp;g~rVSt3l{LW0MD>YX1AcY%_r3on z3)U}zzV-P6hQ8xWrsIT)mR1EGJnFA`bUKxPh28lHbO*aMih(Yad~_7eVm;d49UL4t z5*If^WJtynPA_e>E$gAZ(>(DfC;On<0)Fg{Em^}w!X!@~pLEQO9{qB>h7tO< zqaki#z%;V-;|?~6+vqrGcgQQMu6>RDPoI}m)zwtRVL?)@qnm@JipF+*Q_+mMggpR% zix|wf?eeZ~i7N{CRM8jP)Kt?~rES}#iDrf+Ps|e_lcn>u#U87=qd~^WVJ%G#OLar9 z{p8$BZwzNk2!@@FI0I(l8RNopNHy<2U zvBhKyeOWKUGgB;ySM3jsQ-Y;t+?xO_CHcxu=Z1+my{uQwG9l)uKx-W;a29Pp?0MRx zv0zHb5VFoGQl`qJL++54aMo}Lp?1nZHSIZ^!f=AXYTa;IjA8FAeXQFR!9tSR!_ z(vL@wPGR#R8EjPIh;TH)71lafqT-mdjE`P?`ReUoZ+=_kV#DGQSHMMW*ADJdiW#t; z+~r-2%#xC|D%H+fs>xgbq(^J>W{apg(C<^;0R$RyRP!1 z^@A;jYoR66%3LtRj3rtIVIeSoaG1dqkpnmaY$Ox>jOo4t>@MQO(S6b3e2oN<0aaCb zSA4|rEmiIc@Ieze!3gJsmKrR3fg8h&;1_v8i)@O`r@R5i+)>}RXvk-89gV!L%i2@D zNI4VIgbw&4PU1focLo#b=e(!+R5ZW!I??V6zk10vj_nibLpk3gkO9j)xP_gr$m8LyB$-s>Z84;6JCU3~W~rL)F$d#b|=hKbQA# z>cry^9NCJvRmo`o57gbr31^Izz&^;bZ)PlyT3;D}_64wn)F#@0*?r!Z9dMfj>U25_ zYVQxWqS8v(zJRKL9s$>b4j>r?~D$Ujiw#8bFF4F8Yb5kZfsnDYK+< zq)!ArK|INTepTq{U?(^#$oD8tmvX{%E^Aj%pD-->HgnKfPdOxa)eLh^{O;+wj5!g{ zdHO=kIbFZ(%M1{Ir@l!F`WT~~CjziJ0c6z53=~tD_}U3TZ~5s&J2`J!s#%_rhL6>^ zObKC`rA{kJ;}anmC0Mx~)eV6c%Z)wOj>sIBV2zVZ*4ubII&rXrx&k6MmP;sq9y+(1 zAu)>?PtT(D*6yfRSU`|s2NG9^nQeVMxiqn^FeLyweNN4PZb_qkn5RvO0;i|%lQnEHOV->6d4(aLz>p>Yf>6Wz^??Y&`E)w6 zb;=Wiqvw*(x#_s#lt3P*IK~RcA=6QorT%$y4J9}*DM|a3E z{qf6B(WdF>U4h$1Wok9>IsGxx)#m3FeKVu90e9GcJ#6pRgJ3kqk}dWVkwJBh3$~-T zdDk_?ZQt3}m{jTs+odJmVKj zu~6`V(p(M)D2XTkKAm?wCxz=W+JujtZ)@jfuO=x&A~C%*C}i2Q+~hBBUcY+#?^lZx zfgnDAoj-?C61zW828`wT=0StT%`+P6a|)2xJlNT=>h^dVP7@!lh0{W~b~=TupxR*L zApoJKoAZcqfXa^uElZ!c^X(-sqy`j(~x$pr^^mAxNVc%EDZks;Wiqz{KYxG4ZBRT$aF_>CHJ zmp7gd>b^Vm-8!Je6sZFIh`K3GH(YT_q@!R(r$YtIb%c%3A}Q6ALSk1K+I zvrW9RfgywE6MGOGJ{C<~4bbo*2zh8!U)1>Quulo{xf+5z6mUUZVeUgk=Rb%PCA~6$ zCVs+7tW8MZ(fo8Luue*N_Gk2Cb8^F+pEaUdS4<@0>?E}wj^Dks3{F&sd}Ic+P}xX# z44tmySBA713^ieGF`T;_3@MU9Ex7W3cv%7E!au(_x^ov6Si7fZH+(*~XZF>E=+eL0 z;!K=9j@pEFeEVhWx$X{|r5$XW`=YhWR}+xb>$7`_y6TFmw=1_3!`t;6hy)Mo#P{Bc zW}Kz&v|;A)-)-Bw6eAh-C7wiqR-sZsng!2&^WpHyZ&W-}^1r7Gw8ax{P*hxheE)r_ zhA^uBANQ$2N0;BH%4GFEHD)SJF1SxMAgI!X`&6GKA;0MmXe-JLidsK$50@q~JoC&* z596^Q!QEXjT6$$a*=_HaSQ<|P+1mXpPc)r>+WdG*##_q zG8o@DsIJ_=D#@fwp7e-%cma!lT@M$qv<^ti@mY2<-O6%3+{$tiLiikRWqCrkvQUMG zld&hGfYf}9cwquNq7Z|eY(?SEDSU8S8awF6{^$k zxt5)ApC=gmF)vsC6~w(-Cq1c{oRV@Beh}`ucJn0 zL8t~31T!!&Gn2swD1V(=ZI9fx5&rI9ao?f?ELMDzs1!kwq;BB=eL;Ib3pfTU@9OS^ z>`Gfn>vR0;J1-<9?Mio-!Z4PiD3UXrdFGkn$(s!R$(u5}DYO=)aW}i;n~Zw@)qiQM``c7&otSTLQ)6uM z&&T?3;I1Fe&0%a>e)zFF9;;T zJ{;l%BJLQG5_5m0C#4JM8NU7S*myU?YG;RGBm=2Mxy&UtmNt@|$6-#`D1Kz8=qgTZbk5CnKr_JL)fMA9eS* zQBZF_SFhGaSe3*6Y2)?h>fnbhPC+SbhEd`+&81A<(|?RNskVhM+IkI09)p^$*pl_bUy< z@ts)HM{3dBQdtVEORp0=ITY08!oaIsC}U@@z>011A>AE5hGxYx=W0H)v(R)wg>7}L z*VbPuI)BW#HlHknbTW+e*19&OvBJr?@akMv6sia#yr$t~RwlDjSdc#K@8g=WqzaVi zoLlPZeXzfBA%zsVQR`AHCbgMxHcElVX|gOCf=iuFho(knHPVsK;M=}F9jaYTW6@XH zO0YdJxZ$9uW_;|}(@|+|#{0`?y-a@h;P`?)ono)9SSNyZDhDYBqPJ5)rCy=X1 z>W8LnS$gQ}mV(@*#tDQYS}S|lU)oT_0Ul!7)O?b`8!Itp97;`~i6 zvVUC85lBgh1mxGH_itF{>9HEQXN1#UKZ4Q-t)dMdI*@v8Mc7&?BQnC-KlIg+SJ|^2 z)WHgL2D<~v7KU)QzPi#vI~^@xw_yR9y)pn0cvqc=dRWtB4u~b?YaB_6%*Dwu0OG`- zSRj5tSUXeP#HT0pvF4T>2s+@P{bpteO@EIB&YzpUYl9hh^+;O^r^+ioS62jFTFl}|of_(bMSoBDD4k0C%1rGZ{D&0*anb5UBk0@O?E$iRpqa8-U2an;E& zvMa~PHk~08MVbE}&cH@kNTG{`dv0Q`ob3O3%+)h+uG+Rk0j!?P1s^7J!KZr)<$ur^ zx}zTepgMFd25svQjIgim+SGHfy03^Dp~p6#QBD3k4`;kagJGXBR|=CCOKUo}2LNT{ zYULL4f;4Ihn7HZts#yhKQ;MvJM(B5eGY411cH>tAiuvhK?*Wkv@Qe3t*aPAawszG} zqv%;qaS6Mazk#%V3f#xJul*F?Gk>E@OYrD?DdkLIBWlVYftoZW{p17p^UQ4g_}tv{ zAhuKJ_&Jm2P;=*Wz$yd;eh3GQ8!TP&y-;x&!j;Q)-*HZc zA%LWY1|1-p5u6umfT)*NIbkG@2)clFw+`in5}CG_8(wDnBA*gGva+jPeB&26RsGC< zjM@w!S{SEZziJbNI5y+RzN6ekEOll?kzeowJ}Jz-gBlbtFGgJ%@qbkkP34}Nha9TG zzY0E14|5RH5>b}jl)mk&lb>z%%vA|T>Efxs`}h014P?ruQDLhwJhH5i;pt)t0v;tG za$b5ybaI2Je{8UvF}&mkCMfXK_1k_xFMYy#-^Sea^lZ+Vfo03$wM^*d- z26OasLxhp`s@O}>xX32spGeA>u&Yi6r6$b(}5qGOqY(9(2`uqG-RZv>o<<-}>T z{%ef!R)6H?B6nlsm=&$(mN4hLz=7*AqQfTrvajE|y{HsO?SM5d!zEp+Xj!h+(&g+X zL3(?IKBVN_6S8mYty({dlM>cUv**refU@+{ETfCUVCOeN3X=iePD zRQxkvJD;FFzClTY_H#qiQ-sSBhQ}+kDN5lcGJmoiP34mK<`cZ}6PBD8J0;AdO|U0n z--=XxcqQbq_9C(k(`8)HjDEUSe%N&fUr|({Mt?Fx7vn+7lraR?yKw7Duj$YXipwbFOKHaA z7rdEYIQoTVm%un8R+hW-Vb32=WixmfYCQ6g`7JT)zVD96-%Gx%(&Z#Fv|%C0^G?+c zYl20t7@hGA$<585Gn@Tq9j6>n|A;}~uGYBbPWBBB56kFdW|f!q)kA6^tl>3}QWpHU`ipYAD{&DR08qXzMRy5I7UoT@bA) zej27|(uVjLZ~w4w!7Vnf8dTw4M5$h$ z2n)Wz{w_R;;W(QPmywvG8~&oFBAix?<^Cmtf1u>}+Q*d`EV0@3{99eU;V|kK9(ac4 z+Ud}9OOyNy|JH_QYQvu#{SV~{W3ZPIK?4*4Hj^<-6#+4qk&^=|e_C6Q+_n{d_pjK8 z0-XUYRlJE(`cOEjo4N>E!(E^cNr1{T+8x0&(ni#HPN%BfyKN$+wQ^&! z?a%lBc=h&vq`*jdBdIv^cW4#bruki7=u{}plJe-mX{go#hbYF9hnWH?lV z-!^P#H@>Igy}K~8=Emo(LE@U~=rNZ!@|9XG_=EL_f+7uijSAn*4 zo8%(j+|yUjL}e`nApQEr-n_dFp(&dzWAk?HY66>;l~U*RTqiOf{0wDoKdygCz`=uCvq z2mI_A*TA(zq~d*PU6{ z>%QJcZB1r*stR!ne@&X{QS0hoo562`tman5MD_J>?mfwDRL67eb;pQQOS>?k$G)yc zKL>W(GLwF*`+qKtkzACiEpO5OFsE@V`2_y6=|e{Y{PfQ1R~`x?9H;!02@P{ll!6=y z47OdHjBXF!FFYHZQ(B~Up)la5J;CKd6e5*E2BKTk)yT0VoIaDkd$j+?IEQ{UA05J9 zV#}M<%F&4an8y8JCekc3OD%m#b5v@IQ5tR6pU9acN`DG8ku60C!46Pnp5-`3=FzzZ zIb0oibh4?}*a1d#9(X$1D$Y3JVx5mZI4~EB3te6zJ#7p5xbxG~v8nf7s4gZflc%~c zqi^jWV+R)?D>H_G(G*Z3R|IGbP=CApAj*#( zVn_Cw7k^;oUOqkYKQA|R-*@EcV31%5^o1Zmz7+>3AXM1##X(FoCfmGw;31Yfe1xXf zQ!s+w9nL*~(0A-3U>s~SW0b6z6F(0}KH1&ncANDM@+cP$UG3Gr~pU)DWE zEwl+^H~Xe~Y&!?RoODLn{fCZc3O@?b0)Z&6#*H5y zBM;7?^PmYf&hbIU8Qexw+zK|)xkYB409YeLEz41B3W+mnNoA}Lh{`G?%DjZ#tVl~^ zXMaKC?S~InAd}V$y?|ZVx#D&}ddJNSIbCQF1-}Pj+8MKH;JG232dydE!=!!V0Irf9 z5JcM3dTLXDrq`BdH4i?D0Evi*7fkS>NzLp941aAe9Lr+J3cUC%8oX#P;4j1k5<<{n zq^cL~^XY4j>apxCr3C=<}iUVkbS4hD6h36A?5K*)Hipvtt&i`(E~k>~4F z0T+*kN(HdUh_48hyw;dn#63keQE)B31GX>pxG_KlPz;@GMxwwHVmk3;bTuAoNJvi# zQ7-(}Xw7t1<2i4Fx@r)fSJyDU=f=4Ot#?tDTL^t-o_^e#09jq43dB&T0_dY|lz*a9 zb45gA=d1u`c?f|cUYVFb7Wk8!r4e12i{3nR=%U)a52Rk%Nn<=DXxg|gnzUFT(`$?= zX5tN|#LtD}o(pH5KFnNnur{k`>kDg>B}Q9#gq$3YK%Fy8#N)U+j*x<31NcC&7(G*_ zXQ*{~>QX^ctZu_CYBHGBcKK3>w0|K__yqtHdjydhVIhIUWXyX=1V=T%Bl^w z0M*eq$-G>pfifT!pqbJ@$pDE#tte8NtrDGi?izQ5?Uf9|VEHe>j8*&c-=T5`+Nyx? zuyjN;lo%lE$E5!`w4Qk3Tz@Wd`wW0aIMoAc!o{9`l*IP*NrZ!hhhY)xxx$Pd#=G zB2Y3BfVo%lWl%qBZU8@G@??v=-Q#W7jmZBCW8}6DJ2M{jNZT^fMw_Vm9kT7f^MD16 z)HS;goO1p+79oB)hf2_t$K53Wt+ZI-?<<8vOlu3Baj945X5u5f<(%hWH-}ehe&jrW z+7r33zSunSSHq$2&VP>wo-%}$_Ylu_L)SMxvs-0J$Hq|>r!##8vVaHHlNJ5p{hRy0 zN0qTi^QqvBrEEa#Z`we0hLEKG+;nGm{E}Q~U?3srnScv~baED=czb9*HUkSAJA49}5pmq|0)GHIMwPSWwQ`-XHr10M zqX{hB)f%^EY8mQaD@^UVRRwy0v_R5vS&qi8c;!P#K-#kc+e>&uPg3N#U@;3^6)3OC z072#?f<9XEg0xS~i!hwafeP=cGZm^>oojA{Iz0Au{CvQ;-apc90@_O$_j+Z6b+cZ< z!12=h`Mg%v2!`S31gvUy7i7kj1>{L2$-e;NwjKIxdZ%MJU5uWe5zOQ{K>)1^*)qiXsS)OLa%JZ-Bu;-&N8U1g^{1!h~X(nU|{Jjc#J1nJI*?2?bw~pqT5&Yc9r3da+_O@Hzjw zV>F)jd4Z8x4D*y(U8?!u0R}{M$xt08jOsX&L)(KHXgz_~@ajXVt*&_hQGm0QBN9oD zQC`6LrhhWSRKP4I%SUZF4^Mpg;BS+spvN!!Ccp|L56gWP%Y6vj!hIqhy;#^6md>T& zwB2A9-k@-w~_?Ow?e`o-4llk3| z7>ewQZ-uoc5QcBO!#c4wMYy1cDgF{O0;}9m4d>O3E?!ppYuxq-DYU;jibm@Ua;Gf+ z|L*z5lB-9LRNnPv-l`p|Q>!vPPMW29f#~2ou3Qq85LPf_q%2Q)&-c8)lH}otPr`n9 ze}5%uf)rx;(fh!EbPd+qI5et{t~;IwdMh|CpndbT0Z*aGIR9pM20uPujjo!y{u5tB z2s^^%FIz|?$Z?n6aTnJDAo?azjABUMN4*6wYPz|bmmC%1zIEN60-`LD{aY+3`Iu<@ zWwVyWJQBi0&{C>2(Ur)aXYjQGj&ea5U4K)@r?2RD54gdX84mA`SmMEX$EN*+Fv%*u zd&8*^H;}V8*zpfvkC=49^)r03&V>}qmlsWtBhHwey;xmGVaF+WJ$zXn8JCY78M)6%!?^i#=;6F}4 zHTWACoVUl@>{HW{o?-{F0w)FEu=YR~KTcTcKGl(fs?S`6Ubu+DUz!nbe6jn|OQ@xn zz#o+T5A#vq?w1ik0~7%^mqDlo69h9cGc%Wga|SAZOOM+|62ALa46r$HuvUltCU=p8 z?RA0#*u}z`oE#rG5;a3aq7;&{o&EJ&)z!^zO5{j}0ju9#@A|4a{4R%o{I1OJtdy)& z#oc=UDtDvZ(;YQF{Pc?Zbt_o7N>;voc=i2{THo=Um3hhU9=7RG51YG>*}LcJIMm(! zN=li3sejzBl+xL+&-HFcLvK&bZfIKSygTgoRlDi$S3+1TGR^NlJ^b?O{liFs7UD)y zapfhg=8RTTD8{8CTD!X19NOJqctk|0)hKApR3(z{-}Z(X~MEko;b#sUp!IS zN^r|8&_~>swCUef_XlXjh^(&G_oB$2{oXR&s}&QaoZ)P8gUngZN2;ry&K>1h$czDn zGS42KYnuCfuXTpp`L%~F{SMD{@0Z|Zes*6Wfq(h&!$6HkFry;#tBHlGeX2K3y(>_E zyv&hj$++f3*`q&337++*$G-maRJZrSW&@2?ecwE_dmJmW0cf^)k^Q{INhIx_XS3Si z#R4^(WW){2)u{c$acB-L-P-hlqT_Mb)SK7nMCwJga9%Q_Z_$e}Jgn;KZQc31 zh671SN>H#Uy_mfIU`Y<-kQ1w1WZP4J3%sxISFjPu=BQ7jN~g~`f#e_%HIlcgW(A^I zA;pD2;O2c@wLRVZk`PL8?fe!QfHW^;kUJT;J1T!|({AdoU_P!>b)7dlCnuo_kdv62 z6Bx09g-!LitN#gRh-c0V#BeZ>k=NCmS$Qa?qe_E3M4^H_u=%1qaweh`F3CfGl#H7T zdEnV75B#nCwcrhIBwIJt(0slpXLB>7aGn6oh@m{G+QnQCU`=yXH%hhxIubL{GMy{X%Ejn*vWNMC!H_c_ZXw>Q|E zjG?f5I)!kOa7V6}LqyPO;(AYiUd%1V07#ezNUVy>tl84Oh-{17erC&%lLzb z_w<{_A1PcIfYDvk57at%A}SXapb--$_I$ifPds)F@m_DdU6j(vaAFpe6f`6OU=NXm zP7Oj+__r?n>on>^=hUOW;s!Kc9O>$Q=$iH5N5`X2!|^mwo0dvs5W6ma5%~2k4QUbf zflO+@>EMDoh;KrAlz@bw>LkE0dh_MT2x&>GE2>hErun(5@P>5-9HUf3!V-mZH-^Ho zPB_rnH2rbs{S-yEq2b1#RngD((Cw>%riN!|k^e%15v86OXUxLDUsMBhy4ov3amxM* zqbX2_!Z4N`OVO3^lg0~w8gb4<+x+(JVYfTreP2e}-K~*=ALg7?6c)nUC_B0-f~aXE zgn+9?SAC7A28$Vq#I3ID^}mvU&}?p|WMcO@_wj>lP7=(vDyFX?m#1_c31a)w(>j3Up+d1Yc@3KEszXDSf;F+ z^6$=ueMtnt?xC%HV@tm=e4R00usknr$XrJ8rO+yhkqknJ;0P7Qk!~C~*W9Hr{H2qiu|0uj1S?+I(nj%|fkw%+h~PI^@db#3>{p11jNq0j z5o0l_U1D>8^mG;4lFqRb-GKg3h(#XhbR1JeDFiF>vw|Xs0l*W4XJDzvlFMDly~V=s zrXK2U-(YaXb#yq7(H;j0f!Q!w1X;t-i$+X} z7galdSFn}|I>nAl37`<_4SosvP&L%F*9U)Ba+eYAam&Ga?fLtNw4l0m*Bl3G`}4DLtg0;uwU_euJgHr0Bc0?^oLWoo-b2D*hVIYanA|8 z*P<^J!mA;&)wl|6F7F7#th$zWczo{Z=tPfym>|UgC{O_0&!Rr&5%&}j{G{|nTIn4X z2fUL&D>?~u5+y+I3)(<)k4eK-KDx@~;PsCiri-lAT z3BX=Y)ux=LAw2tpI4~yZkOJWTn51=Dz~EHaO$Y-TyAYau76$&Br?&Y$=W1OMuBL^5 z1Fkd6nOv=q(y+iY=D zj&Qv3zwM!2`5Fzm*v<##lJVP8YAI}gVn5_+#_lcb*!rcuPBE0~pO#<<)-6fM#=^#hg;)%YJ`Gck z<4f*^nL!*h(q0L>Nu)e<^T)s%^{r8NzTgrHE);fJaP`m4c37ylXzqn_D`(MvK^Chm z`*O8qK~B!)lZ$_)i9HG zc|^gqdAYnYVB$P^BPnuCKDa=k%#MycM;e6!Gz~F*pWSwc{VYWWvaWtn#uI}6K1cFI z3mhS}LCOV05BDSI4F*5H<>TFd-~DajbwMi|pH9$&tcJ*ePX-(6j1N=iPs_X*t>-(w z@M%j#3%h}24oIdnS4f_G30=*W+382no2)?FJo~T1rlYQbcLRbrb|D@1b$GKTxs2!< zWfb5Feo`&v8C>z9694yrkZkD!qCpghuN#XRlf}4ZLrT@|Xm zYRTVZ$VfBUoXN9O+t&k|yV(dZwU;qu$;wzFIzgWt^fT#$G+a{An9E=FQ}Xr7jb5sW zcDd(JQg04|D$4U$UiV50@#EmXQq+H*FnZw7yiN)zGQ~F;IvOd2s)g5`k{NqdLcB~7 zBNFHFg!V6$F!I#Z72z0v7ksN(MRRP&isKgYv2M_1{C;u~Y4N^`NDJ6sax*Qmy6|bh z0RlDo!tXvSEaB=B3W->;wo8SSng}Vqh@emi2ODU(Zvz0Khv_#8K(?oSs4a28)&A!n zN4TT5^a#*>E%68t+DS>V;<*L~&@)f#0B5`k0nGSk`#A?P={xg(0_Uc*6VBo6Xbf`M z7yyqap<^*>#Tu;H#Q2ST4DNy{l zfS1DZbDT8&qni5bv71Fg+A_$@(<9%9V#~cJD2hM|9ASNEHxXsPI35e~@CC<(gPVdC zvbaVA7Td{3W>;x{!DVCh7w;e61YyV(sW6sP7atIY?o?Clj}z`|GyL-S4PS#jr831$ z+iKUlU9Pl|+57M}2~e@XAx9rmtAPrkGJyM><}A*+5t!QJmtBhC(2IV9yXdE{FMfxQzsAKzB} zGmX7V%+QngfAx?LAD0n90}}!;H-a#+giTl?1&Rusf4^TfIkHWTB#J{b@j+_M z^rNc!tFIp8l3Z{S$#HfuBz3vqcP1AxF4<9HyiSfou;nY0%B~cr8l6yZTFOXB zT%v04)un7JO2Cd{PsCLmgC~ECAEGwGpE29H8EYuow1O8LFolzg66`EnE?hZ2#o;+NS_D;vBRs4itS&kBep|ARYxk= zB0>a8$#km8QN{~A!-~qLOwF)NGKs3=SZ!a}iWo+N`b^n$s>Lx!9btcAG5d*a!H(6o zg)LzF(4MK|LNO;e?XLZ2)E^0lrcNp3-hrY@~t%aAgH=@l1cQMNRF1>S_oky22Sk zQ(6<;!nOslU8QCm*rft57^Uc{7?LA!Tg7k?6V@u%(X(fx@k{px2r(Ca<;K7M_kY+G zmI!WsdwKbG^y82BP69H#q2`;3XN&pDJ$vTHXA0k6&p$H(H$&V+?w&$oZDXt*|FT?M zoKIKojT`^+^2~pYUr#@;+}*aX|G1vw#pJ_uH2yn|n9f%>=JRapN8?x1o5k(&VtTXY zm-g&G)AzH2iHccx%F3Kn<|0 zCq%7Oq8E^qf`3yb&oN=n^JcztH~z=s^}@mOe|!CL`dg52{&8`=vcZen+2v|B|G|uN zun^`6sd#^*Pzu3kkWI?f$8@j^4I?EyjJPM^;|PpX(k={&9PUv?576%(ocF7JxT>{B z)jUAea>T2=#{@^<%qqKTS32C$YuGq?jYAzBxsgW#DeNnZi4@mYWEe;?eW|(E&CWkg zFE7o%e)@bpncvJ7^P6FA&dTs@^KnA(cN)cKBwc?L*@swrWq1XnEwOm}@CJ&?dqkA2 zNt~0nMECKD2+eUj^z_55-;KTw)5AR~hR_48G5}g@kz0YW!C2~^Q1>Jc4lfeDLQKUS zqmr}eqJ)?(4*qu}zEfSdBDmwd_n z+P{Cmz0Nn0Z6nDhvJE$b$xOK_k?IcBd6GDA_Vl3)WB|b5zeqn&)1{a98!vI!-@5KQ4x6J_70@(Pwbc2o) zV(6Zvp$tHZL=Hw&5O2xW0jU6imh5vWr%Qh^2?sVYQt&A@Ka2u7GWhA9*z^2yHo2J& zB>@8ASXV;CTkEPZpel0R-ZOum-K>s4dK`W0cp!#VAWsDW_j{ekacxSj?2EN(YVgte za{=K!_pABS{P)>%F~0&fw_Vy|?xQZfJt-$b6dfiN#w%VlJJ46(RD3+yh#-wqN3~GCl6w4+b zpBItZvFe}L<&E6KzBGh=^M*&cV_&)>-HvPdj-k7XiiQ_b!AOVp?$iBy@os4AU@fk53rK)Qe?UCl408+0K~ zx_~Bwzc;bf-yyk#|{YI>)|aA ziSn|24_GY!Xui9eTzooWgVIur)})DEb8Ib)g5L@gNq=Eyp~VFFC(`?kP)9Ni(hK|l zOd1M)$407Z9V?*ro=RpH#PR`o{?+8&9b^GsE4Ch_H_<%;;USZ_AX&&yYoC7Gi1}{c zVxz_$KCMsV)2~(6zt*?rsJg44@}Bx>-qlb3TKc7)x=zag{pv9NzUlQJA>OB+`%6!} zzpvwcqA!vA|Et$5+LsYQ0~M1Y4HN<}Hh)RD_dK(ySrbrx;ySZ6(1kl=gAHG zQV4%h$iMGPDOK_7qdT2w>%*lxP2HIuKK4&f?fE$FOU{kqh2s0qcmH|!)7>nA;{1)G zBIONPnKYH&=|)yeND}v_|2_|H9J~HJetr+a3SB(64-QsL7glY>;fhtN<};7iMT*qr ziaaCMmZ=x4!lQvwCkoV+G8&kBlF5xzph|!FnMz6-sg6CM+Z1jjozDG)3stm-gL|H6 zvpw&D{x^E~LLNmAAT+-E0=a*|8;BK0dT|-O@o?!ilvf)b>g!9aHIs*1jn$&GsrZ!19EalcRsiZykFVk zjv$9)|J*BxsnexJ52C%J3nKXp=h=lf!BV#HX1sV41u&9>o5b4VKVVO?Vsw8lk(!a% zfkD6p1(dS*d5sD=1X$z{FbO~-;-uT!5rua|@|3S@uOD2D-rz^S*G&GoCsX<`3MV}+ z0l!uwo7zAbURMod53kG*M5FnOapSiiXR1u>4_B6VzLM3BOWu$*e_4>V5_4lZjhNiBRRFMi;v8-O67bpt@8Vkf1m?v+(&$JK za2Rym(QRahGV;`(LW%~An?|I8;2qpY={mbh$`B^-_VEC*gb!8DBBg)AW+5>iLcnr{ z5xn9?%;l-g@$=xSHM0YKq5dDc$T}&Tj&=_H z`Pg9%g%Br_bqgVD8~Xu#*V51ECVGXDjvK?}1bwQ`1- za$U*h(iPa(o8A^u7s)~iCGop>?4l%{a$R0>`G{Sg^j8m>R^EUAJ~rtyNT+YfyH%@s z-HpaB)(;vBq^Hx1YVbDzMwI{dMlkXC#&;eA^|mI(!S8gT@A@Movk51f8Bf>&;@Hd)qGm?43Ax6^VFI+pdfKSee51p#07~6#5!XRWc(VXq zDrpETja01gcM?9w&h79m*Mz3wEA?D-sV%2HY=S}) zyB@9uG-8r#$n^lbxi#-c>T*S%8LqcXy_CPY1GVWWjjkjuK7DA%N4l{1xK)D&nKIZ2 zvN7kWYtB~)LdPovq3hfgf`Kvxo+ucvG{2=~q%K$FxhsE!4b!NwLjFJ!`U#by zJJRDUl}cR<6*giyEm4@*XWaJnJS*OupyoUq22_IsDn?lx%!6Bv$pi(9=jT%whpq0s z8UE*iRIGmo+R(Q`jaW4{&Q<$^#tS$5;Wq1vGuk+=`GuU9QM;5wc;L<^hz( z=K)-VJix6kJ|bK_T5wSlNjBGpqLv}%@#S^QD<*$^A$gldk@|*4Tc)d+_kPS9nBRCV z3OTq2h<`avv_=#281j6RCGeSsxtV}QGw({TFo}M`=fr`l%hjbzk{`^vMwwVL4VIp6 z2+O1e!!1jdK?jWR_5Sl>yN4_P7ZufeG+jO#c!!>urKW-$<@)Zo`Q?s30 zGHid1LDjd75RN?uoop;7jh(~#S}a?~ zS`Avll*u+z+#;)eK~~AYS;VdDvTJ`~(I4t1P2wShk`2Pc0%~NrmD)ywTN+1`4}vAN zy;9OZ$M$k;y<%t?4E-|(?$>T~+o3ESNsL z84e{%4xM=62ay!T8P3OVW=Qj^6n^}wNUw|#tdRLtwf~U1(f;X*8h1Z^;C|i)CTfxAjy6fF^63#oD{@*18^5Gn_QOb> zc|S0LM(Tl{|H6eqFnT2zp_$AS2-4B`ji0j;o?<35(~KW(U^OiR_1+H0=7iMzvb9eo ziiUdKf^*#DhG#%sPtxW@VchlBZcg^0fAhq?9Dvq9t3ki&_6IN@Sav`mEXWU%Ovv^S|)QSh~@NmR}g z>wX&nfj3M*coX;=Q0t%T!QP+&dg7VMRyK-#+!j6$W$%m>+l~P@`PXZuld?IMgb~?kj|v8DjclV}}LAcql3#aP`C?*{>*6>$hwQ zmZd1Jf(cO&9W|j9eY@{wbXzFpE#Qo+!RGIf7!pY*@%;5 z#%b5jLP4KLYr~Y7z3$67m&?zBb#zrBS(<0lH^09Gb6lipw{I;9nke}6$saCVv?EBj zeK~f$k0wLcyZB;~#zn~&z_q%$PqCcOPR1Df8dW(rhMCl?cQ<2VHD|yM5nI1Ru}ZPU(woBu*Z2XU*qAWM zu0fKZ%@6jrdF5~+UvP{folRnMNowX)DBweM z(Ul5qNf3b$tdp7l8q;2ifXb`+hk@p7Yc~s0jG>;gf9;C{e}!qE9cjqfC=B`dq?0Kl z^4)r*_d92`FyL)+`3c$N60V5tXJooWMZuB)S3MXu*p1@ijNKRsm5_PgZqjsZH?TbA z7tnAi^L|eTI?p+aNC7Zau%2u&<%%Ck8as^&ak@w5O$zS zL~+iQ6^EieyFe#}TG4%{y4R1;+4^Ew?aLw6i4sogJ3^+Ogxn1dLdaQL? zhVF2r697~{!YD|K#HY@P4;`l|T?ijm@>V`7;v~v^e}Z^nL&MNHf2(TBnQ_o1rLN_y z#>A~=?K9tv!YVaX4=V`*r{}sb@I#gwONpq0a1DmLmXfzuvAf_b<@#-%K-dx7tX)zj zPd+%cH_-?VS_~#LB_pp4OEY6;XFp8&ny27>Sh`BW<7WyL)QNGp0yULOkAR+6Ssqjd zgI;B+e+Vjb<1d06V>PDP$z+ zL(|Uk31*>bfYJdB_c((7WmZht;wyK`n2^DpnyBg|Q)bQqx&s9ZBv+Nd&_MJizrps* z1_cj%9zq_CGfEnDN^vbzfZKtWB2H?{z4aR_f2YF&o@!QPX5|o|;~M3wF<~xV58LP zqLX~ZgelWW#WZg!7#j0uy6`EMT@9uGUY3iaPcZg!@W%vo3*d`s0J)<-fe2?XQQOI+ ze}s&Amdxi*Kb^t-MH&t;k74u0ll8R;+7$5G!CrkypJ_-_HD71t4#RRl(lZGq&o0(d z4hcfB&{7Q6AoZO$7d_)Ez!K%+NFaK03v=dGZvXk|J}RSZ8Psl~c@Go%g0x2j893pB zwCs!Z^@7Ny&&_b0kP#Z*Tk)-ZsYmA&e?{S?E#uPWIc!Xe?~yluTijsp22_5M>ip^U z%2c6PlYrKN@v$oe;HFc z6ow+A>nS(od0qZp`%@g1KfJ*Gg2NBzgP!pMp63>&?(j~Ec}jSG>1m`JvE zsQP+}v(g=(M}qztSmuTm!NBdyf4H>|$EcM{@Sza==fIARge>Xw90@Jp!`b97w&bR<>c*t+g!n4SjG;a!Zqgwsg@2A`fLz~1a6vhcYFWy-Cv_?feD0gc0*u9a=e^rdh7pFSd!?R>+mGqb*H#8@Bp&n^I%yV!OBQRZxTx~S) zoadJzOwLRmPFCZokYwu(;fb-eX zQQWG*5U_`N;S`G};cPM}91peMep9!e9|Z5`T|Jp54oyWX)o8$#F2o8Ps}AZ5cO7i# z9{~77^E8HzSx9LvVS+bv@?`R9`v`34n0Z0p<*s`4BhKK%itq`p>CZQhu8;{UQHL%{ zhG;pBC6rFuuHE2uP6-uMm>bhLU8~@&ox#Hr$QqPN{_P+XU%T^CeEO3kZ2Lc@pu@TQ zQ5XvUNC9XxIX_pT3jhip^20M01SLc&*JmY;3YjE^qW=Sl=NVy_5kUhK0XUa%I|LL1 zFfcNg;bsFVe;P}3 zJ$(4vzq0HuO;nkb>D|L&dDO%H?&r<-$LccF-Tl@Wf3vZFzu#J$Z9X0A(}|b98~thU z4gdJQJ)f&)-`{VwE(*QL?ES9~|M~FGhY5pB>vy7xkZ<6c+Ct@bxw9%YmeFn60Z>ee zP5rsv-EY&)c%N>D8fSan@CP1;V~rEHIaK~s%jS*=;0@pN;-%{3(DuMP^6eG;$@c>1 z&*ysYf2*NBy&?mEplxbYnlX-t_H=6RwcEV-<_Q>=>P^)k9MG39>B|#UWE#Gv&&Fo( zCjncr!DyA(39Rj6N8$CrBY}B20?BV5^&28tzrNtmcKeTrYhVXrjqJdY*g=!JM^4Lj zgieHvVdpZH=_1?ddNKX93@DzKPPEE0>gS(4DEoO?3b9 z$J^(KvJ$?#`XY0Y4{#_k%IJK}p@~eB+92IxlCBMUU^l-cscouLTtbB^bNdF#AZnMr ze=X|Fy+JaFIh*bx{dH(-Al6s>k*!H0HwKFp|GfAMI5LN7)CggZ&jsi&$RJ~GeJ zqEI$ZSGEqg!x4tOj&@=yxF8q*wdbE*J&aw$^M0s?v1fQM`;UwXv6{{!B3N5HQZ`&2 zdjyCnT9GI-8_!>2%*s?To1g-HfU_Tte_#}hN!1DF6A68F7H!c*4*KV=wWZnn!M9D% z!J!ozUW17l0}KtaFy^Ln&{`F4l62j5^=CiCD6nQp!Y@gd#Llxy&n|9T-_)CIaZoBG zT#z0m;ξ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 z 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