From 9831556ed0dfc007f5b0321ceb1e94582e07fceb Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Tue, 21 Jan 2020 09:46:21 -0500 Subject: [PATCH] commit bash-20200117 snapshot --- CWRU/CWRU.chlog | 86 +++++++++++++++++++- POSIX | 60 +++++++------- bashline.c | 31 +++++++- builtins/bind.def | 8 +- builtins/trap.def | 2 +- doc/bash.info | 168 ++++++++++++++++++++-------------------- doc/bashref.dvi | Bin 774948 -> 774868 bytes doc/bashref.html | 2 - doc/bashref.info | 168 ++++++++++++++++++++-------------------- doc/bashref.log | 52 +++++++------ doc/bashref.pdf | Bin 759178 -> 759156 bytes doc/bashref.ps | 111 +++++++++++++------------- doc/bashref.texi | 3 - general.c | 10 ++- lib/readline/bind.c | 27 +++++-- lib/readline/display.c | 4 +- lib/readline/funmap.c | 2 +- lib/readline/posixdir.h | 72 +---------------- lib/readline/readline.c | 16 +++- lib/readline/text.c | 4 + lib/readline/vi_mode.c | 6 +- parse.y | 4 +- po/zh_TW.po | 64 +++++++-------- subst.c | 2 +- test.c | 9 +-- trap.c | 22 ++++-- 26 files changed, 503 insertions(+), 430 deletions(-) mode change 100644 => 120000 lib/readline/posixdir.h diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 90451e4f..5cfbebdd 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -7085,5 +7085,89 @@ sig.c 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 $#. - diff --git a/POSIX b/POSIX index f3f4a0b7..d2836070 100644 --- a/POSIX +++ b/POSIX @@ -115,120 +115,118 @@ The following list is what's changed when 'POSIX mode' is in effect: read with the '.' or 'source' builtins, or in a string processed by the 'eval' builtin. - 30. Process substitution is not available. - - 31. While variable indirection is available, it may not be applied to + 30. While variable indirection is available, it may not be applied to the '#' and '?' special parameters. - 32. When expanding the '*' special parameter in a pattern context + 31. When expanding the '*' special parameter in a pattern context where the expansion is double-quoted does not treat the '$*' as if it were double-quoted. - 33. Assignment statements preceding POSIX special builtins persist in + 32. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 34. Assignment statements preceding shell function calls persist in + 33. Assignment statements preceding shell function calls persist in the shell environment after the function returns, as if a POSIX special builtin command had been executed. - 35. The 'command' builtin does not prevent builtins that take + 34. The 'command' builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded by 'command'. - 36. The 'bg' builtin uses the required format to describe each job + 35. The 'bg' builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single + 36. The output of 'kill -l' prints all the signal names on a single line, separated by spaces, without the 'SIG' prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 37. The 'kill' builtin does not accept signal names with a 'SIG' prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 38. The 'export' and 'readonly' builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading + 39. The 'trap' builtin displays signal names without the leading 'SIG'. - 41. The 'trap' builtin doesn't check the first argument for a possible + 40. The 'trap' builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use '-' as the first argument. - 42. The '.' and 'source' builtins do not search the current directory + 41. The '.' and 'source' builtins do not search the current directory for the filename argument if it is not found by searching 'PATH'. - 43. Enabling POSIX mode has the effect of setting the + 42. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells. - 44. Enabling POSIX mode has the effect of setting the 'shift_verbose' + 43. Enabling POSIX mode has the effect of setting the 'shift_verbose' option, so numeric arguments to 'shift' that exceed the number of positional parameters will result in an error message. - 45. When the 'alias' builtin displays alias definitions, it does not + 44. When the 'alias' builtin displays alias definitions, it does not display them with a leading 'alias ' unless the '-p' option is supplied. - 46. When the 'set' builtin is invoked without options, it does not + 45. When the 'set' builtin is invoked without options, it does not display shell function names and definitions. - 47. When the 'set' builtin is invoked without options, it displays + 46. When the 'set' builtin is invoked without options, it displays 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 + 47. 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. - 49. When the 'cd' builtin cannot change a directory because the length + 48. 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 fail instead of attempting to use only the supplied directory name. - 50. The 'pwd' builtin verifies that the value it prints is the same as + 49. The 'pwd' builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the '-P' option. - 51. When listing the history, the 'fc' builtin does not include an + 50. When listing the history, the 'fc' builtin does not include an indication of whether or not a history entry has been modified. - 52. The default editor used by 'fc' is 'ed'. + 51. The default editor used by 'fc' is 'ed'. - 53. The 'type' and 'command' builtins will not report a non-executable + 52. The 'type' and 'command' builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a file if it is the only so-named file found in '$PATH'. - 54. The 'vi' editing mode will invoke the 'vi' editor directly when + 53. The 'vi' editing mode will invoke the 'vi' editor directly when the 'v' command is run, instead of checking '$VISUAL' and '$EDITOR'. - 55. When the 'xpg_echo' option is enabled, Bash does not attempt to + 54. When the 'xpg_echo' option is enabled, Bash does not attempt to interpret any arguments to 'echo' as options. Each argument is displayed, after escape characters are converted. - 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' + 55. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' and '-f' options. - 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not + 56. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not interrupt the 'wait' builtin and cause it to return immediately. The trap command is run once for each child that exits. - 58. The 'read' builtin may be interrupted by a signal for which a trap + 57. The 'read' builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing 'read', the trap handler executes and 'read' returns an exit status greater than 128. - 59. Bash removes an exited background process's status from the list + 58. Bash removes an exited background process's status from the list of such statuses after the 'wait' builtin is used to obtain it. There is other POSIX behavior that Bash does not implement by default diff --git a/bashline.c b/bashline.c index 419986eb..a80d765c 100644 --- a/bashline.c +++ b/bashline.c @@ -1,6 +1,6 @@ /* bashline.c -- Bash's interface to the readline library. */ -/* Copyright (C) 1987-2019 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -1432,7 +1432,7 @@ find_cmd_start (start) rl_line_buffer[s]) { /* Handle >| token crudely; treat as > not | */ - if (rl_line_buffer[s] == '|' && rl_line_buffer[s-1] == '>') + if (s > 0 && rl_line_buffer[s] == '|' && rl_line_buffer[s-1] == '>') { ns = skip_to_delim (rl_line_buffer, s+1, COMMAND_SEPARATORS, SD_NOJMP|SD_COMPLETE/*|SD_NOSKIPCMD*/); if (ns > start || rl_line_buffer[ns] == 0) @@ -1440,6 +1440,28 @@ find_cmd_start (start) os = ns+1; continue; } + /* The only reserved word in COMMAND_SEPARATORS is `{', so handle that + specially, making sure it's in a spot acceptable for reserved words */ + if (s >= os && rl_line_buffer[s] == '{') + { + int pc, nc; /* index of previous non-whitespace, next char */ + for (pc = (s > os) ? s - 1 : os; pc > os && whitespace(rl_line_buffer[pc]); pc--) + ; + nc = rl_line_buffer[s+1]; + /* must be preceded by a command separator or be the first non- + whitespace character since the last command separator, and + followed by a shell break character (not another `{') to be a reserved word. */ + if ((pc > os && (rl_line_buffer[s-1] == '{' || strchr (COMMAND_SEPARATORS, rl_line_buffer[pc]) == 0)) || + (shellbreak(nc) == 0)) /* }} */ + { + /* Not a reserved word, look for another delim */ + ns = skip_to_delim (rl_line_buffer, s+1, COMMAND_SEPARATORS, SD_NOJMP|SD_COMPLETE/*|SD_NOSKIPCMD*/); + if (ns > start || rl_line_buffer[ns] == 0) + return os; + os = ns+1; + continue; + } + } os = s+1; } return os; @@ -4284,7 +4306,10 @@ bash_execute_unix_command (count, key) 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); - + + if (type == ISKMAP && (type = ((Keymap) cmd)[ANYOTHERKEY].type) == ISMACR) + cmd = (char*)((Keymap) cmd)[ANYOTHERKEY].function; + if (cmd == 0 || type != ISMACR) { rl_crlf (); diff --git a/builtins/bind.def b/builtins/bind.def index ea1f47cf..ced1e1b8 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-2015 Free Software Foundation, Inc. +Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -368,7 +368,7 @@ unbind_keyseq (seq) char *seq; { char *kseq; - int kslen; + int kslen, type; rl_command_func_t *f; kseq = (char *)xmalloc ((2 * strlen (seq)) + 1); @@ -378,11 +378,13 @@ unbind_keyseq (seq) builtin_error (_("`%s': cannot unbind"), seq); return EXECUTION_FAILURE; } - if ((f = rl_function_of_keyseq_len (kseq, kslen, (Keymap)0, (int *)0)) == 0) + if ((f = rl_function_of_keyseq_len (kseq, kslen, (Keymap)0, &type)) == 0) { free (kseq); return (EXECUTION_SUCCESS); } + if (type == ISKMAP) + f = ((Keymap) f)[ANYOTHERKEY].function; /* I wish this didn't have to translate the key sequence again, but readline doesn't have a binding function that takes a translated key sequence as diff --git a/builtins/trap.def b/builtins/trap.def index 2848b776..b6bc05be 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-2019 Free Software Foundation, Inc. +Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/doc/bash.info b/doc/bash.info index 89d92e50..b3d41684 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -6734,120 +6734,118 @@ startup files. read with the '.' or 'source' builtins, or in a string processed by the 'eval' builtin. - 30. Process substitution is not available. - - 31. While variable indirection is available, it may not be applied to + 30. While variable indirection is available, it may not be applied to the '#' and '?' special parameters. - 32. When expanding the '*' special parameter in a pattern context + 31. When expanding the '*' special parameter in a pattern context where the expansion is double-quoted does not treat the '$*' as if it were double-quoted. - 33. Assignment statements preceding POSIX special builtins persist in + 32. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 34. Assignment statements preceding shell function calls persist in + 33. Assignment statements preceding shell function calls persist in the shell environment after the function returns, as if a POSIX special builtin command had been executed. - 35. The 'command' builtin does not prevent builtins that take + 34. The 'command' builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded by 'command'. - 36. The 'bg' builtin uses the required format to describe each job + 35. The 'bg' builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single + 36. The output of 'kill -l' prints all the signal names on a single line, separated by spaces, without the 'SIG' prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 37. The 'kill' builtin does not accept signal names with a 'SIG' prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 38. The 'export' and 'readonly' builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading + 39. The 'trap' builtin displays signal names without the leading 'SIG'. - 41. The 'trap' builtin doesn't check the first argument for a possible + 40. The 'trap' builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use '-' as the first argument. - 42. The '.' and 'source' builtins do not search the current directory + 41. The '.' and 'source' builtins do not search the current directory for the filename argument if it is not found by searching 'PATH'. - 43. Enabling POSIX mode has the effect of setting the + 42. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells. - 44. Enabling POSIX mode has the effect of setting the 'shift_verbose' + 43. Enabling POSIX mode has the effect of setting the 'shift_verbose' option, so numeric arguments to 'shift' that exceed the number of positional parameters will result in an error message. - 45. When the 'alias' builtin displays alias definitions, it does not + 44. When the 'alias' builtin displays alias definitions, it does not display them with a leading 'alias ' unless the '-p' option is supplied. - 46. When the 'set' builtin is invoked without options, it does not + 45. When the 'set' builtin is invoked without options, it does not display shell function names and definitions. - 47. When the 'set' builtin is invoked without options, it displays + 46. When the 'set' builtin is invoked without options, it displays 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 + 47. 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. - 49. When the 'cd' builtin cannot change a directory because the length + 48. 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 fail instead of attempting to use only the supplied directory name. - 50. The 'pwd' builtin verifies that the value it prints is the same as + 49. The 'pwd' builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the '-P' option. - 51. When listing the history, the 'fc' builtin does not include an + 50. When listing the history, the 'fc' builtin does not include an indication of whether or not a history entry has been modified. - 52. The default editor used by 'fc' is 'ed'. + 51. The default editor used by 'fc' is 'ed'. - 53. The 'type' and 'command' builtins will not report a non-executable + 52. The 'type' and 'command' builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a file if it is the only so-named file found in '$PATH'. - 54. The 'vi' editing mode will invoke the 'vi' editor directly when + 53. The 'vi' editing mode will invoke the 'vi' editor directly when the 'v' command is run, instead of checking '$VISUAL' and '$EDITOR'. - 55. When the 'xpg_echo' option is enabled, Bash does not attempt to + 54. When the 'xpg_echo' option is enabled, Bash does not attempt to interpret any arguments to 'echo' as options. Each argument is displayed, after escape characters are converted. - 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' + 55. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' and '-f' options. - 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not + 56. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not interrupt the 'wait' builtin and cause it to return immediately. The trap command is run once for each child that exits. - 58. The 'read' builtin may be interrupted by a signal for which a trap + 57. The 'read' builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing 'read', the trap handler executes and 'read' returns an exit status greater than 128. - 59. Bash removes an exited background process's status from the list + 58. Bash removes an exited background process's status from the list of such statuses after the 'wait' builtin is used to obtain it. There is other POSIX behavior that Bash does not implement by default @@ -11846,60 +11844,60 @@ Node: Directory Stack Builtins273455 Node: Controlling the Prompt276423 Node: The Restricted Shell279344 Node: Bash POSIX Mode281826 -Node: Job Control292759 -Node: Job Control Basics293219 -Node: Job Control Builtins298183 -Node: Job Control Variables303329 -Node: Command Line Editing304485 -Node: Introduction and Notation306156 -Node: Readline Interaction307779 -Node: Readline Bare Essentials308970 -Node: Readline Movement Commands310753 -Node: Readline Killing Commands311713 -Node: Readline Arguments313631 -Node: Searching314675 -Node: Readline Init File316861 -Node: Readline Init File Syntax318120 -Node: Conditional Init Constructs338650 -Node: Sample Init File342846 -Node: Bindable Readline Commands345963 -Node: Commands For Moving347167 -Node: Commands For History349026 -Node: Commands For Text353321 -Node: Commands For Killing356709 -Node: Numeric Arguments359524 -Node: Commands For Completion360663 -Node: Keyboard Macros364854 -Node: Miscellaneous Commands365541 -Node: Readline vi Mode371494 -Node: Programmable Completion372401 -Node: Programmable Completion Builtins380181 -Node: A Programmable Completion Example390876 -Node: Using History Interactively396123 -Node: Bash History Facilities396807 -Node: Bash History Builtins399812 -Node: History Interaction404344 -Node: Event Designators407964 -Node: Word Designators409318 -Node: Modifiers411078 -Node: Installing Bash412889 -Node: Basic Installation414026 -Node: Compilers and Options417284 -Node: Compiling For Multiple Architectures418025 -Node: Installation Names419718 -Node: Specifying the System Type420536 -Node: Sharing Defaults421252 -Node: Operation Controls421925 -Node: Optional Features422883 -Node: Reporting Bugs433401 -Node: Major Differences From The Bourne Shell434595 -Node: GNU Free Documentation License451447 -Node: Indexes476624 -Node: Builtin Index477078 -Node: Reserved Word Index483905 -Node: Variable Index486353 -Node: Function Index502177 -Node: Concept Index515616 +Node: Job Control292713 +Node: Job Control Basics293173 +Node: Job Control Builtins298137 +Node: Job Control Variables303283 +Node: Command Line Editing304439 +Node: Introduction and Notation306110 +Node: Readline Interaction307733 +Node: Readline Bare Essentials308924 +Node: Readline Movement Commands310707 +Node: Readline Killing Commands311667 +Node: Readline Arguments313585 +Node: Searching314629 +Node: Readline Init File316815 +Node: Readline Init File Syntax318074 +Node: Conditional Init Constructs338604 +Node: Sample Init File342800 +Node: Bindable Readline Commands345917 +Node: Commands For Moving347121 +Node: Commands For History348980 +Node: Commands For Text353275 +Node: Commands For Killing356663 +Node: Numeric Arguments359478 +Node: Commands For Completion360617 +Node: Keyboard Macros364808 +Node: Miscellaneous Commands365495 +Node: Readline vi Mode371448 +Node: Programmable Completion372355 +Node: Programmable Completion Builtins380135 +Node: A Programmable Completion Example390830 +Node: Using History Interactively396077 +Node: Bash History Facilities396761 +Node: Bash History Builtins399766 +Node: History Interaction404298 +Node: Event Designators407918 +Node: Word Designators409272 +Node: Modifiers411032 +Node: Installing Bash412843 +Node: Basic Installation413980 +Node: Compilers and Options417238 +Node: Compiling For Multiple Architectures417979 +Node: Installation Names419672 +Node: Specifying the System Type420490 +Node: Sharing Defaults421206 +Node: Operation Controls421879 +Node: Optional Features422837 +Node: Reporting Bugs433355 +Node: Major Differences From The Bourne Shell434549 +Node: GNU Free Documentation License451401 +Node: Indexes476578 +Node: Builtin Index477032 +Node: Reserved Word Index483859 +Node: Variable Index486307 +Node: Function Index502131 +Node: Concept Index515570  End Tag Table diff --git a/doc/bashref.dvi b/doc/bashref.dvi index b53210ab8c05050d0f6e4c2ee9aedcf71dfdd895..9c5c9a00d9ae6ca36b0bea37ace9bda3b2729b80 100644 GIT binary patch delta 1407 zcmYk)e@s?dG?%V z=e*rLsn?FCHm+6O-W<2vo%v~4SQxM-2XWT;>U~h}BlW)UdY`V|ryus=$<^VOzW13N ziT^#+1yvjrQLXhA^~-jRD68k!;wG^cN5e@CI6?TW@hR%*vXYM@ipGTiL0 z9nV8LI}?L#Y%m66S@k101|I%IEWQWI!_G{0Y7Ndn7W2p97pyrBSFt*zrE9St(z(g0je-n*XB`p%5Bv8q9D+=Cd_A^97JnuI zWnj4pXynC-m=2K5n>Jt_5YI+tbKzA;V{6s& zoA!AczN_uKl7=hb<;!lg2PQ>jXeqQXaD$C?RO+MokOzkd==nQd+-W6Qvuwx9n9ku@ zEHOa=*Ko#63a3R{P=+%UI=E*Kaxu)YD4&9FzH!H*Lb()P2^ z;ePBpZ5J;E=%AOPHvT#k&D{ zxdo*<1zr`nWR-3!5GgPlD;WY`IN0WjlWO%)EpXc@<)ii~gO%M$Qm;%laG~v)(nST@ z1YX!84H&^MkdrS}s8A;`^_mo?uzxJNC^q#II=Ht?YEz*`6b*YNs|qg)`1VUX4A3qx ze^7eLsQsAWi_2Q2N`FgO zxtDgC;j@s$UPtE?C<{q)8tE1z90*AU+Ua41_?Lqb*9OfhpxnxdGlaMtk+(sm816zi^*i^o+yncDw8gV=UU&9t?+0dbnyzma?C^8&hzLiN;olG K{+|3QuKxkaJ@AMC delta 1481 zcmYk*e@vBC7zc2l1NS-a%X_&$Sbzc|3aQAid*Q-G=M1b!X(;SE$Y=@vAeji+1^!Sr zLqnw?AhZJlGedC-h@yDLMkW=)=!c<%8Cz;h$Hpk7%{esfz4zpL-@nf1`#kS+&bys= z^kmG5wwT&by(M9VB{4qklR0zd0ILfjVdahr2UIvng~Ox5;aTC(^*Hc?uZQub7nA+) zx#uzCO@+z+cn8|pv_EbVLE2oL5v!zmIGU9HK~Zhm?_0Jxou7NOJB#y+ON#T0 z3hVQo^@T;n^|`g(3rp*sZ+$H{zaV#W!M5m6U4yHu>wFH@$61*n01wM;|1p-G4Zv@i zZxH&j1A%x@uW7Y0zaYE?@%%v$?gHii840W)7$?Ba(idQ(_Kid~vjE?QEAsMQBkk?$DE7lhD-xJg0|?0%xz|H9a&7^xQ_B9$E!vrqF7DI|A9WxJ)6l zYh6m@U+d_81v&)wnCU$QwsW zMFo;+mpA;$&#$8=^)M#Fnrs@ZKp87{s{7v0qet~{gR5AhSFg7_Bp=coFZfHK>0`Ru z8x9HhHPAwZGQAg%Oma8iaP{NDVrYv!2sD>4G=Oixl_5*dxv751dk~5$*;EuRD`v-;e%-1xS`=wQ$q@VDN0jXUF zrTm{^$!;RwFJc+~UV$vtASd$5ap|%VvNcK5l+Ngh22D98 zSgzHPVBr0sa+yi}b4D8FRDQ@N2l&7if$0=^u8(?~+?Di=vY&};j1cP1mjlgE?ZTUU z-X3|E8U7X+tCDB+aE_~$wGhoQefi+eiU*NKULv<$ F&%g0T@6P}L diff --git a/doc/bashref.html b/doc/bashref.html index 8b3a3fb7..54b41131 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -8993,8 +8993,6 @@ results in an invalid expression. with the . or source builtins, or in a string processed by the eval builtin. -
  • Process substitution is not available. -
  • While variable indirection is available, it may not be applied to the ‘#’ and ‘?’ special parameters. diff --git a/doc/bashref.info b/doc/bashref.info index d097e5a9..0ae8deb7 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -6734,120 +6734,118 @@ startup files. read with the '.' or 'source' builtins, or in a string processed by the 'eval' builtin. - 30. Process substitution is not available. - - 31. While variable indirection is available, it may not be applied to + 30. While variable indirection is available, it may not be applied to the '#' and '?' special parameters. - 32. When expanding the '*' special parameter in a pattern context + 31. When expanding the '*' special parameter in a pattern context where the expansion is double-quoted does not treat the '$*' as if it were double-quoted. - 33. Assignment statements preceding POSIX special builtins persist in + 32. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 34. Assignment statements preceding shell function calls persist in + 33. Assignment statements preceding shell function calls persist in the shell environment after the function returns, as if a POSIX special builtin command had been executed. - 35. The 'command' builtin does not prevent builtins that take + 34. The 'command' builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded by 'command'. - 36. The 'bg' builtin uses the required format to describe each job + 35. The 'bg' builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 37. The output of 'kill -l' prints all the signal names on a single + 36. The output of 'kill -l' prints all the signal names on a single line, separated by spaces, without the 'SIG' prefix. - 38. The 'kill' builtin does not accept signal names with a 'SIG' + 37. The 'kill' builtin does not accept signal names with a 'SIG' prefix. - 39. The 'export' and 'readonly' builtin commands display their output + 38. The 'export' and 'readonly' builtin commands display their output in the format required by POSIX. - 40. The 'trap' builtin displays signal names without the leading + 39. The 'trap' builtin displays signal names without the leading 'SIG'. - 41. The 'trap' builtin doesn't check the first argument for a possible + 40. The 'trap' builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use '-' as the first argument. - 42. The '.' and 'source' builtins do not search the current directory + 41. The '.' and 'source' builtins do not search the current directory for the filename argument if it is not found by searching 'PATH'. - 43. Enabling POSIX mode has the effect of setting the + 42. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells. - 44. Enabling POSIX mode has the effect of setting the 'shift_verbose' + 43. Enabling POSIX mode has the effect of setting the 'shift_verbose' option, so numeric arguments to 'shift' that exceed the number of positional parameters will result in an error message. - 45. When the 'alias' builtin displays alias definitions, it does not + 44. When the 'alias' builtin displays alias definitions, it does not display them with a leading 'alias ' unless the '-p' option is supplied. - 46. When the 'set' builtin is invoked without options, it does not + 45. When the 'set' builtin is invoked without options, it does not display shell function names and definitions. - 47. When the 'set' builtin is invoked without options, it displays + 46. When the 'set' builtin is invoked without options, it displays 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 + 47. 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. - 49. When the 'cd' builtin cannot change a directory because the length + 48. 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 fail instead of attempting to use only the supplied directory name. - 50. The 'pwd' builtin verifies that the value it prints is the same as + 49. The 'pwd' builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the '-P' option. - 51. When listing the history, the 'fc' builtin does not include an + 50. When listing the history, the 'fc' builtin does not include an indication of whether or not a history entry has been modified. - 52. The default editor used by 'fc' is 'ed'. + 51. The default editor used by 'fc' is 'ed'. - 53. The 'type' and 'command' builtins will not report a non-executable + 52. The 'type' and 'command' builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a file if it is the only so-named file found in '$PATH'. - 54. The 'vi' editing mode will invoke the 'vi' editor directly when + 53. The 'vi' editing mode will invoke the 'vi' editor directly when the 'v' command is run, instead of checking '$VISUAL' and '$EDITOR'. - 55. When the 'xpg_echo' option is enabled, Bash does not attempt to + 54. When the 'xpg_echo' option is enabled, Bash does not attempt to interpret any arguments to 'echo' as options. Each argument is displayed, after escape characters are converted. - 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' + 55. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' and '-f' options. - 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not + 56. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not interrupt the 'wait' builtin and cause it to return immediately. The trap command is run once for each child that exits. - 58. The 'read' builtin may be interrupted by a signal for which a trap + 57. The 'read' builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing 'read', the trap handler executes and 'read' returns an exit status greater than 128. - 59. Bash removes an exited background process's status from the list + 58. Bash removes an exited background process's status from the list of such statuses after the 'wait' builtin is used to obtain it. There is other POSIX behavior that Bash does not implement by default @@ -11846,60 +11844,60 @@ Node: Directory Stack Builtins273455 Node: Controlling the Prompt276423 Node: The Restricted Shell279344 Node: Bash POSIX Mode281826 -Node: Job Control292759 -Node: Job Control Basics293219 -Node: Job Control Builtins298183 -Node: Job Control Variables303329 -Node: Command Line Editing304485 -Node: Introduction and Notation306156 -Node: Readline Interaction307779 -Node: Readline Bare Essentials308970 -Node: Readline Movement Commands310753 -Node: Readline Killing Commands311713 -Node: Readline Arguments313631 -Node: Searching314675 -Node: Readline Init File316861 -Node: Readline Init File Syntax318120 -Node: Conditional Init Constructs338650 -Node: Sample Init File342846 -Node: Bindable Readline Commands345963 -Node: Commands For Moving347167 -Node: Commands For History349026 -Node: Commands For Text353321 -Node: Commands For Killing356709 -Node: Numeric Arguments359524 -Node: Commands For Completion360663 -Node: Keyboard Macros364854 -Node: Miscellaneous Commands365541 -Node: Readline vi Mode371494 -Node: Programmable Completion372401 -Node: Programmable Completion Builtins380181 -Node: A Programmable Completion Example390876 -Node: Using History Interactively396123 -Node: Bash History Facilities396807 -Node: Bash History Builtins399812 -Node: History Interaction404344 -Node: Event Designators407964 -Node: Word Designators409318 -Node: Modifiers411078 -Node: Installing Bash412889 -Node: Basic Installation414026 -Node: Compilers and Options417284 -Node: Compiling For Multiple Architectures418025 -Node: Installation Names419718 -Node: Specifying the System Type420536 -Node: Sharing Defaults421252 -Node: Operation Controls421925 -Node: Optional Features422883 -Node: Reporting Bugs433401 -Node: Major Differences From The Bourne Shell434595 -Node: GNU Free Documentation License451447 -Node: Indexes476624 -Node: Builtin Index477078 -Node: Reserved Word Index483905 -Node: Variable Index486353 -Node: Function Index502177 -Node: Concept Index515616 +Node: Job Control292713 +Node: Job Control Basics293173 +Node: Job Control Builtins298137 +Node: Job Control Variables303283 +Node: Command Line Editing304439 +Node: Introduction and Notation306110 +Node: Readline Interaction307733 +Node: Readline Bare Essentials308924 +Node: Readline Movement Commands310707 +Node: Readline Killing Commands311667 +Node: Readline Arguments313585 +Node: Searching314629 +Node: Readline Init File316815 +Node: Readline Init File Syntax318074 +Node: Conditional Init Constructs338604 +Node: Sample Init File342800 +Node: Bindable Readline Commands345917 +Node: Commands For Moving347121 +Node: Commands For History348980 +Node: Commands For Text353275 +Node: Commands For Killing356663 +Node: Numeric Arguments359478 +Node: Commands For Completion360617 +Node: Keyboard Macros364808 +Node: Miscellaneous Commands365495 +Node: Readline vi Mode371448 +Node: Programmable Completion372355 +Node: Programmable Completion Builtins380135 +Node: A Programmable Completion Example390830 +Node: Using History Interactively396077 +Node: Bash History Facilities396761 +Node: Bash History Builtins399766 +Node: History Interaction404298 +Node: Event Designators407918 +Node: Word Designators409272 +Node: Modifiers411032 +Node: Installing Bash412843 +Node: Basic Installation413980 +Node: Compilers and Options417238 +Node: Compiling For Multiple Architectures417979 +Node: Installation Names419672 +Node: Specifying the System Type420490 +Node: Sharing Defaults421206 +Node: Operation Controls421879 +Node: Optional Features422837 +Node: Reporting Bugs433355 +Node: Major Differences From The Bourne Shell434549 +Node: GNU Free Documentation License451401 +Node: Indexes476578 +Node: Builtin Index477032 +Node: Reserved Word Index483859 +Node: Variable Index486307 +Node: Function Index502131 +Node: Concept Index515570  End Tag Table diff --git a/doc/bashref.log b/doc/bashref.log index 6de9d2ee..2c0dd8ec 100644 --- a/doc/bashref.log +++ b/doc/bashref.log @@ -1,9 +1,11 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/MacPorts 2019.50896_1) (preloaded format=pdftex 2019.11.6) 6 JAN 2020 09:08 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/MacPorts 2019.50896_1) (preloaded format=pdfetex 2019.11.6) 17 JAN 2020 11:15 entering extended mode restricted \write18 enabled. + file:line:error style messages enabled. %&-line parsing enabled. -**/usr/homes/chet/src/bash/src/doc/bashref.texi -(/usr/homes/chet/src/bash/src/doc/bashref.texi (./texinfo.tex +**\nonstopmode \input /usr/homes/chet/src/bash/src/doc/bashref.texi +(/usr/homes/chet/src/bash/src/doc/bashref.texi +(/Users/chet/src/bash/src/doc/texinfo.tex Loading texinfo [version 2015-11-22.14]: \outerhsize=\dimen16 \outervsize=\dimen17 @@ -159,19 +161,22 @@ This is `epsf.tex' v2.7.4 <14 February 2011> texinfo.tex: doing @include of version.texi -(./version.texi) [1{/opt/local/var/db/texmf/fonts/map/pdftex/updmap/pdftex.map} -] [2] (./bashref.toc [-1] [-2] [-3]) [-4] (./bashref.toc) (./bashref.toc) -Chapter 1 +(/Users/chet/src/bash/src/doc/version.texi) [1{/opt/local/var/db/texmf/fonts/ma +p/pdftex/updmap/pdftex.map}] [2] (/Users/chet/src/bash/src/doc/bashref.toc +[-1] [-2] [-3]) [-4] (/Users/chet/src/bash/src/doc/bashref.toc) +(/Users/chet/src/bash/src/doc/bashref.toc) Chapter 1 \openout0 = `bashref.toc'. - (./bashref.aux) + +(/Users/chet/src/bash/src/doc/bashref.aux) \openout1 = `bashref.aux'. Chapter 2 [1] [2] @cpindfile=@write2 \openout2 = `bashref.cp'. - [3] Chapter 3 [4] [5] [6] + [3] Chapter 3 +[4] [5] [6] @vrindfile=@write3 \openout3 = `bashref.vr'. @@ -179,19 +184,18 @@ Chapter 1 @rwindfile=@write4 \openout4 = `bashref.rw'. - -[8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] -[23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] -[38] [39] [40] [41] [42] Chapter 4 [43] + [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] +[20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] +[35] [36] [37] [38] [39] [40] [41] [42] Chapter 4 [43] @btindfile=@write5 \openout5 = `bashref.bt'. - [44] [45] [46] [47] [48] [49] [50] -[51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] -[66] [67] [68] [69] [70] [71] [72] Chapter 5 [73] [74] [75] [76] [77] [78] -[79] [80] [81] [82] [83] [84] Chapter 6 [85] [86] [87] [88] [89] [90] [91] -[92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] Chapter 7 -[104] [105] [106] [107] + [44] [45] [46] [47] +[48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] +[63] [64] [65] [66] [67] [68] [69] [70] [71] [72] Chapter 5 [73] [74] [75] +[76] [77] [78] [79] [80] [81] [82] [83] [84] Chapter 6 [85] [86] [87] [88] +[89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] +[103] Chapter 7 [104] [105] [106] [107] texinfo.tex: doing @include of rluser.texi @@ -263,8 +267,8 @@ texinfo.tex: doing @include of hsuser.texi [163] Appendix C [164] texinfo.tex: doing @include of fdl.texi - (./fdl.texi [165] [166] [167] [168] [169] [170] [171]) -Appendix D [172] [173] [174] [175] [176] + (/Users/chet/src/bash/src/doc/fdl.texi [165] [166] +[167] [168] [169] [170] [171]) Appendix D [172] [173] [174] [175] [176] Overfull \vbox (0.67252pt too high) has occurred while \output is active \vbox(340.17245+0.0)x207.80492 .\glue(\topskip) 0.0 @@ -280,13 +284,13 @@ Overfull \vbox (0.67252pt too high) has occurred while \output is active [177] [178] [179] [180] [181] ) Here is how much of TeX's memory you used: - 4068 strings out of 497098 - 46669 string characters out of 6206775 + 4069 strings out of 497098 + 47090 string characters out of 6206772 137084 words of memory out of 5000000 4848 multiletter control sequences out of 15000+600000 34315 words of font info for 116 fonts, out of 8000000 for 9000 51 hyphenation exceptions out of 8191 - 16i,6n,16p,319b,968s stack positions out of 5000i,500n,10000p,200000b,80000s + 16i,6n,16p,339b,968s stack positions out of 5000i,500n,10000p,200000b,80000s {/opt/local/share/texmf-texlive/fonts/enc/dvips/ cm-super/cm-super-t1.enc} -Output written on bashref.pdf (187 pages, 759178 bytes). +Output written on bashref.pdf (187 pages, 759156 bytes). PDF statistics: 2644 PDF objects out of 2984 (max. 8388607) 2411 compressed objects within 25 object streams diff --git a/doc/bashref.pdf b/doc/bashref.pdf index f96fd14d1c3add3b11c5868d9ec75fb41ec7610b..1c3e69d9d1eeb6ef2a4ef26cb0d0f5e514a51c2b 100644 GIT binary patch delta 12449 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. -*/ - -/* This file should be included instead of or . */ - -#if !defined (_POSIXDIR_H_) -#define _POSIXDIR_H_ - -#if defined (HAVE_DIRENT_H) -# include -# if defined (HAVE_STRUCT_DIRENT_D_NAMLEN) -# define D_NAMLEN(d) ((d)->d_namlen) -# else -# define D_NAMLEN(d) (strlen ((d)->d_name)) -# endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */ -#else -# if defined (HAVE_SYS_NDIR_H) -# include -# endif -# if defined (HAVE_SYS_DIR_H) -# include -# endif -# if defined (HAVE_NDIR_H) -# include -# endif -# if !defined (dirent) -# define dirent direct -# endif /* !dirent */ -# define D_NAMLEN(d) ((d)->d_namlen) -#endif /* !HAVE_DIRENT_H */ - -/* The bash code fairly consistently uses d_fileno; make sure it's available */ -#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO) -# define d_fileno d_ino -#endif - -/* Posix does not require that the d_ino field be present, and some - systems do not provide it. */ -#if !defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO) -# define REAL_DIR_ENTRY(dp) 1 -#else -# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) -#endif /* _POSIX_SOURCE */ - -#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (BROKEN_DIRENT_D_INO) -# define D_INO_AVAILABLE -#endif - -/* Signal the rest of the code that it can safely use dirent.d_fileno */ -#if defined (D_INO_AVAILABLE) || defined (HAVE_STRUCT_DIRENT_D_FILENO) -# define D_FILENO_AVAILABLE 1 -#endif - -#endif /* !_POSIXDIR_H_ */ diff --git a/lib/readline/posixdir.h b/lib/readline/posixdir.h new file mode 120000 index 00000000..8b163845 --- /dev/null +++ b/lib/readline/posixdir.h @@ -0,0 +1 @@ +../../include/posixdir.h \ No newline at end of file diff --git a/lib/readline/readline.c b/lib/readline/readline.c index 0805fd4b..1adc383b 100644 --- a/lib/readline/readline.c +++ b/lib/readline/readline.c @@ -1,7 +1,7 @@ /* readline.c -- a general facility for reading lines of input with emacs style editing and completion. */ -/* Copyright (C) 1987-2019 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. @@ -870,6 +870,8 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq) _rl_prev_macro_key (); else _rl_unget_char (key); + if (rl_key_sequence_length > 0) + rl_executing_keyseq[--rl_key_sequence_length] = '\0'; return -2; } else if (got_subseq) @@ -882,6 +884,8 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq) _rl_prev_macro_key (); else _rl_unget_char (key); + if (rl_key_sequence_length > 0) + rl_executing_keyseq[--rl_key_sequence_length] = '\0'; return -1; } else @@ -974,7 +978,11 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq) _rl_pushed_input_available () == 0 && _rl_dispatching_keymap[ANYOTHERKEY].function && _rl_input_queued (_rl_keyseq_timeout*1000) == 0) - return (_rl_subseq_result (-2, map, key, got_subseq)); + { + if (rl_key_sequence_length > 0) + rl_executing_keyseq[--rl_key_sequence_length] = '\0'; + return (_rl_subseq_result (-2, map, key, got_subseq)); + } newkey = _rl_subseq_getchar (key); if (newkey < 0) @@ -1065,6 +1073,8 @@ _rl_subseq_result (int r, Keymap map, int key, int got_subseq) _rl_prev_macro_key (); else _rl_unget_char (key); + if (rl_key_sequence_length > 0) + rl_executing_keyseq[--rl_key_sequence_length] = '\0'; _rl_dispatching_keymap = map; return -2; } @@ -1075,6 +1085,8 @@ _rl_subseq_result (int r, Keymap map, int key, int got_subseq) _rl_prev_macro_key (); else _rl_unget_char (key); + if (rl_key_sequence_length > 0) + rl_executing_keyseq[--rl_key_sequence_length] = '\0'; _rl_dispatching_keymap = map; return -1; } diff --git a/lib/readline/text.c b/lib/readline/text.c index ff6ab688..5fe80892 100644 --- a/lib/readline/text.c +++ b/lib/readline/text.c @@ -479,6 +479,8 @@ rl_forward_word (int count, int key) while (count) { + if (rl_point > rl_end) + rl_point = rl_end; if (rl_point == rl_end) return 0; @@ -498,6 +500,8 @@ rl_forward_word (int count, int key) } } + if (rl_point > rl_end) + rl_point = rl_end; if (rl_point == rl_end) return 0; diff --git a/lib/readline/vi_mode.c b/lib/readline/vi_mode.c index dd4c3e8c..53eed15e 100644 --- a/lib/readline/vi_mode.c +++ b/lib/readline/vi_mode.c @@ -1162,6 +1162,7 @@ rl_domove_motion_callback (_rl_vimotion_cxt *m) /* Append a blank character temporarily so that the motion routines work right at the end of the line. Original value of rl_end is saved as m->end. */ + rl_extend_line_buffer (rl_end + 1); rl_line_buffer[rl_end++] = ' '; rl_line_buffer[rl_end] = '\0'; @@ -1193,8 +1194,7 @@ _rl_vi_domove_motion_cleanup (int c, _rl_vimotion_cxt *m) /* Remove the blank that we added in rl_domove_motion_callback. */ rl_end = m->end; rl_line_buffer[rl_end] = '\0'; - if (rl_point > rl_end) - rl_point = rl_end; + _rl_fix_point (0); /* No change in position means the command failed. */ if (rl_mark == rl_point) @@ -1518,6 +1518,8 @@ vi_yank_dispatch (_rl_vimotion_cxt *m) rl_do_undo (); rl_point = m->start; + _rl_fix_point (1); + return (0); } diff --git a/parse.y b/parse.y index 35a78aa0..f80a0348 100644 --- a/parse.y +++ b/parse.y @@ -1,6 +1,6 @@ /* parse.y - Yacc grammar for bash. */ -/* Copyright (C) 1989-2017 Free Software Foundation, Inc. +/* Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -3462,7 +3462,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri #if defined (PROCESS_SUBSTITUTION) /* Check for the constructs which introduce process substitution. Shells running in `posix mode' don't do process substitution. */ - if MBTEST(posixly_correct || ((character != '>' && character != '<') || peek_char != '(')) /*)*/ + if MBTEST((character != '>' && character != '<') || peek_char != '(') /*)*/ #endif /* PROCESS_SUBSTITUTION */ return (character); } diff --git a/po/zh_TW.po b/po/zh_TW.po index 7c45bf1c..0555bc6e 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: bash 5.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-19 15:52-0500\n" -"PO-Revision-Date: 2019-12-06 23:37+0800\n" +"PO-Revision-Date: 2020-01-19 00:50+0800\n" "Last-Translator: pan93412 \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -118,7 +118,7 @@ msgstr "「%s」:不明函數名稱" #: builtins/bind.def:312 #, c-format msgid "%s is not bound to any keys.\n" -msgstr "%s 未與任何鍵繫結。\n" +msgstr "%s 未與任何按鍵綁定。\n" #: builtins/bind.def:316 #, c-format @@ -128,7 +128,7 @@ msgstr "%s 可以被呼叫,藉由" #: builtins/bind.def:353 builtins/bind.def:368 #, c-format msgid "`%s': cannot unbind" -msgstr "「%s」: 無法解除繫結" +msgstr "「%s」: 無法解除綁定" #: builtins/break.def:77 builtins/break.def:119 msgid "loop count" @@ -975,7 +975,7 @@ msgstr "錯誤的跳轉" #: error.c:503 #, c-format msgid "%s: unbound variable" -msgstr "%s: 未繫結的變數" +msgstr "%s: 未綁定的變數" #: eval.c:245 #, c-format @@ -1147,7 +1147,7 @@ msgstr "start_pipeline: 行程群組管道" #: jobs.c:1084 #, c-format msgid "forked pid %d appears in running job %d" -msgstr "產生的行程識別號 %d 顯示為執行中的工作 %d" +msgstr "產生的行程識別碼 %d 顯示為執行中的工作 %d" #: jobs.c:1203 #, c-format @@ -1162,12 +1162,12 @@ msgstr "add_process: 行程 %5ld(%s) 進入 the_pipeline" #: jobs.c:1310 #, c-format msgid "add_process: pid %5ld (%s) marked as still alive" -msgstr "add_process: 行程識別號 %5ld(%s) 標註為仍活著" +msgstr "add_process: 行程識別碼 %5ld(%s) 標註為仍活著" #: jobs.c:1639 #, c-format msgid "describe_pid: %ld: no such pid" -msgstr "describe_pid: %ld: 無此行程識別號" +msgstr "describe_pid: %ld: 無此行程識別碼" #: jobs.c:1654 #, c-format @@ -1223,7 +1223,7 @@ msgstr "子行程 setpgid (%ld 到 %ld)" #: jobs.c:2399 nojobs.c:657 #, c-format msgid "wait: pid %ld is not a child of this shell" -msgstr "wait: 行程識別號 %ld 不是目前 shell 的子行程" +msgstr "wait: 行程識別碼 %ld 不是目前 shell 的子行程" #: jobs.c:2695 #, c-format @@ -2169,7 +2169,7 @@ msgstr "unalias [-a] 名稱 [名稱 …]" #: builtins.c:53 msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPSVX] [-m 按鍵映射] [-f 檔名] [-q 名稱] [-u 名稱] [-r 鍵序列] [-x 鍵序列:shell- 指令] [鍵序列:readline- 函數 或 readline- 指令]" +msgstr "bind [-lpvsPSVX] [-m 按鍵映射] [-f 檔名] [-q 名稱] [-u 名稱] [-r 按鍵序列] [-x 按鍵序列:shell-指令] [按鍵序列:readline-函數 或 readline-指令]" #: builtins.c:56 msgid "break [n]" @@ -2277,7 +2277,7 @@ msgstr "disown [-h] [-ar] [jobspec ... | pid ...]" #: builtins.c:134 msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" -msgstr "kill [-s 訊號規格 | -n 訊號編號 | - 訊號規格] 行程識別號 | 工作規格 … 或 kill -l [訊號規格]" +msgstr "kill [-s 訊號規格 | -n 訊號編號 | -訊號規格] 行程識別碼 | 工作規格 … 或 kill -l [訊號規格]" #: builtins.c:136 msgid "let arg [arg ...]" @@ -2353,7 +2353,7 @@ msgstr "wait [-fn] [編號 …]" #: builtins.c:181 msgid "wait [pid ...]" -msgstr "wait [行程識別號 …]" +msgstr "wait [行程識別碼 …]" #: builtins.c:184 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" @@ -2541,9 +2541,9 @@ msgid "" " Exit Status:\n" " bind returns 0 unless an unrecognized option is given or an error occurs." msgstr "" -"設定 Readline 鍵繫結和變數。\n" +"設定 Readline 按鍵綁定和變數。\n" " \n" -" 繫結一個鍵序列到一個 Readline 函數或者巨集,或者設定一個\n" +" 綁定一個按鍵序列到一個 Readline 函數或者巨集,或者設定一個\n" " Readline 變數。非選項參數的語法和 ~/.inputrc 檔案中的等\n" " 同,但是必須做為一個參數被傳遞,\n" " 例如,bind '\"\\C-x\\C-r\": re-read-init-file'。\n" @@ -2553,21 +2553,21 @@ msgstr "" " 可被接受的按鍵映射名字有 emacs、emacs-standard、emacs-meta、\n" " emacs-ctlx、vi、vi-move、vi-command、和 vi-insert。\n" " -l 列出函數名稱。\n" -" -P 列出函數名稱和繫結。\n" -" -p 以可以重新用作輸入的格式列出函數名稱和繫結。\n" -" -S 列出可以啟動巨集的鍵序列以及它們的值\n" +" -P 列出函數名稱和綁定。\n" +" -p 以可以重新用作輸入的格式列出函數名稱和綁定。\n" +" -S 列出可以啟動巨集的按鍵序列以及它們的值\n" " -s 以可以重新用作輸入的格式列出可以啟動巨集的鍵以及它們的值。\n" " -V 列出變數名稱和它們的值\n" " -v 以可以重新用作輸入的格式列出變數的名稱和它們的值\n" " -q 函數名 查詢指定的函數可以由哪些鍵啟動。\n" -" -u 函數名 反繫結所有繫結至指定函數的鍵。\n" -" -r 鍵序列 取消指定鍵序列的繫結。\n" -" -f 檔名 從指定檔案中讀取鍵繫結。\n" -" -x 鍵序列:shell 指令\t當指定的鍵序列被輸入時,執行指定的 shell 指令。\n" -" -X 以可被重用的形式列出用 -x 繫結的鍵序列和指令。\n" +" -u 函數名 反綁定所有綁定至指定函數的鍵。\n" +" -r 按鍵序列 取消指定按鍵序列的綁定。\n" +" -f 檔名 從指定檔案中讀取按鍵綁定。\n" +" -x 按鍵序列:shell 指令\t當指定的按鍵序列被輸入時,執行指定的 shell 指令。\n" +" -X 以可被重用的形式列出用 -x 綁定的按鍵序列和指令。\n" " \n" " 退出狀態:\n" -" 除非使用了無法辨認的選項或者錯誤發生,否則回傳 0。" +" 除非使用了無法識別的選項或者錯誤發生,否則回傳 0。" #: builtins.c:330 msgid "" @@ -3472,14 +3472,14 @@ msgstr "" " 不帶選項時,所有活動工作的狀態都會顯示。\n" " \n" " 選項:\n" -" -l\t在正常資訊基礎上列出行程識別號\n" +" -l\t在正常資訊基礎上列出行程識別碼\n" " -n\t僅列出上次通告之後變更了狀態的行程\n" -" -p\t僅列出行程識別號\n" +" -p\t僅列出行程識別碼\n" " -r\t限制僅輸出執行中的工作\n" " -s\t限制僅輸出停止的工作\n" " \n" " 如果使用了 -x 選項,<參數> 中的所有工作規格會被取代為該工作\n" -" 的行程群組首領的行程識別號,然後執行 COMMAND 指令。\n" +" 的行程群組首領的行程識別碼,然後執行 COMMAND 指令。\n" " \n" " 退出狀態:\n" " 回傳成功,除非使用了無效的選項或者有錯誤發生。\n" @@ -3539,7 +3539,7 @@ msgid "" msgstr "" "向一個工作傳送一個訊號。\n" " \n" -" 向以 PID 行程識別號或者 JOBSPEC 工作規格指定的行程傳送一個以\n" +" 向以 PID 行程識別碼或者 JOBSPEC 工作規格指定的行程傳送一個以\n" " SIGSPEC 訊號規格或 SIGNUM 訊號編號命名的訊號。如果沒有指定\n" " SIGSPEC 或 SIGNUM,那麼假定傳送 SIGTERM 訊號。\n" " \n" @@ -3549,7 +3549,7 @@ msgstr "" " -l\t列出訊號名稱;如果參數後跟「-l」則被假設為訊號編號,\n" " \t而相應的訊號名稱會被列出\n" " \n" -" Kill 成為 shell 內建物件有兩個理由:它允許使用工作編號而不是行程識別號,\n" +" Kill 成為 shell 內建物件有兩個理由:它允許使用工作編號而不是行程識別碼,\n" " 並且在可以建立的行程數上限達到時允許行程被砍除。\n" " \n" " 退出狀態:\n" @@ -4525,10 +4525,10 @@ msgstr "" "等待行程完成並且回傳退出狀態。\n" " \n" " 等待指定行程並通報它的終止狀態。如果沒有提供 PID,則目前所有的活躍\n" -" 子行程都會被等待,並且回傳碼為零。PID 必須為行程識別號。\n" +" 子行程都會被等待,並且回傳碼為零。PID 必須為行程識別碼。\n" " \n" " 退出狀態:\n" -" 回傳行程 ID 的狀態;如果 PID 是無效的行程識別號或者指定了無效的選項則失敗。" +" 回傳行程 ID 的狀態;如果 PID 是無效的行程識別碼或者指定了無效的選項則失敗。" #: builtins.c:1538 msgid "" @@ -5179,16 +5179,16 @@ msgid "" " Returns success unless an invalid option is given or a write or assignment\n" " error occurs." msgstr "" -"在 FORMAT 的控制下格式化並印出 <參數>。\n" +"在 <格式> 的控制下格式化並印出 <參數>。\n" " \n" " 選項:\n" " -v var\t將輸出指派給 shell 變數 VAR 而不顯示在標準輸出上\n" " \n" -" FORMAT 是包含三種物件的字串:簡單地被複製到標準輸出的普通字元;\n" +" <格式> 是包含三種物件的字串:簡單地被複製到標準輸出的普通字元;\n" " 被變換之後複製到標準輸入的逸出字元;以及每個都會影響到下個參數的印出格式化規格。\n" " \n" " 在 printf(1) 中描述的標準控制規格之外,printf 解析:\n" -"、 \n" +" \n" " %b\t擴充套件對應參數中的反斜線逸出序列\n" " %q\t以可做為 shell 輸入的格式引用參數\n" " %(fmt)T\t以 FMT 為提供 strftime(3) 的格式輸出日期與時間字串 \n" diff --git a/subst.c b/subst.c index 6c5b32c1..716011a0 100644 --- a/subst.c +++ b/subst.c @@ -10046,7 +10046,7 @@ add_string: { /* XXX - technically this should only be expanded at the start of a word */ - if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (word->flags & (W_DQUOTE|W_NOPROCSUB)) || posixly_correct) + if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (word->flags & (W_DQUOTE|W_NOPROCSUB))) { sindex--; /* add_character: label increments sindex */ goto add_character; diff --git a/test.c b/test.c index 9cbc0436..a0b143b7 100644 --- a/test.c +++ b/test.c @@ -639,14 +639,7 @@ unary_test (op, arg) } #if 0 /* TAG:bash-5.1 from Martijn Dekker */ else if (legal_number (arg, &r)) /* -v n == is $n set? */ - { - char *t; - int ret; - t = get_dollar_var_value (r); - ret = t ? TRUE : FALSE; - free (t); - return ret; - } + return ((r >= 0 && r <= number_of_args()) ? TRUE : FALSE); #endif v = find_variable (arg); if (v && invisible_p (v) == 0 && array_p (v)) diff --git a/trap.c b/trap.c index 3cb67cdf..a4c991bc 100644 --- a/trap.c +++ b/trap.c @@ -1,7 +1,7 @@ /* trap.c -- Not the trap command, but useful functions for manipulating those objects. The trap command is in builtins/trap.def. */ -/* Copyright (C) 1987-2018 Free Software Foundation, Inc. +/* Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -294,6 +294,7 @@ run_pending_traps () { register int sig; int old_exit_value, x; + int old_running; WORD_LIST *save_subst_varlist; HASH_TABLE *save_tempenv; sh_parser_state_t pstate; @@ -330,6 +331,7 @@ run_pending_traps () #if defined (ARRAY_VARS) ps = save_pipestatus_array (); #endif + old_running = running_trap; for (sig = 1; sig < NSIG; sig++) { @@ -440,7 +442,7 @@ run_pending_traps () } pending_traps[sig] = 0; /* XXX - move before evalstring? */ - running_trap = 0; + running_trap = old_running; } } @@ -966,7 +968,8 @@ _run_trap_internal (sig, tag) { char *trap_command, *old_trap; int trap_exit_value; - volatile int save_return_catch_flag, function_code, old_int; + volatile int save_return_catch_flag, function_code; + int old_modes, old_running, old_int; int flags; procenv_t save_return_catch; WORD_LIST *save_subst_varlist; @@ -976,13 +979,15 @@ _run_trap_internal (sig, tag) ARRAY *ps; #endif + old_modes = old_running = -1; + trap_exit_value = function_code = 0; trap_saved_exit_value = last_command_exit_value; /* Run the trap only if SIG is trapped and not ignored, and we are not currently executing in the trap handler. */ if ((sigmodes[sig] & SIG_TRAPPED) && ((sigmodes[sig] & SIG_IGNORED) == 0) && (trap_list[sig] != (char *)IMPOSSIBLE_TRAP_HANDLER) && -#if 0 +#if 1 /* Uncomment this to allow some special signals to recursively execute trap handlers. */ (RECURSIVE_SIG (sig) || (sigmodes[sig] & SIG_INPROGRESS) == 0)) @@ -991,6 +996,9 @@ _run_trap_internal (sig, tag) #endif { old_trap = trap_list[sig]; + old_modes = sigmodes[sig]; + old_running = running_trap; + sigmodes[sig] |= SIG_INPROGRESS; sigmodes[sig] &= ~SIG_CHANGED; /* just to be sure */ trap_command = savestring (old_trap); @@ -1050,8 +1058,10 @@ _run_trap_internal (sig, tag) temporary_env = save_tempenv; - sigmodes[sig] &= ~SIG_INPROGRESS; - running_trap = 0; + if ((old_modes & SIG_INPROGRESS) == 0) + sigmodes[sig] &= ~SIG_INPROGRESS; + + running_trap = old_running; interrupt_state = old_int; if (sigmodes[sig] & SIG_CHANGED)