commit bash-20200117 snapshot

This commit is contained in:
Chet Ramey
2020-01-21 09:46:21 -05:00
parent abfcfa4e6f
commit 9831556ed0
26 changed files with 503 additions and 430 deletions
+85 -1
View File
@@ -7085,5 +7085,89 @@ sig.c
run_pending_traps the next time a trap handler for that signal
runs. Bug report from Martijn Dekker <martijn@inlv.org>
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 <myoga.murase@gmail.com>
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 <myoga.murase@gmail.com>
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 <myoga.murase@gmail.com>
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 <myoga.murase@gmail.com>
- 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 <myoga.murase@gmail.com>
- 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 <myoga.murase@gmail.com>
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 <martijn@inlv.org>
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 <martijn@inlv.org>; 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 <tosswald@ernw.de>
- 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 $#.
+29 -31
View File
@@ -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
+28 -3
View File
@@ -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 ();
+5 -3
View File
@@ -1,7 +1,7 @@
This file is bind.def, from which is created bind.c.
It implements the builtin "bind" in Bash.
Copyright (C) 1987-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
+1 -1
View File
@@ -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.
+83 -85
View File
@@ -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
BIN
View File
Binary file not shown.
-2
View File
@@ -8993,8 +8993,6 @@ results in an invalid expression.
with the <code>.</code> or <code>source</code> builtins, or in a string processed by
the <code>eval</code> builtin.
</li><li> Process substitution is not available.
</li><li> While variable indirection is available, it may not be applied to the
&lsquo;<samp>#</samp>&rsquo; and &lsquo;<samp>?</samp>&rsquo; special parameters.
+83 -85
View File
@@ -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
+28 -24
View File
@@ -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}</opt/local/share/texmf-texlive/fonts/type1/public/ams
fonts/cm/cmbx12.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts
@@ -304,7 +308,7 @@ s/type1/public/amsfonts/cm/cmtt12.pfb></opt/local/share/texmf-texlive/fonts/typ
e1/public/amsfonts/cm/cmtt9.pfb></opt/local/share/texmf-texlive/fonts/type1/pub
lic/cm-super/sfrm1095.pfb></opt/local/share/texmf-texlive/fonts/type1/public/cm
-super/sfrm1440.pfb>
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
BIN
View File
Binary file not shown.
+55 -56
View File
@@ -1,7 +1,7 @@
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.999 Copyright 2019 Radical Eye Software
%%Title: bashref.dvi
%%CreationDate: Mon Jan 6 13:53:44 2020
%%CreationDate: Fri Jan 17 16:15:33 2020
%%Pages: 187
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
@@ -12,7 +12,7 @@
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
%DVIPSParameters: dpi=600
%DVIPSSource: TeX output 2020.01.06:0853
%DVIPSSource: TeX output 2020.01.17:1115
%%BeginProcSet: tex.pro 0 0
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -15507,80 +15507,79 @@ b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e(an)h(error)g
(assignmen)m(t)h(statemen)m(ts.)69 b(A)39 b(v)-5 b(ariable)40
b(assignmen)m(t)330 518 y(error)30 b(o)s(ccurs,)g(for)g(example,)i
(when)d(trying)i(to)g(assign)f(a)h(v)-5 b(alue)31 b(to)g(a)g(readonly)f
(v)-5 b(ariable.)154 650 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j
(v)-5 b(ariable.)154 656 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j
(shell)d(exits)h(with)e(an)h(error)g(status)g(if)g(a)g(v)-5
b(ariable)32 b(assignmen)m(t)g(error)e(o)s(ccurs)330
759 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g(preceding)e(a)h(sp)s
766 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g(preceding)e(a)h(sp)s
(ecial)g(builtin,)f(but)g(not)g(with)h(an)m(y)f(other)h(simple)330
869 y(command.)154 1000 y(25.)61 b(A)43 b(non-in)m(teractiv)m(e)i
876 y(command.)154 1014 y(25.)61 b(A)43 b(non-in)m(teractiv)m(e)i
(shell)e(exits)h(with)f(an)f(error)h(status)g(if)g(the)g(iteration)h(v)
-5 b(ariable)44 b(in)f(a)g Ft(for)330 1110 y Fu(statemen)m(t)32
-5 b(ariable)44 b(in)f(a)g Ft(for)330 1124 y Fu(statemen)m(t)32
b(or)f(the)f(selection)i(v)-5 b(ariable)32 b(in)e(a)g
Ft(select)f Fu(statemen)m(t)j(is)f(a)f(readonly)h(v)-5
b(ariable.)154 1241 y(26.)61 b(Non-in)m(teractiv)m(e)34
b(ariable.)154 1262 y(26.)61 b(Non-in)m(teractiv)m(e)34
b(shells)c(exit)h(if)g Fr(\014lename)k Fu(in)30 b Ft(.)g
Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 1373 y(27.)61
Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 1401 y(27.)61
b(Non-in)m(teractiv)m(e)41 b(shells)d(exit)h(if)f(a)g(syn)m(tax)g
(error)g(in)f(an)h(arithmetic)h(expansion)f(results)f(in)h(an)330
1482 y(in)m(v)-5 b(alid)31 b(expression.)154 1614 y(28.)61
1510 y(in)m(v)-5 b(alid)31 b(expression.)154 1649 y(28.)61
b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g(a)f(parameter)h
(expansion)g(error)f(o)s(ccurs.)154 1745 y(29.)61 b(Non-in)m(teractiv)m
(expansion)g(error)f(o)s(ccurs.)154 1787 y(29.)61 b(Non-in)m(teractiv)m
(e)27 b(shells)c(exit)i(if)e(there)h(is)f(a)h(syn)m(tax)g(error)f(in)g
(a)h(script)f(read)g(with)h(the)f Ft(.)g Fu(or)h Ft(source)330
1855 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i
(the)f Ft(eval)f Fu(builtin.)154 1987 y(30.)61 b(Pro)s(cess)30
b(substitution)g(is)h(not)f(a)m(v)-5 b(ailable.)154 2118
y(31.)61 b(While)32 b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5
b(ailable,)34 b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p
1897 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i
(the)f Ft(eval)f Fu(builtin.)154 2035 y(30.)61 b(While)32
b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5 b(ailable,)34
b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p
Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330
2228 y(parameters.)154 2359 y(32.)61 b(When)28 b(expanding)g(the)g(`)p
2145 y(parameters.)154 2283 y(31.)61 b(When)28 b(expanding)g(the)g(`)p
Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)h(pattern)f(con)m(text)i
(where)e(the)g(expansion)g(is)330 2469 y(double-quoted)i(do)s(es)g(not)
(where)e(the)g(expansion)g(is)330 2393 y(double-quoted)i(do)s(es)g(not)
h(treat)h(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g(double-quoted.)154
2600 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e
2531 y(32.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e
Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s(ersist)g(in)f(the)i(shell)f
(en)m(vironmen)m(t)330 2710 y(after)31 b(the)f(builtin)g(completes.)154
2841 y(34.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f
(en)m(vironmen)m(t)330 2641 y(after)31 b(the)f(builtin)g(completes.)154
2779 y(33.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f
(function)g(calls)i(p)s(ersist)e(in)g(the)h(shell)f(en)m(vironmen)m(t)
330 2951 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h
330 2889 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h
Fm(posix)e Fu(sp)s(ecial)i(builtin)f(command)g(had)g(b)s(een)g
(executed.)154 3082 y(35.)61 b(The)31 b Ft(command)e
(executed.)154 3027 y(34.)61 b(The)31 b Ft(command)e
Fu(builtin)i(do)s(es)g(not)h(prev)m(en)m(t)f(builtins)g(that)h(tak)m(e)
h(assignmen)m(t)f(statemen)m(ts)h(as)f(ar-)330 3192 y(gumen)m(ts)40
h(assignmen)m(t)f(statemen)m(ts)h(as)f(ar-)330 3137 y(gumen)m(ts)40
b(from)e(expanding)h(them)g(as)h(assignmen)m(t)g(statemen)m(ts;)46
b(when)38 b(not)i(in)f Fm(posix)f Fu(mo)s(de,)330 3302
b(when)38 b(not)i(in)f Fm(posix)f Fu(mo)s(de,)330 3246
y(assignmen)m(t)k(builtins)e(lose)h(their)g(assignmen)m(t)h(statemen)m
(t)h(expansion)d(prop)s(erties)g(when)g(pre-)330 3411
y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 3543 y(36.)61
(t)h(expansion)d(prop)s(erties)g(when)g(pre-)330 3356
y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 3494 y(35.)61
b(The)27 b Ft(bg)g Fu(builtin)g(uses)g(the)h(required)f(format)h(to)g
(describ)s(e)f(eac)m(h)i(job)e(placed)h(in)f(the)h(bac)m(kground,)330
3652 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g(indication)h(of)f
3604 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g(indication)h(of)f
(whether)f(the)h(job)g(is)g(the)h(curren)m(t)e(or)h(previous)g(job.)154
3784 y(37.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29
3742 y(36.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29
b(-l)p Fu(')23 b(prin)m(ts)f(all)i(the)g(signal)f(names)g(on)g(a)h
(single)g(line,)h(separated)e(b)m(y)g(spaces,)330 3893
(single)g(line,)h(separated)e(b)m(y)g(spaces,)330 3852
y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
4025 y(38.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept)
3990 y(37.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept)
h(signal)f(names)f(with)g(a)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
4156 y(39.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f
4129 y(38.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f
Fu(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in)g(the)h
(format)g(re-)330 4266 y(quired)30 b(b)m(y)g Fm(posix)p
Fu(.)154 4398 y(40.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g
(format)g(re-)330 4238 y(quired)30 b(b)m(y)g Fm(posix)p
Fu(.)154 4377 y(39.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g
(signal)i(names)e(without)g(the)h(leading)g Ft(SIG)p
Fu(.)154 4529 y(41.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g
Fu(.)154 4515 y(40.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g
(c)m(hec)m(k)h(the)g(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e
(signal)i(sp)s(eci\014cation)330 4639 y(and)30 b(rev)m(ert)i(the)e
(signal)i(sp)s(eci\014cation)330 4625 y(and)30 b(rev)m(ert)i(the)e
(signal)i(handling)e(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g
(is,)g(unless)f(that)h(argumen)m(t)330 4748 y(consists)e(solely)g(of)g
(is,)g(unless)f(that)h(argumen)m(t)330 4734 y(consists)e(solely)g(of)g
(digits)g(and)f(is)g(a)h(v)-5 b(alid)29 b(signal)g(n)m(um)m(b)s(er.)38
b(If)28 b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330
4858 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s
4844 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s
(osition,)f(they)g(should)f(use)h(`)p Ft(-)p Fu(')g(as)g(the)g(\014rst)
f(argumen)m(t.)154 4989 y(42.)61 b(The)21 b Ft(.)h Fu(and)f
f(argumen)m(t.)154 4982 y(41.)61 b(The)21 b Ft(.)h Fu(and)f
Ft(source)f Fu(builtins)h(do)g(not)h(searc)m(h)h(the)f(curren)m(t)f
(directory)h(for)g(the)g(\014lename)f(argumen)m(t)330
5099 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g
Ft(PATH)p Fu(.)154 5230 y(43.)61 b(Enabling)21 b Fm(posix)g
5092 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g
Ft(PATH)p Fu(.)154 5230 y(42.)61 b(Enabling)21 b Fm(posix)g
Fu(mo)s(de)g(has)g(the)g(e\013ect)i(of)e(setting)i(the)e
Ft(inherit_errexit)d Fu(option,)23 b(so)f(subshells)330
5340 y(spa)m(wned)27 b(to)i(execute)g(command)e(substitutions)h
@@ -15592,30 +15591,30 @@ b(Bash)30 b(F)-8 b(eatures)2439 b(103)330 299 y(paren)m(t)37
b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c Fu(option)38
b(is)f(not)h(enabled,)h(Bash)e(clears)h(the)g Ft(-e)330
408 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)154 542
y(44.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g
y(43.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g
(of)g(setting)g(the)g Ft(shift_verbose)28 b Fu(option,)34
b(so)e(n)m(umeric)330 652 y(argumen)m(ts)f(to)g Ft(shift)f
Fu(that)h(exceed)h(the)e(n)m(um)m(b)s(er)g(of)h(p)s(ositional)g
(parameters)g(will)g(result)g(in)f(an)330 762 y(error)g(message.)154
896 y(45.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i
896 y(44.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i
(alias)g(de\014nitions,)i(it)d(do)s(es)g(not)g(displa)m(y)h(them)f
(with)g(a)330 1005 y(leading)31 b(`)p Ft(alias)e Fu(')i(unless)f(the)g
Ft(-p)g Fu(option)h(is)f(supplied.)154 1139 y(46.)61
Ft(-p)g Fu(option)h(is)f(supplied.)154 1139 y(45.)61
b(When)40 b(the)g Ft(set)f Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h
(without)f(options,)j(it)e(do)s(es)f(not)g(displa)m(y)g(shell)g
(function)330 1249 y(names)30 b(and)g(de\014nitions.)154
1383 y(47.)61 b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)
1383 y(46.)61 b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)
m(ed)i(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37
b(v)-5 b(alues)37 b(without)330 1492 y(quotes,)26 b(unless)d(they)i
(con)m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result)
g(con)m(tains)i(nonprin)m(ting)330 1602 y(c)m(haracters.)154
1736 y(48.)61 b(When)35 b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m
1736 y(47.)61 b(When)35 b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m
(ed)i(in)d Fr(logical)41 b Fu(mo)s(de,)36 b(and)f(the)g(pathname)g
(constructed)g(from)330 1845 y Ft($PWD)i Fu(and)h(the)h(directory)f
(name)h(supplied)e(as)i(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g
(an)f(existing)330 1955 y(directory)-8 b(,)32 b Ft(cd)d
Fu(will)i(fail)g(instead)g(of)f(falling)h(bac)m(k)h(to)f
Fr(ph)m(ysical)j Fu(mo)s(de.)154 2089 y(49.)61 b(When)37
Fr(ph)m(ysical)j Fu(mo)s(de.)154 2089 y(48.)61 b(When)37
b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m(hange)h(a)f(directory)g(b)s
(ecause)g(the)g(length)g(of)f(the)h(pathname)330 2198
y(constructed)52 b(from)f Ft($PWD)f Fu(and)g(the)i(directory)g(name)f
@@ -15623,46 +15622,46 @@ y(constructed)52 b(from)f Ft($PWD)f Fu(and)g(the)i(directory)g(name)f
y Fr(P)-8 b(A)g(TH)p 584 2308 28 4 v 41 w(MAX)42 b Fu(when)31
b(all)j(sym)m(b)s(olic)e(links)h(are)f(expanded,)h Ft(cd)f
Fu(will)g(fail)h(instead)g(of)g(attempting)330 2418 y(to)e(use)f(only)h
(the)f(supplied)f(directory)i(name.)154 2552 y(50.)61
(the)f(supplied)f(directory)i(name.)154 2552 y(49.)61
b(The)36 b Ft(pwd)f Fu(builtin)h(v)m(eri\014es)h(that)g(the)f(v)-5
b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f(same)h(as)f(the)h(curren)m(t)f
(directory)-8 b(,)330 2661 y(ev)m(en)31 b(if)f(it)h(is)g(not)f(ask)m
(ed)h(to)g(c)m(hec)m(k)h(the)f(\014le)f(system)h(with)f(the)h
Ft(-P)e Fu(option.)154 2795 y(51.)61 b(When)35 b(listing)g(the)g
Ft(-P)e Fu(option.)154 2795 y(50.)61 b(When)35 b(listing)g(the)g
(history)-8 b(,)36 b(the)f Ft(fc)g Fu(builtin)f(do)s(es)g(not)h
(include)g(an)f(indication)i(of)f(whether)f(or)330 2905
y(not)d(a)f(history)h(en)m(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154
3039 y(52.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g
Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 3173 y(53.)61 b(The)37
3039 y(51.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g
Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 3173 y(52.)61 b(The)37
b Ft(type)g Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g(rep)s(ort)
f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330
3282 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g
(execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named)
g(\014le)330 3392 y(found)i(in)h Ft($PATH)p Fu(.)154
3526 y(54.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m
3526 y(53.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m
(ok)m(e)i(the)e Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p
Ft(v)p Fu(')f(command)g(is)g(run,)330 3635 y(instead)e(of)f(c)m(hec)m
(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 3769
y(55.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j
y(54.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j
(Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330
3879 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54
b(Eac)m(h)35 b(argumen)m(t)g(is)f(displa)m(y)m(ed,)j(after)e(escap)s(e)
g(c)m(haracters)h(are)330 3988 y(con)m(v)m(erted.)154
4122 y(56.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m
4122 y(55.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m
(k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f
Fu(and)g Ft(-f)f Fu(options.)154 4256 y(57.)61 b(The)39
Fu(and)g Ft(-f)f Fu(options.)154 4256 y(56.)61 b(The)39
b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h
(on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g
Ft(wait)330 4366 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f
(immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j
(for)f(eac)m(h)330 4475 y(c)m(hild)31 b(that)g(exits.)154
4609 y(58.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m
4609 y(57.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m
(terrupted)h(b)m(y)g(a)h(signal)f(for)g(whic)m(h)g(a)h(trap)f(has)g(b)s
(een)f(set.)40 b(If)27 b(Bash)330 4719 y(receiv)m(es)41
b(a)f(trapp)s(ed)e(signal)i(while)f(executing)h Ft(read)p
Fu(,)h(the)e(trap)h(handler)e(executes)i(and)f Ft(read)330
4829 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154
4963 y(59.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
4963 y(58.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
(pro)s(cess's)h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h
(after)330 5072 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)
g(it.)275 5230 y(There)j(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h
-3
View File
@@ -7773,9 +7773,6 @@ Non-interactive shells exit if there is a syntax error in a script read
with the @code{.} or @code{source} builtins, or in a string processed by
the @code{eval} builtin.
@item
Process substitution is not available.
@item
While variable indirection is available, it may not be applied to the
@samp{#} and @samp{?} special parameters.
+8 -2
View File
@@ -97,7 +97,7 @@ static struct {
0
};
static char *saved_posix_vars;
static char *saved_posix_vars = 0;
void
posix_initialize (on)
@@ -113,7 +113,13 @@ posix_initialize (on)
}
/* Things that should be turned on when posix mode is disabled. */
if (on == 0)
else if (saved_posix_vars) /* on == 0, restore saved settings */
{
set_posix_options (saved_posix_vars);
free (saved_posix_vars);
saved_posix_vars = 0;
}
else /* on == 0, restore a default set of settings */
{
source_searches_cwd = 1;
expand_aliases = interactive_shell;
+19 -8
View File
@@ -1,6 +1,6 @@
/* bind.c -- key binding and startup file support for the readline library. */
/* 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.
@@ -166,10 +166,12 @@ rl_bind_key (int key, rl_command_func_t *function)
/* If it's bound to a function or macro, just overwrite. Otherwise we have
to treat it as a key sequence so rl_generic_bind handles shadow keymaps
for us. If we are binding '\' make sure to escape it so it makes it
through the call to rl_translate_keyseq. */
for us. If we are binding '\' or \C-@ (NUL) make sure to escape it so
it makes it through the call to rl_translate_keyseq. */
if (_rl_keymap[key].type != ISKMAP)
{
if (_rl_keymap[key].type == ISMACR)
xfree ((char *)_rl_keymap[key].function);
_rl_keymap[key].type = ISFUNC;
_rl_keymap[key].function = function;
}
@@ -178,8 +180,17 @@ rl_bind_key (int key, rl_command_func_t *function)
l = 0;
bind_keyseq:
if (key == '\\')
keyseq[l++] = '\\';
keyseq[l++] = key;
{
keyseq[l++] = '\\';
keyseq[l++] = '\\';
}
else if (key == '\0')
{
keyseq[l++] = '\\';
keyseq[l++] = '0';
}
else
keyseq[l++] = key;
keyseq[l] = '\0';
rl_bind_keyseq (keyseq, function);
}
@@ -451,9 +462,7 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
}
else
{
if (map[ic].type == ISMACR)
xfree ((char *)map[ic].function);
else if (map[ic].type == ISKMAP)
if (map[ic].type == ISKMAP)
{
prevmap = map;
map = FUNCTION_TO_KEYMAP (map, ic);
@@ -466,6 +475,8 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
if (type == ISFUNC && data == 0)
data = (char *)_rl_null_function;
}
if (map[ic].type == ISMACR)
xfree ((char *)map[ic].function);
map[ic].function = KEYMAP_TO_FUNCTION (data);
map[ic].type = type;
+3 -1
View File
@@ -223,7 +223,7 @@ static int msg_bufsiz = 0;
static int forced_display;
/* Default and initial buffer size. Can grow. */
static int line_size = DEFAULT_LINE_BUFFER_SIZE;
static int line_size = DEFAULT_LINE_BUFFER_SIZE;
/* Set to a non-zero value if horizontal scrolling has been enabled
automatically because the terminal was resized to height 1. */
@@ -1678,6 +1678,8 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
consume the first character of old. Fix up `old' so it
reflects the new screen contents. We use +1 in the
memmove call to copy the trailing NUL. */
/* (strlen(old+oldbytes) == (omax - oldbytes - 1)) */
memmove (old+newbytes, old+oldbytes, strlen (old+oldbytes) + 1);
memcpy (old, new, newbytes);
j = newbytes - oldbytes;
+1 -1
View File
@@ -1,6 +1,6 @@
/* funmap.c -- attach names to functions. */
/* Copyright (C) 1987-2017 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.
-71
View File
@@ -1,71 +0,0 @@
/* posixdir.h -- Posix directory reading includes and defines. */
/* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
Bash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bash is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bash. If not, see <http://www.gnu.org/licenses/>.
*/
/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
#if !defined (_POSIXDIR_H_)
#define _POSIXDIR_H_
#if defined (HAVE_DIRENT_H)
# include <dirent.h>
# if defined (HAVE_STRUCT_DIRENT_D_NAMLEN)
# define D_NAMLEN(d) ((d)->d_namlen)
# else
# define D_NAMLEN(d) (strlen ((d)->d_name))
# endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */
#else
# if defined (HAVE_SYS_NDIR_H)
# include <sys/ndir.h>
# endif
# if defined (HAVE_SYS_DIR_H)
# include <sys/dir.h>
# endif
# if defined (HAVE_NDIR_H)
# include <ndir.h>
# endif
# if !defined (dirent)
# define dirent direct
# endif /* !dirent */
# define D_NAMLEN(d) ((d)->d_namlen)
#endif /* !HAVE_DIRENT_H */
/* 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_ */
+1
View File
@@ -0,0 +1 @@
../../include/posixdir.h
+14 -2
View File
@@ -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;
}
+4
View File
@@ -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;
+4 -2
View File
@@ -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);
}
+2 -2
View File
@@ -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);
}
+32 -32
View File
@@ -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 <pan93412@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@lists.linux.org.tw>\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"
+1 -1
View File
@@ -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;
+1 -8
View File
@@ -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))
+16 -6
View File
@@ -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)