diff options
| author | Chet Ramey <chet.ramey@case.edu> | 2023-07-25 10:18:35 -0400 |
|---|---|---|
| committer | Chet Ramey <chet.ramey@case.edu> | 2023-07-25 10:18:35 -0400 |
| commit | 8418224f32f4dda85019cae063370c18bbd2d036 (patch) | |
| tree | 8d91e88f240ea8299b77e04a39e28927cc3dc2a3 | |
| parent | ad39c5c3d77dfa9d3d175db1fae4cdc9bc9d4d79 (diff) | |
| download | bash-8418224f32f4dda85019cae063370c18bbd2d036.tar.gz | |
changes for quoting special and multibyte characters in glob patterns; changes to filename unicode normalization on macOS for globbing and filename completion; send SIGCONT unconditionally to just-restarted job in fg/bg
| -rw-r--r-- | CWRU/CWRU.chlog | 54 | ||||
| -rw-r--r-- | Makefile.in | 1 | ||||
| -rw-r--r-- | bashline.c | 27 | ||||
| -rw-r--r-- | bashline.h | 1 | ||||
| -rw-r--r-- | doc/Makefile.in | 10 | ||||
| -rw-r--r-- | doc/bash.html | 31 | ||||
| -rw-r--r-- | doc/bash.pdf | bin | 407951 -> 381959 bytes | |||
| -rw-r--r-- | doc/bashref.aux | 80 | ||||
| -rw-r--r-- | doc/bashref.bt | 26 | ||||
| -rw-r--r-- | doc/bashref.bts | 26 | ||||
| -rw-r--r-- | doc/bashref.cp | 26 | ||||
| -rw-r--r-- | doc/bashref.cps | 26 | ||||
| -rw-r--r-- | doc/bashref.dvi | bin | 842012 -> 844456 bytes | |||
| -rw-r--r-- | doc/bashref.fn | 226 | ||||
| -rw-r--r-- | doc/bashref.fns | 226 | ||||
| -rw-r--r-- | doc/bashref.html | 90 | ||||
| -rw-r--r-- | doc/bashref.log | 72 | ||||
| -rw-r--r-- | doc/bashref.pdf | bin | 809290 -> 810875 bytes | |||
| -rw-r--r-- | doc/bashref.texi | 8 | ||||
| -rw-r--r-- | doc/bashref.toc | 82 | ||||
| -rw-r--r-- | doc/bashref.vr | 8 | ||||
| -rw-r--r-- | doc/bashref.vrs | 8 | ||||
| -rw-r--r-- | jobs.c | 12 | ||||
| -rw-r--r-- | lib/glob/glob.c | 11 | ||||
| -rw-r--r-- | lib/readline/complete.c | 12 | ||||
| -rw-r--r-- | pathexp.c | 21 | ||||
| -rw-r--r-- | tests/run-cond | 2 |
27 files changed, 624 insertions, 462 deletions
diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 377c808..e351bef 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -7201,3 +7201,57 @@ bashline.c - print_unix_command_map: call rl_macro_dumper with an argument of -1 so we can use the output directly in another call to bind -x. + 7/20 + ---- +pathexp.c + - quote_string_for_globbing: don't bother backslash-quoting multibyte + characters. It matters for macOS and doesn't make a difference for + other systems, and those aren't going to be special globbing chars. + From a report by Grisha Levit <grishalevit@gmail.com> + +lib/glob/glob.c + - glob_vector: normalize the pattern with fnx_fromfs so we make sure + it's also in NFC on macOS (other systems don't care). This is a + POSIX violation, but part of correcting the longtime HFS+ (and Finder) + misfeature + +lib/readline/complete.c + - rl_filename_completion_function: if the application sets a filename + rewrite hook, use it to rewrite the filename we're matching as well + as filenames read with readdir(). + From a report by Grisha Levit <grishalevit@gmail.com> + + 7/21 + ---- +pathexp.c + - quote_string_for_globbing: see if we can get away without backslash- + quoting single-byte characters that aren't CTLESC or characters + that are special to EREs or BREs, even if they're quoted + +bashline.c + - bashline_set_filename_hooks: convenience function to set the + directory hook and the filename rewrite and stat hooks; call from + other places in the file so these are set consistently + +bashline.h + - bashline_set_filename_hooks: extern declaration + +builtins/complete.def + - compgen_builtin: make sure to set the directory and filename hooks + so compgen called from a script works more like compgen called + from a word completion context. + Inspired by a report by Grisha Levit <grishalevit@gmail.com> + +doc/Makefile.in + - bash.pdf: use groff -T pdf to create, instead of creating postscript + and then using ghostscript + + 7/24 + ---- +jobs.c + - start_job: unconditionally send SIGCONT to the job we just started, + even if we think it was already running, to reduce the window for a + potential race condition, and only change the state to RUNNING if + the SIGCONT succeeds or if the process has terminated so we can + clean it up later. + Report from Earl Chew <earl_chew@yahoo.com> diff --git a/Makefile.in b/Makefile.in index 7f990bf..a340d93 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1441,6 +1441,7 @@ siglist.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h subst.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h test.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h trap.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h +unwind_prot.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h variables.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h version.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h xmalloc.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h @@ -593,13 +593,7 @@ initialize_readline (void) /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = attempt_shell_completion; - /* Tell the completer that we might want to follow symbolic links or - do other expansion on directory names. */ - set_directory_hook (); - - rl_filename_rewrite_hook = bash_filename_rewrite_hook; - - rl_filename_stat_hook = bash_filename_stat_hook; + bashline_set_filename_hooks (); /* Tell the filename completer we want a chance to ignore some names. */ rl_ignore_some_completions_function = filename_completion_ignore; @@ -688,8 +682,7 @@ bashline_reset (void) rl_filename_quoting_function = bash_quote_filename; - set_directory_hook (); - rl_filename_stat_hook = bash_filename_stat_hook; + bashline_set_filename_hooks (); bashline_reset_event_hook (); @@ -1564,8 +1557,7 @@ attempt_shell_completion (const char *text, int start, int end) 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 (); - rl_filename_stat_hook = bash_filename_stat_hook; + bashline_set_filename_hooks (); rl_sort_completion_matches = 1; /* sort by default */ @@ -3336,6 +3328,19 @@ restore_directory_hook (rl_icppfunc_t *hookf) rl_directory_rewrite_hook = hookf; } +/* Set the readline hooks that affect how directories and filenames are + converted. Extern so other parts of the shell can use. */ +void +bashline_set_filename_hooks (void) +{ + /* Tell the completer that we might want to follow symbolic links or + do other expansion on directory names. */ + set_directory_hook (); + + rl_filename_rewrite_hook = bash_filename_rewrite_hook; + rl_filename_stat_hook = bash_filename_stat_hook; +} + /* Check whether not DIRNAME, with any trailing slash removed, exists. If SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */ static int @@ -56,6 +56,7 @@ extern int unbind_unix_command (char *); extern char **bash_default_completion (const char *, int, int, int, int); +extern void bashline_set_filename_hooks (void); extern void set_directory_hook (void); /* Used by programmable completion code. */ diff --git a/doc/Makefile.in b/doc/Makefile.in index 8bf775e..62af8de 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -109,6 +109,10 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi $(RM) $@ -${GROFF} -I${srcdir} -man $< > $@ +.1.pdf: + $(RM) $@ + -${GROFF} -I${srcdir} -man -T pdf $< > $@ + .1.0: $(RM) $@ -${NROFF} -I${srcdir} -man $< > $@ @@ -207,11 +211,11 @@ article.ps: article.ms bashref.ps: bashref.dvi -article.pdf: article.ps -#bashref.pdf: bashref.dvi # experimental bashref.pdf: bashref.texi -bash.pdf: bash.ps +bash.pdf: bash.1 + +article.pdf: article.ps rose94.pdf: rose94.ps OTHER_DOCS = $(srcdir)/FAQ $(srcdir)/INTRO diff --git a/doc/bash.html b/doc/bash.html index 228e081..5f46e52 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -3,7 +3,7 @@ </HEAD> <BODY><TABLE WIDTH=100%> <TR> -<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 July 7<TH ALIGN=RIGHT width=33%>BASH(1) +<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 July 19<TH ALIGN=RIGHT width=33%>BASH(1) </TR> </TABLE> <BR><A HREF="#index">Index</A> @@ -7778,9 +7778,13 @@ If set to <B>audible</B>, readline attempts to ring the terminal's bell. <DT><B>bind-tty-special-chars (On)</B> <DD> -If set to <B>On</B>, readline attempts to bind the control characters -treated specially by the kernel's terminal driver to their readline -equivalents. +If set to <B>On</B> (the default), readline attempts to bind the control +characters that are +treated specially by the kernel's terminal driver to their +readline equivalents. +These override the default readline bindings described here. +Type <TT>stty -a</TT> at a bash prompt to see your current terminal settings, +including the special control characters (usually <B>cchars</B>). <DT><B>blink-matching-paren (Off)</B> <DD> @@ -12493,6 +12497,8 @@ before execution resumes after the function or script. <DT><B>set</B> [<B>-abefhkmnptuvxBCEHPT</B>] [<B>-o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD> <DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD> +<DT><B>set -o</B><DD> +<DT><B>set +o</B><DD> Without options, display the name and value of each shell variable in a format that can be reused as input @@ -12819,16 +12825,17 @@ Same as If <B>-o</B> -is supplied with no <I>option-name</I>, the values of the current options are -printed. +is supplied with no <I>option-name</I>, +<B>set</B> prints the current shell option settings. If <B>+o</B> -is supplied with no <I>option-name</I>, a series of +is supplied with no <I>option-name</I>, +<B>set</B> prints a series of <B>set</B> -commands to recreate the current option settings is displayed on -the standard output. +commands to recreate the current option settings +on the standard output. </DL> <DT><B>-p</B> @@ -15057,7 +15064,7 @@ There may be only one active coprocess at a time. <HR> <TABLE WIDTH=100%> <TR> -<TH ALIGN=LEFT width=33%>GNU Bash 5.3<TH ALIGN=CENTER width=33%>2023 July 7<TH ALIGN=RIGHT width=33%>BASH(1) +<TH ALIGN=LEFT width=33%>GNU Bash 5.3<TH ALIGN=CENTER width=33%>2023 July 19<TH ALIGN=RIGHT width=33%>BASH(1) </TR> </TABLE> <HR> @@ -15163,7 +15170,7 @@ There may be only one active coprocess at a time. <DT><A HREF="#lbDI">BUGS</A><DD> </DL> <HR> -This document was created by man2html from /usr/local/src/bash/bash-20230705/doc/bash.1.<BR> -Time: 07 July 2023 16:22:29 EDT +This document was created by man2html from /usr/local/src/bash/bash-20230719/doc/bash.1.<BR> +Time: 23 July 2023 18:17:35 EDT </BODY> </HTML> diff --git a/doc/bash.pdf b/doc/bash.pdf Binary files differindex f7048b8..e06e14d 100644 --- a/doc/bash.pdf +++ b/doc/bash.pdf diff --git a/doc/bashref.aux b/doc/bashref.aux index 658ed71..b71f20a 100644 --- a/doc/bashref.aux +++ b/doc/bashref.aux @@ -162,7 +162,7 @@ @xrdef{The Set Builtin-pg}{68} @xrdef{The Shopt Builtin-title}{The Shopt Builtin} @xrdef{The Shopt Builtin-snt}{Section@tie 4.3.2} -@xrdef{The Shopt Builtin-pg}{72} +@xrdef{The Shopt Builtin-pg}{73} @xrdef{Special Builtins-title}{Special Builtins} @xrdef{Special Builtins-snt}{Section@tie 4.4} @xrdef{Special Builtins-pg}{79} @@ -273,118 +273,118 @@ @xrdef{Conditional Init Constructs-pg}{133} @xrdef{Sample Init File-title}{Sample Init File} @xrdef{Sample Init File-snt}{Section@tie 8.3.3} -@xrdef{Sample Init File-pg}{134} +@xrdef{Sample Init File-pg}{135} @xrdef{Bindable Readline Commands-title}{Bindable Readline Commands} @xrdef{Bindable Readline Commands-snt}{Section@tie 8.4} @xrdef{Commands For Moving-title}{Commands For Moving} @xrdef{Commands For Moving-snt}{Section@tie 8.4.1} -@xrdef{Bindable Readline Commands-pg}{137} -@xrdef{Commands For Moving-pg}{137} +@xrdef{Bindable Readline Commands-pg}{138} +@xrdef{Commands For Moving-pg}{138} @xrdef{Commands For History-title}{Commands For Manipulating The History} @xrdef{Commands For History-snt}{Section@tie 8.4.2} -@xrdef{Commands For History-pg}{138} +@xrdef{Commands For History-pg}{139} @xrdef{Commands For Text-title}{Commands For Changing Text} @xrdef{Commands For Text-snt}{Section@tie 8.4.3} -@xrdef{Commands For Text-pg}{140} +@xrdef{Commands For Text-pg}{141} @xrdef{Commands For Killing-title}{Killing And Yanking} @xrdef{Commands For Killing-snt}{Section@tie 8.4.4} -@xrdef{Commands For Killing-pg}{141} +@xrdef{Commands For Killing-pg}{142} @xrdef{Numeric Arguments-title}{Specifying Numeric Arguments} @xrdef{Numeric Arguments-snt}{Section@tie 8.4.5} -@xrdef{Numeric Arguments-pg}{142} +@xrdef{Numeric Arguments-pg}{143} @xrdef{Commands For Completion-title}{Letting Readline Type For You} @xrdef{Commands For Completion-snt}{Section@tie 8.4.6} -@xrdef{Commands For Completion-pg}{143} +@xrdef{Commands For Completion-pg}{144} @xrdef{Keyboard Macros-title}{Keyboard Macros} @xrdef{Keyboard Macros-snt}{Section@tie 8.4.7} -@xrdef{Keyboard Macros-pg}{144} +@xrdef{Keyboard Macros-pg}{145} @xrdef{Miscellaneous Commands-title}{Some Miscellaneous Commands} @xrdef{Miscellaneous Commands-snt}{Section@tie 8.4.8} -@xrdef{Miscellaneous Commands-pg}{145} +@xrdef{Miscellaneous Commands-pg}{146} @xrdef{Readline vi Mode-title}{Readline vi Mode} @xrdef{Readline vi Mode-snt}{Section@tie 8.5} @xrdef{Programmable Completion-title}{Programmable Completion} @xrdef{Programmable Completion-snt}{Section@tie 8.6} -@xrdef{Readline vi Mode-pg}{147} -@xrdef{Programmable Completion-pg}{147} +@xrdef{Readline vi Mode-pg}{148} +@xrdef{Programmable Completion-pg}{148} @xrdef{Programmable Completion Builtins-title}{Programmable Completion Builtins} @xrdef{Programmable Completion Builtins-snt}{Section@tie 8.7} -@xrdef{Programmable Completion Builtins-pg}{150} +@xrdef{Programmable Completion Builtins-pg}{151} @xrdef{A Programmable Completion Example-title}{A Programmable Completion Example} @xrdef{A Programmable Completion Example-snt}{Section@tie 8.8} -@xrdef{A Programmable Completion Example-pg}{154} +@xrdef{A Programmable Completion Example-pg}{155} @xrdef{Using History Interactively-title}{Using History Interactively} @xrdef{Using History Interactively-snt}{Chapter@tie 9} @xrdef{Bash History Facilities-title}{Bash History Facilities} @xrdef{Bash History Facilities-snt}{Section@tie 9.1} @xrdef{Bash History Builtins-title}{Bash History Builtins} @xrdef{Bash History Builtins-snt}{Section@tie 9.2} -@xrdef{Using History Interactively-pg}{157} -@xrdef{Bash History Facilities-pg}{157} -@xrdef{Bash History Builtins-pg}{157} +@xrdef{Using History Interactively-pg}{158} +@xrdef{Bash History Facilities-pg}{158} +@xrdef{Bash History Builtins-pg}{158} @xrdef{History Interaction-title}{History Expansion} @xrdef{History Interaction-snt}{Section@tie 9.3} -@xrdef{History Interaction-pg}{159} +@xrdef{History Interaction-pg}{160} @xrdef{Event Designators-title}{Event Designators} @xrdef{Event Designators-snt}{Section@tie 9.3.1} -@xrdef{Event Designators-pg}{160} +@xrdef{Event Designators-pg}{161} @xrdef{Word Designators-title}{Word Designators} @xrdef{Word Designators-snt}{Section@tie 9.3.2} @xrdef{Modifiers-title}{Modifiers} @xrdef{Modifiers-snt}{Section@tie 9.3.3} -@xrdef{Word Designators-pg}{161} -@xrdef{Modifiers-pg}{161} +@xrdef{Word Designators-pg}{162} +@xrdef{Modifiers-pg}{162} @xrdef{Installing Bash-title}{Installing Bash} @xrdef{Installing Bash-snt}{Chapter@tie 10} @xrdef{Basic Installation-title}{Basic Installation} @xrdef{Basic Installation-snt}{Section@tie 10.1} -@xrdef{Installing Bash-pg}{163} -@xrdef{Basic Installation-pg}{163} +@xrdef{Installing Bash-pg}{164} +@xrdef{Basic Installation-pg}{164} @xrdef{Compilers and Options-title}{Compilers and Options} @xrdef{Compilers and Options-snt}{Section@tie 10.2} @xrdef{Compiling For Multiple Architectures-title}{Compiling For Multiple Architectures} @xrdef{Compiling For Multiple Architectures-snt}{Section@tie 10.3} @xrdef{Installation Names-title}{Installation Names} @xrdef{Installation Names-snt}{Section@tie 10.4} -@xrdef{Compilers and Options-pg}{164} -@xrdef{Compiling For Multiple Architectures-pg}{164} +@xrdef{Compilers and Options-pg}{165} +@xrdef{Compiling For Multiple Architectures-pg}{165} @xrdef{Specifying the System Type-title}{Specifying the System Type} @xrdef{Specifying the System Type-snt}{Section@tie 10.5} @xrdef{Sharing Defaults-title}{Sharing Defaults} @xrdef{Sharing Defaults-snt}{Section@tie 10.6} @xrdef{Operation Controls-title}{Operation Controls} @xrdef{Operation Controls-snt}{Section@tie 10.7} -@xrdef{Installation Names-pg}{165} -@xrdef{Specifying the System Type-pg}{165} -@xrdef{Sharing Defaults-pg}{165} +@xrdef{Installation Names-pg}{166} +@xrdef{Specifying the System Type-pg}{166} +@xrdef{Sharing Defaults-pg}{166} @xrdef{Optional Features-title}{Optional Features} @xrdef{Optional Features-snt}{Section@tie 10.8} -@xrdef{Operation Controls-pg}{166} -@xrdef{Optional Features-pg}{166} +@xrdef{Operation Controls-pg}{167} +@xrdef{Optional Features-pg}{167} @xrdef{Reporting Bugs-title}{Reporting Bugs} @xrdef{Reporting Bugs-snt}{Appendix@tie @char65{}} -@xrdef{Reporting Bugs-pg}{172} +@xrdef{Reporting Bugs-pg}{173} @xrdef{Major Differences From The Bourne Shell-title}{Major Differences From The Bourne Shell} @xrdef{Major Differences From The Bourne Shell-snt}{Appendix@tie @char66{}} -@xrdef{Major Differences From The Bourne Shell-pg}{173} +@xrdef{Major Differences From The Bourne Shell-pg}{174} @xrdef{GNU Free Documentation License-title}{GNU Free Documentation License} @xrdef{GNU Free Documentation License-snt}{Appendix@tie @char67{}} -@xrdef{GNU Free Documentation License-pg}{179} +@xrdef{GNU Free Documentation License-pg}{180} @xrdef{Indexes-title}{Indexes} @xrdef{Indexes-snt}{Appendix@tie @char68{}} @xrdef{Builtin Index-title}{Index of Shell Builtin Commands} @xrdef{Builtin Index-snt}{Section@tie @char68.1} -@xrdef{Indexes-pg}{187} -@xrdef{Builtin Index-pg}{187} +@xrdef{Indexes-pg}{188} +@xrdef{Builtin Index-pg}{188} @xrdef{Reserved Word Index-title}{Index of Shell Reserved Words} @xrdef{Reserved Word Index-snt}{Section@tie @char68.2} @xrdef{Variable Index-title}{Parameter and Variable Index} @xrdef{Variable Index-snt}{Section@tie @char68.3} -@xrdef{Reserved Word Index-pg}{188} -@xrdef{Variable Index-pg}{189} +@xrdef{Reserved Word Index-pg}{189} +@xrdef{Variable Index-pg}{190} @xrdef{Function Index-title}{Function Index} @xrdef{Function Index-snt}{Section@tie @char68.4} -@xrdef{Function Index-pg}{191} +@xrdef{Function Index-pg}{192} @xrdef{Concept Index-title}{Concept Index} @xrdef{Concept Index-snt}{Section@tie @char68.5} -@xrdef{Concept Index-pg}{193} +@xrdef{Concept Index-pg}{194} diff --git a/doc/bashref.bt b/doc/bashref.bt index ebb5505..90ded79 100644 --- a/doc/bashref.bt +++ b/doc/bashref.bt @@ -20,22 +20,22 @@ \entry{trap}{55}{\code {trap}} \entry{true}{56}{\code {true}} \entry{umask}{56}{\code {umask}} -\entry{unset}{56}{\code {unset}} +\entry{unset}{57}{\code {unset}} \entry{alias}{57}{\code {alias}} \entry{bind}{57}{\code {bind}} \entry{builtin}{58}{\code {builtin}} -\entry{caller}{58}{\code {caller}} +\entry{caller}{59}{\code {caller}} \entry{command}{59}{\code {command}} \entry{declare}{59}{\code {declare}} -\entry{echo}{60}{\code {echo}} -\entry{enable}{61}{\code {enable}} +\entry{echo}{61}{\code {echo}} +\entry{enable}{62}{\code {enable}} \entry{help}{62}{\code {help}} \entry{let}{62}{\code {let}} -\entry{local}{62}{\code {local}} +\entry{local}{63}{\code {local}} \entry{logout}{63}{\code {logout}} \entry{mapfile}{63}{\code {mapfile}} -\entry{printf}{63}{\code {printf}} -\entry{read}{64}{\code {read}} +\entry{printf}{64}{\code {printf}} +\entry{read}{65}{\code {read}} \entry{readarray}{66}{\code {readarray}} \entry{source}{66}{\code {source}} \entry{type}{66}{\code {type}} @@ -43,7 +43,7 @@ \entry{ulimit}{67}{\code {ulimit}} \entry{unalias}{68}{\code {unalias}} \entry{set}{68}{\code {set}} -\entry{shopt}{72}{\code {shopt}} +\entry{shopt}{73}{\code {shopt}} \entry{dirs}{105}{\code {dirs}} \entry{popd}{105}{\code {popd}} \entry{pushd}{105}{\code {pushd}} @@ -54,8 +54,8 @@ \entry{wait}{119}{\code {wait}} \entry{disown}{120}{\code {disown}} \entry{suspend}{120}{\code {suspend}} -\entry{compgen}{150}{\code {compgen}} -\entry{complete}{150}{\code {complete}} -\entry{compopt}{153}{\code {compopt}} -\entry{fc}{158}{\code {fc}} -\entry{history}{158}{\code {history}} +\entry{compgen}{151}{\code {compgen}} +\entry{complete}{151}{\code {complete}} +\entry{compopt}{154}{\code {compopt}} +\entry{fc}{159}{\code {fc}} +\entry{history}{159}{\code {history}} diff --git a/doc/bashref.bts b/doc/bashref.bts index a3a54d7..7e92df6 100644 --- a/doc/bashref.bts +++ b/doc/bashref.bts @@ -12,58 +12,58 @@ \entry{\code {break}}{50} \entry{\code {builtin}}{58} \initial {C} -\entry{\code {caller}}{58} +\entry{\code {caller}}{59} \entry{\code {cd}}{50} \entry{\code {command}}{59} -\entry{\code {compgen}}{150} -\entry{\code {complete}}{150} -\entry{\code {compopt}}{153} +\entry{\code {compgen}}{151} +\entry{\code {complete}}{151} +\entry{\code {compopt}}{154} \entry{\code {continue}}{50} \initial {D} \entry{\code {declare}}{59} \entry{\code {dirs}}{105} \entry{\code {disown}}{120} \initial {E} -\entry{\code {echo}}{60} -\entry{\code {enable}}{61} +\entry{\code {echo}}{61} +\entry{\code {enable}}{62} \entry{\code {eval}}{50} \entry{\code {exec}}{51} \entry{\code {exit}}{51} \entry{\code {export}}{51} \initial {F} \entry{\code {false}}{51} -\entry{\code {fc}}{158} +\entry{\code {fc}}{159} \entry{\code {fg}}{118} \initial {G} \entry{\code {getopts}}{51} \initial {H} \entry{\code {hash}}{52} \entry{\code {help}}{62} -\entry{\code {history}}{158} +\entry{\code {history}}{159} \initial {J} \entry{\code {jobs}}{118} \initial {K} \entry{\code {kill}}{119} \initial {L} \entry{\code {let}}{62} -\entry{\code {local}}{62} +\entry{\code {local}}{63} \entry{\code {logout}}{63} \initial {M} \entry{\code {mapfile}}{63} \initial {P} \entry{\code {popd}}{105} -\entry{\code {printf}}{63} +\entry{\code {printf}}{64} \entry{\code {pushd}}{105} \entry{\code {pwd}}{52} \initial {R} -\entry{\code {read}}{64} +\entry{\code {read}}{65} \entry{\code {readarray}}{66} \entry{\code {readonly}}{53} \entry{\code {return}}{53} \initial {S} \entry{\code {set}}{68} \entry{\code {shift}}{53} -\entry{\code {shopt}}{72} +\entry{\code {shopt}}{73} \entry{\code {source}}{66} \entry{\code {suspend}}{120} \initial {T} @@ -77,6 +77,6 @@ \entry{\code {ulimit}}{67} \entry{\code {umask}}{56} \entry{\code {unalias}}{68} -\entry{\code {unset}}{56} +\entry{\code {unset}}{57} \initial {W} \entry{\code {wait}}{119} diff --git a/doc/bashref.cp b/doc/bashref.cp index 341ac42..b51b8d8 100644 --- a/doc/bashref.cp +++ b/doc/bashref.cp @@ -114,16 +114,16 @@ \entry{kill ring}{123}{kill ring} \entry{initialization file, readline}{124}{initialization file, readline} \entry{variables, readline}{125}{variables, readline} -\entry{programmable completion}{147}{programmable completion} -\entry{completion builtins}{150}{completion builtins} -\entry{History, how to use}{156}{History, how to use} -\entry{command history}{157}{command history} -\entry{history list}{157}{history list} -\entry{history builtins}{157}{history builtins} -\entry{history expansion}{159}{history expansion} -\entry{event designators}{160}{event designators} -\entry{history events}{160}{history events} -\entry{installation}{163}{installation} -\entry{configuration}{163}{configuration} -\entry{Bash installation}{163}{Bash installation} -\entry{Bash configuration}{163}{Bash configuration} +\entry{programmable completion}{148}{programmable completion} +\entry{completion builtins}{151}{completion builtins} +\entry{History, how to use}{157}{History, how to use} +\entry{command history}{158}{command history} +\entry{history list}{158}{history list} +\entry{history builtins}{158}{history builtins} +\entry{history expansion}{160}{history expansion} +\entry{event designators}{161}{event designators} +\entry{history events}{161}{history events} +\entry{installation}{164}{installation} +\entry{configuration}{164}{configuration} +\entry{Bash installation}{164}{Bash installation} +\entry{Bash configuration}{164}{Bash configuration} diff --git a/doc/bashref.cps b/doc/bashref.cps index 0843ad1..b3b1143 100644 --- a/doc/bashref.cps +++ b/doc/bashref.cps @@ -7,8 +7,8 @@ \entry{arrays}{102} \initial {B} \entry{background}{117} -\entry{Bash configuration}{163} -\entry{Bash installation}{163} +\entry{Bash configuration}{164} +\entry{Bash installation}{164} \entry{binary arithmetic operators}{100} \entry{bitwise arithmetic operators}{100} \entry{Bourne shell}{5} @@ -18,7 +18,7 @@ \entry{command editing}{122} \entry{command execution}{43} \entry{command expansion}{43} -\entry{command history}{157} +\entry{command history}{158} \entry{command search}{43} \entry{command substitution}{34} \entry{command timing}{10} @@ -33,9 +33,9 @@ \entry{comments, shell}{9} \entry{Compatibility Level}{113} \entry{Compatibility Mode}{113} -\entry{completion builtins}{150} +\entry{completion builtins}{151} \entry{conditional arithmetic operator}{100} -\entry{configuration}{163} +\entry{configuration}{164} \entry{control operator}{3} \entry{coprocess}{18} \initial {D} @@ -44,7 +44,7 @@ \entry{editing command lines}{122} \entry{environment}{45} \entry{evaluation, arithmetic}{100} -\entry{event designators}{160} +\entry{event designators}{161} \entry{execution environment}{44} \entry{exit status}{3, 45} \entry{expansion}{24} @@ -63,15 +63,15 @@ \entry{foreground}{117} \entry{functions, shell}{19} \initial {H} -\entry{history builtins}{157} -\entry{history events}{160} -\entry{history expansion}{159} -\entry{history list}{157} -\entry{History, how to use}{156} +\entry{history builtins}{158} +\entry{history events}{161} +\entry{history expansion}{160} +\entry{history list}{158} +\entry{History, how to use}{157} \initial {I} \entry{identifier}{3} \entry{initialization file, readline}{124} -\entry{installation}{163} +\entry{installation}{164} \entry{interaction, readline}{121} \entry{interactive shell}{95, 96} \entry{internationalization}{7} @@ -108,7 +108,7 @@ \entry{process group}{3} \entry{process group ID}{3} \entry{process substitution}{35} -\entry{programmable completion}{147} +\entry{programmable completion}{148} \entry{prompting}{106} \initial {Q} \entry{quoting}{6} diff --git a/doc/bashref.dvi b/doc/bashref.dvi Binary files differindex 5bd67ff..aac12e3 100644 --- a/doc/bashref.dvi +++ b/doc/bashref.dvi diff --git a/doc/bashref.fn b/doc/bashref.fn index 09df67a..341a79c 100644 --- a/doc/bashref.fn +++ b/doc/bashref.fn @@ -1,114 +1,114 @@ -\entry{beginning-of-line (C-a)}{137}{\code {beginning-of-line (C-a)}} -\entry{end-of-line (C-e)}{137}{\code {end-of-line (C-e)}} -\entry{forward-char (C-f)}{137}{\code {forward-char (C-f)}} -\entry{backward-char (C-b)}{137}{\code {backward-char (C-b)}} -\entry{forward-word (M-f)}{137}{\code {forward-word (M-f)}} -\entry{backward-word (M-b)}{137}{\code {backward-word (M-b)}} -\entry{shell-forward-word (M-C-f)}{137}{\code {shell-forward-word (M-C-f)}} -\entry{shell-backward-word (M-C-b)}{137}{\code {shell-backward-word (M-C-b)}} -\entry{previous-screen-line ()}{137}{\code {previous-screen-line ()}} -\entry{next-screen-line ()}{138}{\code {next-screen-line ()}} -\entry{clear-display (M-C-l)}{138}{\code {clear-display (M-C-l)}} -\entry{clear-screen (C-l)}{138}{\code {clear-screen (C-l)}} -\entry{redraw-current-line ()}{138}{\code {redraw-current-line ()}} -\entry{accept-line (Newline or Return)}{138}{\code {accept-line (Newline or Return)}} -\entry{previous-history (C-p)}{138}{\code {previous-history (C-p)}} -\entry{next-history (C-n)}{138}{\code {next-history (C-n)}} -\entry{beginning-of-history (M-<)}{138}{\code {beginning-of-history (M-<)}} -\entry{end-of-history (M->)}{138}{\code {end-of-history (M->)}} -\entry{reverse-search-history (C-r)}{138}{\code {reverse-search-history (C-r)}} -\entry{forward-search-history (C-s)}{138}{\code {forward-search-history (C-s)}} -\entry{non-incremental-reverse-search-history (M-p)}{138}{\code {non-incremental-reverse-search-history (M-p)}} -\entry{non-incremental-forward-search-history (M-n)}{139}{\code {non-incremental-forward-search-history (M-n)}} -\entry{history-search-forward ()}{139}{\code {history-search-forward ()}} -\entry{history-search-backward ()}{139}{\code {history-search-backward ()}} -\entry{history-substring-search-forward ()}{139}{\code {history-substring-search-forward ()}} -\entry{history-substring-search-backward ()}{139}{\code {history-substring-search-backward ()}} -\entry{yank-nth-arg (M-C-y)}{139}{\code {yank-nth-arg (M-C-y)}} -\entry{yank-last-arg (M-. or M-_)}{139}{\code {yank-last-arg (M-. or M-_)}} -\entry{operate-and-get-next (C-o)}{139}{\code {operate-and-get-next (C-o)}} -\entry{fetch-history ()}{140}{\code {fetch-history ()}} -\entry{end-of-file (usually C-d)}{140}{\code {\i {end-of-file} (usually C-d)}} -\entry{delete-char (C-d)}{140}{\code {delete-char (C-d)}} -\entry{backward-delete-char (Rubout)}{140}{\code {backward-delete-char (Rubout)}} -\entry{forward-backward-delete-char ()}{140}{\code {forward-backward-delete-char ()}} -\entry{quoted-insert (C-q or C-v)}{140}{\code {quoted-insert (C-q or C-v)}} -\entry{self-insert (a, b, A, 1, !, ...{})}{140}{\code {self-insert (a, b, A, 1, !, \dots {})}} -\entry{bracketed-paste-begin ()}{140}{\code {bracketed-paste-begin ()}} -\entry{transpose-chars (C-t)}{140}{\code {transpose-chars (C-t)}} -\entry{transpose-words (M-t)}{141}{\code {transpose-words (M-t)}} -\entry{upcase-word (M-u)}{141}{\code {upcase-word (M-u)}} -\entry{downcase-word (M-l)}{141}{\code {downcase-word (M-l)}} -\entry{capitalize-word (M-c)}{141}{\code {capitalize-word (M-c)}} -\entry{overwrite-mode ()}{141}{\code {overwrite-mode ()}} -\entry{kill-line (C-k)}{141}{\code {kill-line (C-k)}} -\entry{backward-kill-line (C-x Rubout)}{141}{\code {backward-kill-line (C-x Rubout)}} -\entry{unix-line-discard (C-u)}{141}{\code {unix-line-discard (C-u)}} -\entry{kill-whole-line ()}{141}{\code {kill-whole-line ()}} -\entry{kill-word (M-d)}{141}{\code {kill-word (M-d)}} -\entry{backward-kill-word (M-DEL)}{141}{\code {backward-kill-word (M-\key {DEL})}} -\entry{shell-kill-word (M-C-d)}{142}{\code {shell-kill-word (M-C-d)}} -\entry{shell-backward-kill-word ()}{142}{\code {shell-backward-kill-word ()}} +\entry{beginning-of-line (C-a)}{138}{\code {beginning-of-line (C-a)}} +\entry{end-of-line (C-e)}{138}{\code {end-of-line (C-e)}} +\entry{forward-char (C-f)}{138}{\code {forward-char (C-f)}} +\entry{backward-char (C-b)}{138}{\code {backward-char (C-b)}} +\entry{forward-word (M-f)}{138}{\code {forward-word (M-f)}} +\entry{backward-word (M-b)}{138}{\code {backward-word (M-b)}} +\entry{shell-forward-word (M-C-f)}{138}{\code {shell-forward-word (M-C-f)}} +\entry{shell-backward-word (M-C-b)}{138}{\code {shell-backward-word (M-C-b)}} +\entry{previous-screen-line ()}{138}{\code {previous-screen-line ()}} +\entry{next-screen-line ()}{139}{\code {next-screen-line ()}} +\entry{clear-display (M-C-l)}{139}{\code {clear-display (M-C-l)}} +\entry{clear-screen (C-l)}{139}{\code {clear-screen (C-l)}} +\entry{redraw-current-line ()}{139}{\code {redraw-current-line ()}} +\entry{accept-line (Newline or Return)}{139}{\code {accept-line (Newline or Return)}} +\entry{previous-history (C-p)}{139}{\code {previous-history (C-p)}} +\entry{next-history (C-n)}{139}{\code {next-history (C-n)}} +\entry{beginning-of-history (M-<)}{139}{\code {beginning-of-history (M-<)}} +\entry{end-of-history (M->)}{139}{\code {end-of-history (M->)}} +\entry{reverse-search-history (C-r)}{139}{\code {reverse-search-history (C-r)}} +\entry{forward-search-history (C-s)}{139}{\code {forward-search-history (C-s)}} +\entry{non-incremental-reverse-search-history (M-p)}{139}{\code {non-incremental-reverse-search-history (M-p)}} +\entry{non-incremental-forward-search-history (M-n)}{140}{\code {non-incremental-forward-search-history (M-n)}} +\entry{history-search-forward ()}{140}{\code {history-search-forward ()}} +\entry{history-search-backward ()}{140}{\code {history-search-backward ()}} +\entry{history-substring-search-forward ()}{140}{\code {history-substring-search-forward ()}} +\entry{history-substring-search-backward ()}{140}{\code {history-substring-search-backward ()}} +\entry{yank-nth-arg (M-C-y)}{140}{\code {yank-nth-arg (M-C-y)}} +\entry{yank-last-arg (M-. or M-_)}{140}{\code {yank-last-arg (M-. or M-_)}} +\entry{operate-and-get-next (C-o)}{140}{\code {operate-and-get-next (C-o)}} +\entry{fetch-history ()}{141}{\code {fetch-history ()}} +\entry{end-of-file (usually C-d)}{141}{\code {\i {end-of-file} (usually C-d)}} +\entry{delete-char (C-d)}{141}{\code {delete-char (C-d)}} +\entry{backward-delete-char (Rubout)}{141}{\code {backward-delete-char (Rubout)}} +\entry{forward-backward-delete-char ()}{141}{\code {forward-backward-delete-char ()}} +\entry{quoted-insert (C-q or C-v)}{141}{\code {quoted-insert (C-q or C-v)}} +\entry{self-insert (a, b, A, 1, !, ...{})}{141}{\code {self-insert (a, b, A, 1, !, \dots {})}} +\entry{bracketed-paste-begin ()}{141}{\code {bracketed-paste-begin ()}} +\entry{transpose-chars (C-t)}{141}{\code {transpose-chars (C-t)}} +\entry{transpose-words (M-t)}{142}{\code {transpose-words (M-t)}} \entry{shell-transpose-words (M-C-t)}{142}{\code {shell-transpose-words (M-C-t)}} -\entry{unix-word-rubout (C-w)}{142}{\code {unix-word-rubout (C-w)}} -\entry{unix-filename-rubout ()}{142}{\code {unix-filename-rubout ()}} -\entry{delete-horizontal-space ()}{142}{\code {delete-horizontal-space ()}} -\entry{kill-region ()}{142}{\code {kill-region ()}} -\entry{copy-region-as-kill ()}{142}{\code {copy-region-as-kill ()}} -\entry{copy-backward-word ()}{142}{\code {copy-backward-word ()}} -\entry{copy-forward-word ()}{142}{\code {copy-forward-word ()}} -\entry{yank (C-y)}{142}{\code {yank (C-y)}} -\entry{yank-pop (M-y)}{142}{\code {yank-pop (M-y)}} -\entry{digit-argument (M-0, M-1, ...{} M--)}{142}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}} -\entry{universal-argument ()}{143}{\code {universal-argument ()}} -\entry{complete (TAB)}{143}{\code {complete (\key {TAB})}} -\entry{possible-completions (M-?)}{143}{\code {possible-completions (M-?)}} -\entry{insert-completions (M-*)}{143}{\code {insert-completions (M-*)}} -\entry{menu-complete ()}{143}{\code {menu-complete ()}} -\entry{menu-complete-backward ()}{143}{\code {menu-complete-backward ()}} -\entry{delete-char-or-list ()}{143}{\code {delete-char-or-list ()}} -\entry{complete-filename (M-/)}{143}{\code {complete-filename (M-/)}} -\entry{possible-filename-completions (C-x /)}{144}{\code {possible-filename-completions (C-x /)}} -\entry{complete-username (M-~)}{144}{\code {complete-username (M-~)}} -\entry{possible-username-completions (C-x ~)}{144}{\code {possible-username-completions (C-x ~)}} -\entry{complete-variable (M-$)}{144}{\code {complete-variable (M-$)}} -\entry{possible-variable-completions (C-x $)}{144}{\code {possible-variable-completions (C-x $)}} -\entry{complete-hostname (M-@)}{144}{\code {complete-hostname (M-@)}} -\entry{possible-hostname-completions (C-x @)}{144}{\code {possible-hostname-completions (C-x @)}} -\entry{complete-command (M-!)}{144}{\code {complete-command (M-!)}} -\entry{possible-command-completions (C-x !)}{144}{\code {possible-command-completions (C-x !)}} -\entry{dynamic-complete-history (M-TAB)}{144}{\code {dynamic-complete-history (M-\key {TAB})}} -\entry{dabbrev-expand ()}{144}{\code {dabbrev-expand ()}} -\entry{complete-into-braces (M-{\indexlbrace })}{144}{\code {complete-into-braces (M-{\tt \char 123})}} -\entry{start-kbd-macro (C-x ()}{144}{\code {start-kbd-macro (C-x ()}} -\entry{end-kbd-macro (C-x ))}{144}{\code {end-kbd-macro (C-x ))}} -\entry{call-last-kbd-macro (C-x e)}{145}{\code {call-last-kbd-macro (C-x e)}} -\entry{print-last-kbd-macro ()}{145}{\code {print-last-kbd-macro ()}} -\entry{re-read-init-file (C-x C-r)}{145}{\code {re-read-init-file (C-x C-r)}} -\entry{abort (C-g)}{145}{\code {abort (C-g)}} -\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{145}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}} -\entry{prefix-meta (ESC)}{145}{\code {prefix-meta (\key {ESC})}} -\entry{undo (C-_ or C-x C-u)}{145}{\code {undo (C-_ or C-x C-u)}} -\entry{revert-line (M-r)}{145}{\code {revert-line (M-r)}} -\entry{tilde-expand (M-&)}{145}{\code {tilde-expand (M-&)}} -\entry{set-mark (C-@)}{145}{\code {set-mark (C-@)}} -\entry{exchange-point-and-mark (C-x C-x)}{145}{\code {exchange-point-and-mark (C-x C-x)}} -\entry{character-search (C-])}{145}{\code {character-search (C-])}} -\entry{character-search-backward (M-C-])}{145}{\code {character-search-backward (M-C-])}} -\entry{skip-csi-sequence ()}{145}{\code {skip-csi-sequence ()}} -\entry{insert-comment (M-#)}{146}{\code {insert-comment (M-#)}} -\entry{dump-functions ()}{146}{\code {dump-functions ()}} -\entry{dump-variables ()}{146}{\code {dump-variables ()}} -\entry{dump-macros ()}{146}{\code {dump-macros ()}} -\entry{spell-correct-word (C-x s)}{146}{\code {spell-correct-word (C-x s)}} -\entry{glob-complete-word (M-g)}{146}{\code {glob-complete-word (M-g)}} -\entry{glob-expand-word (C-x *)}{146}{\code {glob-expand-word (C-x *)}} -\entry{glob-list-expansions (C-x g)}{146}{\code {glob-list-expansions (C-x g)}} -\entry{display-shell-version (C-x C-v)}{147}{\code {display-shell-version (C-x C-v)}} -\entry{shell-expand-line (M-C-e)}{147}{\code {shell-expand-line (M-C-e)}} -\entry{history-expand-line (M-^)}{147}{\code {history-expand-line (M-^)}} -\entry{magic-space ()}{147}{\code {magic-space ()}} -\entry{alias-expand-line ()}{147}{\code {alias-expand-line ()}} -\entry{history-and-alias-expand-line ()}{147}{\code {history-and-alias-expand-line ()}} -\entry{insert-last-argument (M-. or M-_)}{147}{\code {insert-last-argument (M-. or M-_)}} -\entry{edit-and-execute-command (C-x C-e)}{147}{\code {edit-and-execute-command (C-x C-e)}} +\entry{upcase-word (M-u)}{142}{\code {upcase-word (M-u)}} +\entry{downcase-word (M-l)}{142}{\code {downcase-word (M-l)}} +\entry{capitalize-word (M-c)}{142}{\code {capitalize-word (M-c)}} +\entry{overwrite-mode ()}{142}{\code {overwrite-mode ()}} +\entry{kill-line (C-k)}{142}{\code {kill-line (C-k)}} +\entry{backward-kill-line (C-x Rubout)}{142}{\code {backward-kill-line (C-x Rubout)}} +\entry{unix-line-discard (C-u)}{142}{\code {unix-line-discard (C-u)}} +\entry{kill-whole-line ()}{142}{\code {kill-whole-line ()}} +\entry{kill-word (M-d)}{143}{\code {kill-word (M-d)}} +\entry{backward-kill-word (M-DEL)}{143}{\code {backward-kill-word (M-\key {DEL})}} +\entry{shell-kill-word (M-C-d)}{143}{\code {shell-kill-word (M-C-d)}} +\entry{shell-backward-kill-word ()}{143}{\code {shell-backward-kill-word ()}} +\entry{unix-word-rubout (C-w)}{143}{\code {unix-word-rubout (C-w)}} +\entry{unix-filename-rubout ()}{143}{\code {unix-filename-rubout ()}} +\entry{delete-horizontal-space ()}{143}{\code {delete-horizontal-space ()}} +\entry{kill-region ()}{143}{\code {kill-region ()}} +\entry{copy-region-as-kill ()}{143}{\code {copy-region-as-kill ()}} +\entry{copy-backward-word ()}{143}{\code {copy-backward-word ()}} +\entry{copy-forward-word ()}{143}{\code {copy-forward-word ()}} +\entry{yank (C-y)}{143}{\code {yank (C-y)}} +\entry{yank-pop (M-y)}{143}{\code {yank-pop (M-y)}} +\entry{digit-argument (M-0, M-1, ...{} M--)}{143}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}} +\entry{universal-argument ()}{144}{\code {universal-argument ()}} +\entry{complete (TAB)}{144}{\code {complete (\key {TAB})}} +\entry{possible-completions (M-?)}{144}{\code {possible-completions (M-?)}} +\entry{insert-completions (M-*)}{144}{\code {insert-completions (M-*)}} +\entry{menu-complete ()}{144}{\code {menu-complete ()}} +\entry{menu-complete-backward ()}{144}{\code {menu-complete-backward ()}} +\entry{delete-char-or-list ()}{144}{\code {delete-char-or-list ()}} +\entry{complete-filename (M-/)}{144}{\code {complete-filename (M-/)}} +\entry{possible-filename-completions (C-x /)}{145}{\code {possible-filename-completions (C-x /)}} +\entry{complete-username (M-~)}{145}{\code {complete-username (M-~)}} +\entry{possible-username-completions (C-x ~)}{145}{\code {possible-username-completions (C-x ~)}} +\entry{complete-variable (M-$)}{145}{\code {complete-variable (M-$)}} +\entry{possible-variable-completions (C-x $)}{145}{\code {possible-variable-completions (C-x $)}} +\entry{complete-hostname (M-@)}{145}{\code {complete-hostname (M-@)}} +\entry{possible-hostname-completions (C-x @)}{145}{\code {possible-hostname-completions (C-x @)}} +\entry{complete-command (M-!)}{145}{\code {complete-command (M-!)}} +\entry{possible-command-completions (C-x !)}{145}{\code {possible-command-completions (C-x !)}} +\entry{dynamic-complete-history (M-TAB)}{145}{\code {dynamic-complete-history (M-\key {TAB})}} +\entry{dabbrev-expand ()}{145}{\code {dabbrev-expand ()}} +\entry{complete-into-braces (M-{\indexlbrace })}{145}{\code {complete-into-braces (M-{\tt \char 123})}} +\entry{start-kbd-macro (C-x ()}{145}{\code {start-kbd-macro (C-x ()}} +\entry{end-kbd-macro (C-x ))}{145}{\code {end-kbd-macro (C-x ))}} +\entry{call-last-kbd-macro (C-x e)}{146}{\code {call-last-kbd-macro (C-x e)}} +\entry{print-last-kbd-macro ()}{146}{\code {print-last-kbd-macro ()}} +\entry{re-read-init-file (C-x C-r)}{146}{\code {re-read-init-file (C-x C-r)}} +\entry{abort (C-g)}{146}{\code {abort (C-g)}} +\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{146}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}} +\entry{prefix-meta (ESC)}{146}{\code {prefix-meta (\key {ESC})}} +\entry{undo (C-_ or C-x C-u)}{146}{\code {undo (C-_ or C-x C-u)}} +\entry{revert-line (M-r)}{146}{\code {revert-line (M-r)}} +\entry{tilde-expand (M-&)}{146}{\code {tilde-expand (M-&)}} +\entry{set-mark (C-@)}{146}{\code {set-mark (C-@)}} +\entry{exchange-point-and-mark (C-x C-x)}{146}{\code {exchange-point-and-mark (C-x C-x)}} +\entry{character-search (C-])}{146}{\code {character-search (C-])}} +\entry{character-search-backward (M-C-])}{146}{\code {character-search-backward (M-C-])}} +\entry{skip-csi-sequence ()}{146}{\code {skip-csi-sequence ()}} +\entry{insert-comment (M-#)}{147}{\code {insert-comment (M-#)}} +\entry{dump-functions ()}{147}{\code {dump-functions ()}} +\entry{dump-variables ()}{147}{\code {dump-variables ()}} +\entry{dump-macros ()}{147}{\code {dump-macros ()}} +\entry{spell-correct-word (C-x s)}{147}{\code {spell-correct-word (C-x s)}} +\entry{glob-complete-word (M-g)}{147}{\code {glob-complete-word (M-g)}} +\entry{glob-expand-word (C-x *)}{147}{\code {glob-expand-word (C-x *)}} +\entry{glob-list-expansions (C-x g)}{147}{\code {glob-list-expansions (C-x g)}} +\entry{display-shell-version (C-x C-v)}{148}{\code {display-shell-version (C-x C-v)}} +\entry{shell-expand-line (M-C-e)}{148}{\code {shell-expand-line (M-C-e)}} +\entry{history-expand-line (M-^)}{148}{\code {history-expand-line (M-^)}} +\entry{magic-space ()}{148}{\code {magic-space ()}} +\entry{alias-expand-line ()}{148}{\code {alias-expand-line ()}} +\entry{history-and-alias-expand-line ()}{148}{\code {history-and-alias-expand-line ()}} +\entry{insert-last-argument (M-. or M-_)}{148}{\code {insert-last-argument (M-. or M-_)}} +\entry{edit-and-execute-command (C-x C-e)}{148}{\code {edit-and-execute-command (C-x C-e)}} diff --git a/doc/bashref.fns b/doc/bashref.fns index e0a1809..748e3c0 100644 --- a/doc/bashref.fns +++ b/doc/bashref.fns @@ -1,134 +1,134 @@ \initial {A} -\entry{\code {abort (C-g)}}{145} -\entry{\code {accept-line (Newline or Return)}}{138} -\entry{\code {alias-expand-line ()}}{147} +\entry{\code {abort (C-g)}}{146} +\entry{\code {accept-line (Newline or Return)}}{139} +\entry{\code {alias-expand-line ()}}{148} \initial {B} -\entry{\code {backward-char (C-b)}}{137} -\entry{\code {backward-delete-char (Rubout)}}{140} -\entry{\code {backward-kill-line (C-x Rubout)}}{141} -\entry{\code {backward-kill-word (M-\key {DEL})}}{141} -\entry{\code {backward-word (M-b)}}{137} -\entry{\code {beginning-of-history (M-<)}}{138} -\entry{\code {beginning-of-line (C-a)}}{137} -\entry{\code {bracketed-paste-begin ()}}{140} +\entry{\code {backward-char (C-b)}}{138} +\entry{\code {backward-delete-char (Rubout)}}{141} +\entry{\code {backward-kill-line (C-x Rubout)}}{142} +\entry{\code {backward-kill-word (M-\key {DEL})}}{143} +\entry{\code {backward-word (M-b)}}{138} +\entry{\code {beginning-of-history (M-<)}}{139} +\entry{\code {beginning-of-line (C-a)}}{138} +\entry{\code {bracketed-paste-begin ()}}{141} \initial {C} -\entry{\code {call-last-kbd-macro (C-x e)}}{145} -\entry{\code {capitalize-word (M-c)}}{141} -\entry{\code {character-search (C-])}}{145} -\entry{\code {character-search-backward (M-C-])}}{145} -\entry{\code {clear-display (M-C-l)}}{138} -\entry{\code {clear-screen (C-l)}}{138} -\entry{\code {complete (\key {TAB})}}{143} -\entry{\code {complete-command (M-!)}}{144} -\entry{\code {complete-filename (M-/)}}{143} -\entry{\code {complete-hostname (M-@)}}{144} -\entry{\code {complete-into-braces (M-{\tt \char 123})}}{144} -\entry{\code {complete-username (M-~)}}{144} -\entry{\code {complete-variable (M-$)}}{144} -\entry{\code {copy-backward-word ()}}{142} -\entry{\code {copy-forward-word ()}}{142} -\entry{\code {copy-region-as-kill ()}}{142} +\entry{\code {call-last-kbd-macro (C-x e)}}{146} +\entry{\code {capitalize-word (M-c)}}{142} +\entry{\code {character-search (C-])}}{146} +\entry{\code {character-search-backward (M-C-])}}{146} +\entry{\code {clear-display (M-C-l)}}{139} +\entry{\code {clear-screen (C-l)}}{139} +\entry{\code {complete (\key {TAB})}}{144} +\entry{\code {complete-command (M-!)}}{145} +\entry{\code {complete-filename (M-/)}}{144} +\entry{\code {complete-hostname (M-@)}}{145} +\entry{\code {complete-into-braces (M-{\tt \char 123})}}{145} +\entry{\code {complete-username (M-~)}}{145} +\entry{\code {complete-variable (M-$)}}{145} +\entry{\code {copy-backward-word ()}}{143} +\entry{\code {copy-forward-word ()}}{143} +\entry{\code {copy-region-as-kill ()}}{143} \initial {D} -\entry{\code {dabbrev-expand ()}}{144} -\entry{\code {delete-char (C-d)}}{140} -\entry{\code {delete-char-or-list ()}}{143} -\entry{\code {delete-horizontal-space ()}}{142} -\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{142} -\entry{\code {display-shell-version (C-x C-v)}}{147} -\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{145} -\entry{\code {downcase-word (M-l)}}{141} -\entry{\code {dump-functions ()}}{146} -\entry{\code {dump-macros ()}}{146} -\entry{\code {dump-variables ()}}{146} -\entry{\code {dynamic-complete-history (M-\key {TAB})}}{144} +\entry{\code {dabbrev-expand ()}}{145} +\entry{\code {delete-char (C-d)}}{141} +\entry{\code {delete-char-or-list ()}}{144} +\entry{\code {delete-horizontal-space ()}}{143} +\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{143} +\entry{\code {display-shell-version (C-x C-v)}}{148} +\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{146} +\entry{\code {downcase-word (M-l)}}{142} +\entry{\code {dump-functions ()}}{147} +\entry{\code {dump-macros ()}}{147} +\entry{\code {dump-variables ()}}{147} +\entry{\code {dynamic-complete-history (M-\key {TAB})}}{145} \initial {E} -\entry{\code {edit-and-execute-command (C-x C-e)}}{147} -\entry{\code {end-kbd-macro (C-x ))}}{144} -\entry{\code {\i {end-of-file} (usually C-d)}}{140} -\entry{\code {end-of-history (M->)}}{138} -\entry{\code {end-of-line (C-e)}}{137} -\entry{\code {exchange-point-and-mark (C-x C-x)}}{145} +\entry{\code {edit-and-execute-command (C-x C-e)}}{148} +\entry{\code {end-kbd-macro (C-x ))}}{145} +\entry{\code {\i {end-of-file} (usually C-d)}}{141} +\entry{\code {end-of-history (M->)}}{139} +\entry{\code {end-of-line (C-e)}}{138} +\entry{\code {exchange-point-and-mark (C-x C-x)}}{146} \initial {F} -\entry{\code {fetch-history ()}}{140} -\entry{\code {forward-backward-delete-char ()}}{140} -\entry{\code {forward-char (C-f)}}{137} -\entry{\code {forward-search-history (C-s)}}{138} -\entry{\code {forward-word (M-f)}}{137} +\entry{\code {fetch-history ()}}{141} +\entry{\code {forward-backward-delete-char ()}}{141} +\entry{\code {forward-char (C-f)}}{138} +\entry{\code {forward-search-history (C-s)}}{139} +\entry{\code {forward-word (M-f)}}{138} \initial {G} -\entry{\code {glob-complete-word (M-g)}}{146} -\entry{\code {glob-expand-word (C-x *)}}{146} -\entry{\code {glob-list-expansions (C-x g)}}{146} +\entry{\code {glob-complete-word (M-g)}}{147} +\entry{\code {glob-expand-word (C-x *)}}{147} +\entry{\code {glob-list-expansions (C-x g)}}{147} \initial {H} -\entry{\code {history-and-alias-expand-line ()}}{147} -\entry{\code {history-expand-line (M-^)}}{147} -\entry{\code {history-search-backward ()}}{139} -\entry{\code {history-search-forward ()}}{139} -\entry{\code {history-substring-search-backward ()}}{139} -\entry{\code {history-substring-search-forward ()}}{139} +\entry{\code {history-and-alias-expand-line ()}}{148} +\entry{\code {history-expand-line (M-^)}}{148} +\entry{\code {history-search-backward ()}}{140} +\entry{\code {history-search-forward ()}}{140} +\entry{\code {history-substring-search-backward ()}}{140} +\entry{\code {history-substring-search-forward ()}}{140} \initial {I} -\entry{\code {insert-comment (M-#)}}{146} -\entry{\code {insert-completions (M-*)}}{143} -\entry{\code {insert-last-argument (M-. or M-_)}}{147} +\entry{\code {insert-comment (M-#)}}{147} +\entry{\code {insert-completions (M-*)}}{144} +\entry{\code {insert-last-argument (M-. or M-_)}}{148} \initial {K} -\entry{\code {kill-line (C-k)}}{141} -\entry{\code {kill-region ()}}{142} -\entry{\code {kill-whole-line ()}}{141} -\entry{\code {kill-word (M-d)}}{141} +\entry{\code {kill-line (C-k)}}{142} +\entry{\code {kill-region ()}}{143} +\entry{\code {kill-whole-line ()}}{142} +\entry{\code {kill-word (M-d)}}{143} \initial {M} -\entry{\code {magic-space ()}}{147} -\entry{\code {menu-complete ()}}{143} -\entry{\code {menu-complete-backward ()}}{143} +\entry{\code {magic-space ()}}{148} +\entry{\code {menu-complete ()}}{144} +\entry{\code {menu-complete-backward ()}}{144} \initial {N} -\entry{\code {next-history (C-n)}}{138} -\entry{\code {next-screen-line ()}}{138} -\entry{\code {non-incremental-forward-search-history (M-n)}}{139} -\entry{\code {non-incremental-reverse-search-history (M-p)}}{138} +\entry{\code {next-history (C-n)}}{139} +\entry{\code {next-screen-line ()}}{139} +\entry{\code {non-incremental-forward-search-history (M-n)}}{140} +\entry{\code {non-incremental-reverse-search-history (M-p)}}{139} \initial {O} -\entry{\code {operate-and-get-next (C-o)}}{139} -\entry{\code {overwrite-mode ()}}{141} +\entry{\code {operate-and-get-next (C-o)}}{140} +\entry{\code {overwrite-mode ()}}{142} \initial {P} -\entry{\code {possible-command-completions (C-x !)}}{144} -\entry{\code {possible-completions (M-?)}}{143} -\entry{\code {possible-filename-completions (C-x /)}}{144} -\entry{\code {possible-hostname-completions (C-x @)}}{144} -\entry{\code {possible-username-completions (C-x ~)}}{144} -\entry{\code {possible-variable-completions (C-x $)}}{144} -\entry{\code {prefix-meta (\key {ESC})}}{145} -\entry{\code {previous-history (C-p)}}{138} -\entry{\code {previous-screen-line ()}}{137} -\entry{\code {print-last-kbd-macro ()}}{145} +\entry{\code {possible-command-completions (C-x !)}}{145} +\entry{\code {possible-completions (M-?)}}{144} +\entry{\code {possible-filename-completions (C-x /)}}{145} +\entry{\code {possible-hostname-completions (C-x @)}}{145} +\entry{\code {possible-username-completions (C-x ~)}}{145} +\entry{\code {possible-variable-completions (C-x $)}}{145} +\entry{\code {prefix-meta (\key {ESC})}}{146} +\entry{\code {previous-history (C-p)}}{139} +\entry{\code {previous-screen-line ()}}{138} +\entry{\code {print-last-kbd-macro ()}}{146} \initial {Q} -\entry{\code {quoted-insert (C-q or C-v)}}{140} +\entry{\code {quoted-insert (C-q or C-v)}}{141} \initial {R} -\entry{\code {re-read-init-file (C-x C-r)}}{145} -\entry{\code {redraw-current-line ()}}{138} -\entry{\code {reverse-search-history (C-r)}}{138} -\entry{\code {revert-line (M-r)}}{145} +\entry{\code {re-read-init-file (C-x C-r)}}{146} +\entry{\code {redraw-current-line ()}}{139} +\entry{\code {reverse-search-history (C-r)}}{139} +\entry{\code {revert-line (M-r)}}{146} \initial {S} -\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{140} -\entry{\code {set-mark (C-@)}}{145} -\entry{\code {shell-backward-kill-word ()}}{142} -\entry{\code {shell-backward-word (M-C-b)}}{137} -\entry{\code {shell-expand-line (M-C-e)}}{147} -\entry{\code {shell-forward-word (M-C-f)}}{137} -\entry{\code {shell-kill-word (M-C-d)}}{142} +\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{141} +\entry{\code {set-mark (C-@)}}{146} +\entry{\code {shell-backward-kill-word ()}}{143} +\entry{\code {shell-backward-word (M-C-b)}}{138} +\entry{\code {shell-expand-line (M-C-e)}}{148} +\entry{\code {shell-forward-word (M-C-f)}}{138} +\entry{\code {shell-kill-word (M-C-d)}}{143} \entry{\code {shell-transpose-words (M-C-t)}}{142} -\entry{\code {skip-csi-sequence ()}}{145} -\entry{\code {spell-correct-word (C-x s)}}{146} -\entry{\code {start-kbd-macro (C-x ()}}{144} +\entry{\code {skip-csi-sequence ()}}{146} +\entry{\code {spell-correct-word (C-x s)}}{147} +\entry{\code {start-kbd-macro (C-x ()}}{145} \initial {T} -\entry{\code {tilde-expand (M-&)}}{145} -\entry{\code {transpose-chars (C-t)}}{140} -\entry{\code {transpose-words (M-t)}}{141} +\entry{\code {tilde-expand (M-&)}}{146} +\entry{\code {transpose-chars (C-t)}}{141} +\entry{\code {transpose-words (M-t)}}{142} \initial {U} -\entry{\code {undo (C-_ or C-x C-u)}}{145} -\entry{\code {universal-argument ()}}{143} -\entry{\code {unix-filename-rubout ()}}{142} -\entry{\code {unix-line-discard (C-u)}}{141} -\entry{\code {unix-word-rubout (C-w)}}{142} -\entry{\code {upcase-word (M-u)}}{141} +\entry{\code {undo (C-_ or C-x C-u)}}{146} +\entry{\code {universal-argument ()}}{144} +\entry{\code {unix-filename-rubout ()}}{143} +\entry{\code {unix-line-discard (C-u)}}{142} +\entry{\code {unix-word-rubout (C-w)}}{143} +\entry{\code {upcase-word (M-u)}}{142} \initial {Y} -\entry{\code {yank (C-y)}}{142} -\entry{\code {yank-last-arg (M-. or M-_)}}{139} -\entry{\code {yank-nth-arg (M-C-y)}}{139} -\entry{\code {yank-pop (M-y)}}{142} +\entry{\code {yank (C-y)}}{143} +\entry{\code {yank-last-arg (M-. or M-_)}}{140} +\entry{\code {yank-nth-arg (M-C-y)}}{140} +\entry{\code {yank-pop (M-y)}}{143} diff --git a/doc/bashref.html b/doc/bashref.html index efab99e..4b417cd 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -4,9 +4,9 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- This text is a brief description of the features that are present in -the Bash shell (version 5.3, 16 June 2023). +the Bash shell (version 5.3, 19 July 2023). -This is Edition 5.3, last updated 16 June 2023, +This is Edition 5.3, last updated 19 July 2023, of The GNU Bash Reference Manual, for Bash, Version 5.3. @@ -77,10 +77,10 @@ Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previou <span id="Bash-Features-1"></span><h1 class="top">Bash Features</h1> <p>This text is a brief description of the features that are present in -the Bash shell (version 5.3, 16 June 2023). +the Bash shell (version 5.3, 19 July 2023). The Bash home page is <a href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>. </p> -<p>This is Edition 5.3, last updated 16 June 2023, +<p>This is Edition 5.3, last updated 19 July 2023, of <cite>The GNU Bash Reference Manual</cite>, for <code>Bash</code>, Version 5.3. </p> @@ -2319,7 +2319,7 @@ command substitution. </p> <p>After these expansions are performed, quote characters present in the original word are removed unless they have been quoted themselves -(<em>quote removal</em>). +(<em>quote removal</em>). See <a href="#Quote-Removal">Quote Removal</a> for more details. </p> <p>Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions @@ -2329,9 +2329,6 @@ The only exceptions to this are the expansions of <code>"${<var>name</var>[@]}"</code> and <code>${<var>name</var>[*]}</code> (see <a href="#Arrays">Arrays</a>). </p> -<p>After all expansions, <code>quote removal</code> (see <a href="#Quote-Removal">Quote Removal</a>) -is performed. -</p> <ul class="section-toc"> <li><a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></li> <li><a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></li> @@ -4595,15 +4592,16 @@ If <code>getopts</code> is silent, then a colon (‘<samp>:</samp>’) i <pre class="example">hash [-r] [-p <var>filename</var>] [-dt] [<var>name</var>] </pre></div> -<p>Each time <code>hash</code> is invoked, it remembers the full pathnames of the +<p>Each time <code>hash</code> is invoked, it remembers the full filenames of the commands specified as <var>name</var> arguments, so they need not be searched for on subsequent invocations. The commands are found by searching through the directories listed in <code>$PATH</code>. -Any previously-remembered pathname is discarded. +Any previously-remembered filename is discarded. The <samp>-p</samp> option inhibits the path search, and <var>filename</var> is used as the location of <var>name</var>. The <samp>-r</samp> option causes the shell to forget all remembered locations. +Assigning to the <code>PATH</code> variable also clears all hashed filenames. The <samp>-d</samp> option causes the shell to forget the remembered location of each <var>name</var>. If the <samp>-t</samp> option is supplied, the full pathname to which each @@ -4808,9 +4806,30 @@ using the rules listed above. </p></dd> </dl> -<p>When used with <code>test</code> or ‘<samp>[</samp>’, the ‘<samp><</samp>’ and ‘<samp>></samp>’ +<p>If the shell is not in <small>POSIX</small> mode, +when used with <code>test</code> or ‘<samp>[</samp>’, the ‘<samp><</samp>’ and ‘<samp>></samp>’ operators sort lexicographically using ASCII ordering. +If the shell is in <small>POSIX</small> mode, these operators use the current locale. +</p> +<p>The historical operator-precedence parsing with 4 or more arguments can +lead to ambiguities when it encounters strings that look like primaries. +The <small>POSIX</small> standard has deprecated the <samp>-a</samp> and <samp>-o</samp> +primaries and enclosing expressions within parentheses. +Scripts should no longer use them. +It’s much more reliable to restrict test invocations to a single primary, +and to replace uses of <samp>-a</samp> and <samp>-o</samp> with the shell’s +<code>&&</code> and <code>||</code> list operators. For example, use +</p> +<div class="example"> +<pre class="example">test -n string1 && test -n string2 +</pre></div> + +<p>instead of </p> +<div class="example"> +<pre class="example">test -n string1 -a -n string2 +</pre></div> + </dd> <dt id='index-times'><span><code>times</code><a href='#index-times' class='copiable-anchor'> ¶</a></span></dt> <dd><div class="example"> @@ -5974,6 +5993,8 @@ parameters, or to display the names and values of shell variables. <dd><div class="example"> <pre class="example">set [-abefhkmnptuvxBCEHPT] [-o <var>option-name</var>] [--] [-] [<var>argument</var> …] set [+abefhkmnptuvxBCEHPT] [+o <var>option-name</var>] [--] [-] [<var>argument</var> …] +set -o +set +o </pre></div> <p>If no options or arguments are supplied, <code>set</code> displays the names @@ -6062,7 +6083,15 @@ This option is ignored by interactive shells. </dd> <dt><span><code>-o <var>option-name</var></code></span></dt> <dd> -<p>Set the option corresponding to <var>option-name</var>: +<p>Set the option corresponding to <var>option-name</var>. +If <samp>-o</samp> is supplied with no <var>option-name</var>, +<code>set</code> prints the current shell options settings. +If <samp>+o</samp> is supplied with no <var>option-name</var>, +<code>set</code> prints a series of +<code>set</code> +commands to recreate the current option settings +on the standard output. +Valid option names are: </p> <dl compact="compact"> <dt><span><code>allexport</code></span></dt> @@ -6972,6 +7001,7 @@ builtin). Setting <code>extdebug</code> after the shell has started to execute a script, or referencing this variable when <code>extdebug</code> is not set, may result in inconsistent values. +Assignments to <code>BASH_ARGC</code> have no effect, and it may not be unset. </p> </dd> <dt id='index-BASH_005fARGV'><span><code>BASH_ARGV</code><a href='#index-BASH_005fARGV' class='copiable-anchor'> ¶</a></span></dt> @@ -6987,6 +7017,7 @@ builtin). Setting <code>extdebug</code> after the shell has started to execute a script, or referencing this variable when <code>extdebug</code> is not set, may result in inconsistent values. +Assignments to <code>BASH_ARGV</code> have no effect, and it may not be unset. </p> </dd> <dt id='index-BASH_005fARGV0'><span><code>BASH_ARGV0</code><a href='#index-BASH_005fARGV0' class='copiable-anchor'> ¶</a></span></dt> @@ -7058,6 +7089,7 @@ where each corresponding member of <code>FUNCNAME</code> was invoked. <code>${FUNCNAME[$i]}</code> was called (or <code>${BASH_LINENO[$i-1]}</code> if referenced within another shell function). Use <code>LINENO</code> to obtain the current line number. +Assignments to <code>BASH_LINENO</code> have no effect, and it may not be unset. </p> </dd> <dt id='index-BASH_005fLOADABLES_005fPATH'><span><code>BASH_LOADABLES_PATH</code><a href='#index-BASH_005fLOADABLES_005fPATH' class='copiable-anchor'> ¶</a></span></dt> @@ -7091,6 +7123,7 @@ corresponding shell function names in the <code>FUNCNAME</code> array variable are defined. The shell function <code>${FUNCNAME[$i]}</code> is defined in the file <code>${BASH_SOURCE[$i]}</code> and called from <code>${BASH_SOURCE[$i+1]}</code> +Assignments to <code>BASH_SOURCE</code> have no effect, and it may not be unset. </p> </dd> <dt id='index-BASH_005fSUBSHELL'><span><code>BASH_SUBSHELL</code><a href='#index-BASH_005fSUBSHELL' class='copiable-anchor'> ¶</a></span></dt> @@ -9652,6 +9685,13 @@ undergoes expansion. That means, for example, that a backslash preceding a double quote character will escape it and the backslash will be removed. +</li><li> The <code>test</code> builtin compares strings using the current locale when +processing the ‘<samp><</samp>’ and ‘<samp>></samp>’ binary operators. + +</li><li> The <code>test</code> builtin’s <samp>-t</samp> unary primary requires an argument. +Historical versions of <code>test</code> made the argument optional in certain +cases, and bash attempts to accommodate those for backwards compatibility. + </li><li> Command substitutions don’t set the ‘<samp>?</samp>’ special parameter. The exit status of a simple command without a command word is still the exit status of the last command substitution that occurred while evaluating the variable @@ -10694,8 +10734,12 @@ the terminal’s bell. </dd> <dt id='index-bind_002dtty_002dspecial_002dchars'><span><code>bind-tty-special-chars</code><a href='#index-bind_002dtty_002dspecial_002dchars' class='copiable-anchor'> ¶</a></span></dt> <dd><p>If set to ‘<samp>on</samp>’ (the default), Readline attempts to bind the control -characters treated specially by the kernel’s terminal driver to their +characters that are +treated specially by the kernel’s terminal driver to their Readline equivalents. +These override the default Readline bindings described here. +Type ‘<samp>stty -a</samp>’ at a Bash prompt to see your current terminal settings, +including the special control characters (usually <code>cchars</code>). </p> </dd> <dt id='index-blink_002dmatching_002dparen'><span><code>blink-matching-paren</code><a href='#index-blink_002dmatching_002dparen' class='copiable-anchor'> ¶</a></span></dt> @@ -11789,6 +11833,15 @@ If the insertion point is at the end of the line, this transposes the last two words on the line. </p> </dd> +<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> ¶</a></span></dt> +<dd><p>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. +Word boundaries are the same as <code>shell-forward-word</code> and +<code>shell-backward-word</code>. +</p> +</dd> <dt id='index-upcase_002dword-_0028M_002du_0029'><span><code>upcase-word (M-u)</code><a href='#index-upcase_002dword-_0028M_002du_0029' class='copiable-anchor'> ¶</a></span></dt> <dd><p>Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. @@ -11874,15 +11927,6 @@ Word boundaries are the same as <code>shell-forward-word</code>. Word boundaries are the same as <code>shell-backward-word</code>. </p> </dd> -<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> ¶</a></span></dt> -<dd><p>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. -Word boundaries are the same as <code>shell-forward-word</code> and -<code>shell-backward-word</code>. -</p> -</dd> <dt id='index-unix_002dword_002drubout-_0028C_002dw_0029'><span><code>unix-word-rubout (C-w)</code><a href='#index-unix_002dword_002drubout-_0028C_002dw_0029' class='copiable-anchor'> ¶</a></span></dt> <dd><p>Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. @@ -16003,7 +16047,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> <tr><td></td><td valign="top"><a href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"><code>shell-forward-word (M-C-f)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr> <tr><td></td><td valign="top"><a href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr> <tr><td></td><td valign="top"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> <tr><td></td><td valign="top"><a href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr> <tr><td></td><td valign="top"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a>:</td><td> </td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr> diff --git a/doc/bashref.log b/doc/bashref.log index e707ed6..edd684e 100644 --- a/doc/bashref.log +++ b/doc/bashref.log @@ -1,12 +1,12 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=pdfetex 2021.8.30) 5 JUL 2023 11:27 +This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=pdfetex 2021.8.30) 23 JUL 2023 18:18 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. %&-line parsing enabled. -**\input /usr/local/src/bash/bash-20230703/doc/bashref.texi \input /usr/local/s -rc/bash/bash-20230703/doc/bashref.texi -(/usr/local/src/bash/bash-20230703/doc/bashref.texi -(/usr/local/src/bash/bash-20230703/doc/texinfo.tex +**\input /usr/local/src/bash/bash-20230719/doc/bashref.texi \input /usr/local/s +rc/bash/bash-20230719/doc/bashref.texi +(/usr/local/src/bash/bash-20230719/doc/bashref.texi +(/usr/local/src/bash/bash-20230719/doc/texinfo.tex Loading texinfo [version 2015-11-22.14]: \outerhsize=\dimen16 \outervsize=\dimen17 @@ -162,15 +162,15 @@ This is `epsf.tex' v2.7.4 <14 February 2011> texinfo.tex: doing @include of version.texi -(/usr/local/src/bash/bash-20230703/doc/version.texi) [1{/opt/local/var/db/texmf +(/usr/local/src/bash/bash-20230719/doc/version.texi) [1{/opt/local/var/db/texmf /fonts/map/pdftex/updmap/pdftex.map}] [2] -(/usr/local/build/bash/bash-20230703/doc/bashref.toc [-1] [-2] [-3]) [-4] -(/usr/local/build/bash/bash-20230703/doc/bashref.toc) -(/usr/local/build/bash/bash-20230703/doc/bashref.toc) Chapter 1 +(/usr/local/build/bash/bash-20230719/doc/bashref.toc [-1] [-2] [-3]) [-4] +(/usr/local/build/bash/bash-20230719/doc/bashref.toc) +(/usr/local/build/bash/bash-20230719/doc/bashref.toc) Chapter 1 \openout0 = `bashref.toc'. -(/usr/local/build/bash/bash-20230703/doc/bashref.aux) +(/usr/local/build/bash/bash-20230719/doc/bashref.aux) \openout1 = `bashref.aux'. Chapter 2 [1] [2] @@ -230,7 +230,7 @@ Overfull \hbox (5.95723pt too wide) in paragraph at lines 724--725 [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] -Overfull \hbox (38.26585pt too wide) in paragraph at lines 5355--5355 +Overfull \hbox (38.26585pt too wide) in paragraph at lines 5377--5377 []@texttt set [-abefhkmnptuvxBCEHPT] [-o @textttsl option-name@texttt ] [--] [ -] [@textttsl ar-gu-ment []@texttt ][] @@ -243,7 +243,7 @@ Overfull \hbox (38.26585pt too wide) in paragraph at lines 5355--5355 .etc. -Overfull \hbox (38.26585pt too wide) in paragraph at lines 5356--5356 +Overfull \hbox (38.26585pt too wide) in paragraph at lines 5378--5378 []@texttt set [+abefhkmnptuvxBCEHPT] [+o @textttsl option-name@texttt ] [--] [ -] [@textttsl ar-gu-ment []@texttt ][] @@ -262,10 +262,10 @@ Overfull \hbox (38.26585pt too wide) in paragraph at lines 5356--5356 [118] [119] texinfo.tex: doing @include of rluser.texi - (/usr/local/src/bash/bash-20230703/lib/readline/doc/rluser.texi + (/usr/local/src/bash/bash-20230719/lib/readline/doc/rluser.texi Chapter 8 [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] -Underfull \hbox (badness 7540) in paragraph at lines 874--880 +Underfull \hbox (badness 7540) in paragraph at lines 878--884 []@textrm In the ex-am-ple above, @textttsl C-u[] @textrm is bound to the func -tion @@ -278,7 +278,7 @@ Underfull \hbox (badness 7540) in paragraph at lines 874--880 .etc. -Underfull \hbox (badness 10000) in paragraph at lines 874--880 +Underfull \hbox (badness 10000) in paragraph at lines 878--884 @texttt universal-argument[]@textrm , @textttsl M-DEL[] @textrm is bound to th e func-tion @@ -290,8 +290,8 @@ e func-tion .@texttt v .etc. -[132] [133] [134] -Overfull \hbox (26.43913pt too wide) in paragraph at lines 1108--1108 +[132] [133] [134] [135] +Overfull \hbox (26.43913pt too wide) in paragraph at lines 1112--1112 []@texttt Meta-Control-h: backward-kill-word Text after the function name is i gnored[] @@ -303,19 +303,19 @@ gnored[] .@texttt t .etc. -[135] [136] +[136] [137] @fnindfile=@write6 \openout6 = `bashref.fn'. - [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] -[147] [148] [149] [150] [151] [152] [153] [154] [155]) + [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] +[148] [149] [150] [151] [152] [153] [154] [155] [156]) texinfo.tex: doing @include of hsuser.texi -(/usr/local/src/bash/bash-20230703/lib/readline/doc/hsuser.texi Chapter 9 -[156] [157] [158] [159] [160] [161]) Chapter 10 [162] [163] [164] [165] -[166] -Underfull \hbox (badness 10000) in paragraph at lines 9662--9671 +(/usr/local/src/bash/bash-20230719/lib/readline/doc/hsuser.texi Chapter 9 +[157] [158] [159] [160] [161] [162]) Chapter 10 [163] [164] [165] [166] +[167] +Underfull \hbox (badness 10000) in paragraph at lines 9699--9708 []@textrm All of the fol-low-ing op-tions ex-cept for `@texttt alt-array-implem entation[]@textrm '[], @@ -328,7 +328,7 @@ entation[]@textrm '[], .etc. -Underfull \hbox (badness 10000) in paragraph at lines 9662--9671 +Underfull \hbox (badness 10000) in paragraph at lines 9699--9708 @textrm `@texttt disabled-builtins[]@textrm '[], `@texttt direxpand-default[]@t extrm '[], `@texttt strict-posix-default[]@textrm '[], and @@ -340,16 +340,16 @@ extrm '[], `@texttt strict-posix-default[]@textrm '[], and .@texttt a .etc. -[167] [168] [169] [170] Appendix A [171] Appendix B [172] [173] [174] [175] -[176] [177] Appendix C [178] +[168] [169] [170] [171] Appendix A [172] Appendix B [173] [174] [175] [176] +[177] [178] Appendix C [179] texinfo.tex: doing @include of fdl.texi - (/usr/local/src/bash/bash-20230703/doc/fdl.texi -[179] [180] [181] [182] [183] [184] [185]) Appendix D [186] [187] [188] -[189] [190] [191] [192] [193] [194] [195] ) + (/usr/local/src/bash/bash-20230719/doc/fdl.texi +[180] [181] [182] [183] [184] [185] [186]) Appendix D [187] [188] [189] +[190] [191] [192] [193] [194] [195] [196] ) Here is how much of TeX's memory you used: - 4102 strings out of 497086 - 47608 string characters out of 6206517 + 4103 strings out of 497086 + 47611 string characters out of 6206517 142074 words of memory out of 5000000 4869 multiletter control sequences out of 15000+600000 34315 words of font info for 116 fonts, out of 8000000 for 9000 @@ -372,10 +372,10 @@ texlive/fonts/type1/public/amsfonts/cm/cmtt12.pfb></opt/local/share/texmf-texli ve/fonts/type1/public/amsfonts/cm/cmtt9.pfb></opt/local/share/texmf-texlive/fon ts/type1/public/cm-super/sfrm1095.pfb></opt/local/share/texmf-texlive/fonts/typ e1/public/cm-super/sfrm1440.pfb> -Output written on bashref.pdf (201 pages, 809290 bytes). +Output written on bashref.pdf (202 pages, 810875 bytes). PDF statistics: - 2808 PDF objects out of 2984 (max. 8388607) - 2560 compressed objects within 26 object streams - 329 named destinations out of 1000 (max. 500000) + 2812 PDF objects out of 2984 (max. 8388607) + 2563 compressed objects within 26 object streams + 330 named destinations out of 1000 (max. 500000) 1157 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/doc/bashref.pdf b/doc/bashref.pdf Binary files differindex f3c0b0c..cb0f398 100644 --- a/doc/bashref.pdf +++ b/doc/bashref.pdf diff --git a/doc/bashref.texi b/doc/bashref.texi index cd71988..4aa9ed8 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -2177,6 +2177,14 @@ If @var{parameter} is unset or null, the expansion of $ v=123 $ echo $@{v-unset@} 123 +$ echo $@{v:-unset-or-null@} +123 +$ unset v +$ echo $@{v-unset@} +unset +$ v= +$ echo $@{v:-unset-or-null@} +unset-or-null @end example @item $@{@var{parameter}:=@var{word}@} diff --git a/doc/bashref.toc b/doc/bashref.toc index 1ec0646..d457f0d 100644 --- a/doc/bashref.toc +++ b/doc/bashref.toc @@ -62,7 +62,7 @@ @numsecentry{Bash Builtin Commands}{4.2}{Bash Builtins}{57} @numsecentry{Modifying Shell Behavior}{4.3}{Modifying Shell Behavior}{68} @numsubsecentry{The Set Builtin}{4.3.1}{The Set Builtin}{68} -@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{72} +@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{73} @numsecentry{Special Builtins}{4.4}{Special Builtins}{79} @numchapentry{Shell Variables}{5}{Shell Variables}{80} @numsecentry{Bourne Shell Variables}{5.1}{Bourne Shell Variables}{80} @@ -101,43 +101,43 @@ @numsecentry{Readline Init File}{8.3}{Readline Init File}{124} @numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{124} @numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{133} -@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{134} -@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{137} -@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{137} -@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{138} -@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{140} -@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{141} -@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{142} -@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{143} -@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{144} -@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{145} -@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{147} -@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{147} -@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{150} -@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{154} -@numchapentry{Using History Interactively}{9}{Using History Interactively}{157} -@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{157} -@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{157} -@numsecentry{History Expansion}{9.3}{History Interaction}{159} -@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{160} -@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{161} -@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{161} -@numchapentry{Installing Bash}{10}{Installing Bash}{163} -@numsecentry{Basic Installation}{10.1}{Basic Installation}{163} -@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{164} -@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{164} -@numsecentry{Installation Names}{10.4}{Installation Names}{165} -@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{165} -@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{165} -@numsecentry{Operation Controls}{10.7}{Operation Controls}{166} -@numsecentry{Optional Features}{10.8}{Optional Features}{166} -@appentry{Reporting Bugs}{A}{Reporting Bugs}{172} -@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{173} -@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{177} -@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{179} -@appentry{Indexes}{D}{Indexes}{187} -@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{187} -@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{188} -@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{189} -@appsecentry{Function Index}{D.4}{Function Index}{191} -@appsecentry{Concept Index}{D.5}{Concept Index}{193} +@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{135} +@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{138} +@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{138} +@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{139} +@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{141} +@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{142} +@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{143} +@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{144} +@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{145} +@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{146} +@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{148} +@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{148} +@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{151} +@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{155} +@numchapentry{Using History Interactively}{9}{Using History Interactively}{158} +@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{158} +@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{158} +@numsecentry{History Expansion}{9.3}{History Interaction}{160} +@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{161} +@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{162} +@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{162} +@numchapentry{Installing Bash}{10}{Installing Bash}{164} +@numsecentry{Basic Installation}{10.1}{Basic Installation}{164} +@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{165} +@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{165} +@numsecentry{Installation Names}{10.4}{Installation Names}{166} +@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{166} +@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{166} +@numsecentry{Operation Controls}{10.7}{Operation Controls}{167} +@numsecentry{Optional Features}{10.8}{Optional Features}{167} +@appentry{Reporting Bugs}{A}{Reporting Bugs}{173} +@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{174} +@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{178} +@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{180} +@appentry{Indexes}{D}{Indexes}{188} +@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{188} +@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{189} +@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{190} +@appsecentry{Function Index}{D.4}{Function Index}{192} +@appsecentry{Concept Index}{D.5}{Concept Index}{194} diff --git a/doc/bashref.vr b/doc/bashref.vr index c395e34..5bda3fb 100644 --- a/doc/bashref.vr +++ b/doc/bashref.vr @@ -156,13 +156,13 @@ \entry{history-preserve-point}{128}{\code {history-preserve-point}} \entry{history-size}{128}{\code {history-size}} \entry{horizontal-scroll-mode}{128}{\code {horizontal-scroll-mode}} -\entry{input-meta}{128}{\code {input-meta}} -\entry{meta-flag}{128}{\code {meta-flag}} +\entry{input-meta}{129}{\code {input-meta}} +\entry{meta-flag}{129}{\code {meta-flag}} \entry{isearch-terminators}{129}{\code {isearch-terminators}} \entry{keymap}{129}{\code {keymap}} \entry{mark-modified-lines}{129}{\code {mark-modified-lines}} \entry{mark-symlinked-directories}{129}{\code {mark-symlinked-directories}} -\entry{match-hidden-files}{129}{\code {match-hidden-files}} +\entry{match-hidden-files}{130}{\code {match-hidden-files}} \entry{menu-complete-display-prefix}{130}{\code {menu-complete-display-prefix}} \entry{output-meta}{130}{\code {output-meta}} \entry{page-completions}{130}{\code {page-completions}} @@ -170,7 +170,7 @@ \entry{search-ignore-case}{130}{\code {search-ignore-case}} \entry{show-all-if-ambiguous}{130}{\code {show-all-if-ambiguous}} \entry{show-all-if-unmodified}{130}{\code {show-all-if-unmodified}} -\entry{show-mode-in-prompt}{130}{\code {show-mode-in-prompt}} +\entry{show-mode-in-prompt}{131}{\code {show-mode-in-prompt}} \entry{skip-completed-text}{131}{\code {skip-completed-text}} \entry{vi-cmd-mode-string}{131}{\code {vi-cmd-mode-string}} \entry{vi-ins-mode-string}{131}{\code {vi-ins-mode-string}} diff --git a/doc/bashref.vrs b/doc/bashref.vrs index 23b79c4..5745d75 100644 --- a/doc/bashref.vrs +++ b/doc/bashref.vrs @@ -122,7 +122,7 @@ \initial {I} \entry{\code {IFS}}{80} \entry{\code {IGNOREEOF}}{89} -\entry{\code {input-meta}}{128} +\entry{\code {input-meta}}{129} \entry{\code {INPUTRC}}{89} \entry{\code {INSIDE_EMACS}}{89} \entry{\code {isearch-terminators}}{129} @@ -146,9 +146,9 @@ \entry{\code {MAPFILE}}{90} \entry{\code {mark-modified-lines}}{129} \entry{\code {mark-symlinked-directories}}{129} -\entry{\code {match-hidden-files}}{129} +\entry{\code {match-hidden-files}}{130} \entry{\code {menu-complete-display-prefix}}{130} -\entry{\code {meta-flag}}{128} +\entry{\code {meta-flag}}{129} \initial {O} \entry{\code {OLDPWD}}{90} \entry{\code {OPTARG}}{80} @@ -186,7 +186,7 @@ \entry{\code {SHLVL}}{91} \entry{\code {show-all-if-ambiguous}}{130} \entry{\code {show-all-if-unmodified}}{130} -\entry{\code {show-mode-in-prompt}}{130} +\entry{\code {show-mode-in-prompt}}{131} \entry{\code {skip-completed-text}}{131} \entry{\code {SRANDOM}}{91} \initial {T} @@ -3580,7 +3580,7 @@ start_job (int job, int foreground) /* Run the job. */ if (already_running == 0) - set_job_running (job); + jobs[job]->flags |= J_NOTIFIED; /* Save the tty settings before we start the job in the foreground. */ if (foreground) @@ -3598,12 +3598,10 @@ start_job (int job, int foreground) jobs[job]->flags |= J_ASYNC; /* running in background now */ } - /* If the job is already running, then don't bother jump-starting it. */ - if (already_running == 0) - { - jobs[job]->flags |= J_NOTIFIED; - killpg (jobs[job]->pgrp, SIGCONT); - } + /* Change job state to running only if the kill SIGCONT succeeds or if kill + says the process has terminated so we clean it up later. */ + if (killpg (jobs[job]->pgrp, SIGCONT) >= 0 || errno == ESRCH) + set_job_running (job); if (foreground) { diff --git a/lib/glob/glob.c b/lib/glob/glob.c index 2227cd9..4681f58 100644 --- a/lib/glob/glob.c +++ b/lib/glob/glob.c @@ -653,7 +653,7 @@ glob_vector (char *pat, char *dir, int flags) int hasglob; /* return value from glob_pattern_p */ int nalloca; struct globval *firstmalloc, *tmplink; - char *convfn; + char *convfn, *convpat; lastlink = 0; count = 0; @@ -765,6 +765,10 @@ glob_vector (char *pat, char *dir, int flags) if (d == NULL) return ((char **) &glob_error_return); + convpat = fnx_fromfs (pat, patlen); + if (convpat != pat) + convpat = savestring (convpat); + /* Compute the flags that will be passed to strmatch(). We don't need to do this every time through the loop. */ mflags = (noglob_dot_filenames ? FNM_PERIOD : FNM_DOTDOT) | FNM_PATHNAME; @@ -882,7 +886,7 @@ glob_vector (char *pat, char *dir, int flags) free (subdir); convfn = fnx_fromfs (dp->d_name, D_NAMLEN (dp)); - if (strmatch (pat, convfn, mflags) != FNM_NOMATCH) + if (strmatch (convpat, convfn, mflags) != FNM_NOMATCH) { if (nalloca < ALLOCA_MAX) { @@ -924,6 +928,9 @@ glob_vector (char *pat, char *dir, int flags) } (void) closedir (d); + + if (convpat != pat) + free (convpat); } /* compat: if GX_ADDCURDIR, add the passed directory also. Add an empty diff --git a/lib/readline/complete.c b/lib/readline/complete.c index 4b3a423..9f17033 100644 --- a/lib/readline/complete.c +++ b/lib/readline/complete.c @@ -2536,6 +2536,18 @@ rl_filename_completion_function (const char *text, int state) } filename_len = strlen (filename); + /* Normalize the filename if the application has set a rewrite hook. */ + if (*filename && rl_filename_rewrite_hook) + { + temp = (*rl_filename_rewrite_hook) (filename, filename_len); + if (temp != filename) + { + xfree (filename); + filename = temp; + filename_len = strlen (filename); + } + } + rl_filename_completion_desired = 1; } @@ -211,6 +211,7 @@ quote_string_for_globbing (const char *pathname, int qflags) register int i, j; int cclass, collsym, equiv, c, last_was_backslash; int savei, savej; + unsigned char cc; temp = (char *)xmalloc (2 * strlen (pathname) + 1); @@ -240,11 +241,29 @@ quote_string_for_globbing (const char *pathname, int qflags) else if (pathname[i] == CTLESC) { convert_to_backslash: + cc = pathname[i+1]; + if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') continue; + /* What to do if preceding char is backslash? */ - if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) + + /* We don't have to backslash-quote non-special ERE characters if + we're quoting a regexp. */ + if (cc != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (cc) == 0) continue; + + /* We don't have to backslash-quote non-special BRE characters if + we're quoting a glob pattern. */ + if (cc != CTLESC && (qflags & QGLOB_REGEXP) == 0 && glob_char_p (pathname+i+1) == 0) + continue; + + /* If we're in a multibyte locale, don't bother quoting multibyte + characters. It matters if we're going to convert NFD to NFC on + macOS, and doesn't make a difference on other systems. */ + if (cc != CTLESC && locale_utf8locale && UTF8_SINGLEBYTE (cc) == 0) + continue; /* probably don't need to check for UTF-8 locale */ + temp[j++] = '\\'; i++; if (pathname[i] == '\0') diff --git a/tests/run-cond b/tests/run-cond index 603e739..2cbc86a 100644 --- a/tests/run-cond +++ b/tests/run-cond @@ -2,6 +2,8 @@ echo "warning: all of these tests will fail if the conditional command has not" echo "warning: been compiled into the shell" >&2 echo "warning: some of these tests will fail if extended pattern matching has not" >&2 echo "warning: been compiled into the shell" >&2 +echo "warning: the text of system error messages may vary between systems and" >&2 +echo "warning: produce diff output." >&2 ${THIS_SH} ./cond.tests > ${BASH_TSTOUT} 2>&1 diff ${BASH_TSTOUT} cond.right && rm -f ${BASH_TSTOUT} |
