mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-28 16:09:51 +02:00
935 lines
36 KiB
Plaintext
935 lines
36 KiB
Plaintext
This document details the changes between this version, bash-5.3-rc2, and
|
|
the previous version, bash-5.3-rc1.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Fixed a problem with invoking the correct programmable completion compspec
|
|
if the line contains a quoted command separator before point.
|
|
|
|
b. Fixed a bug in the `read' builtin that caused it to skip the delimiter if
|
|
it appeared in an invalid multibyte character.
|
|
|
|
c. Fixed a bug with parsing command substitutions that caused a syntax error
|
|
to pop too many input sources.
|
|
|
|
d. Fixed an issue with recursive parsing that caused the parser to reset and
|
|
pop all the delimiters off the stack; the caller needs to check for that
|
|
possibility.
|
|
|
|
e. Fixed an issue with interactive input that caused EOF not to exit the
|
|
shell if it was read as part of a here-document.
|
|
|
|
f. Fixed an issue with a backslash-newline appearing after a right paren in
|
|
a nested subshell command.
|
|
|
|
g. Fixed an issue with invalid sequence expressions in brace expansions.
|
|
|
|
h. Fixed an issue with a nameref variable referencing an unset array element
|
|
when the nounset option is enabled.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. The history library no longer skips blank lines while it is reading a
|
|
multiline history entry from a history file.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. The `install-strip' and `strip' Makefile targets now deal with cross-
|
|
compiling.
|
|
|
|
4. New Features in Readline
|
|
|
|
------------------------------------------------------------------------------
|
|
This document details the changes between this version, bash-5.3-rc1, and
|
|
the previous version, bash-5.3-beta.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Fixed a bug where backslash did not quote multibyte characters in some
|
|
cases.
|
|
|
|
b. Requesting the length of an element of an unset array is a fatal error
|
|
when `set -u' is enabled and the subscript is not `@' or `*'.
|
|
|
|
c. Prompt expansion now quotes the results of \U.
|
|
|
|
d. Changes to `set -e' exit behavior in posix mode, since POSIX now says to
|
|
exit as if executing the `exit builtin with no arguments'.
|
|
|
|
e. Fixes to the `exec' builtin to undo redirections if it is given a command
|
|
name to execute and the exection fails, but the shell does not exit. This
|
|
is POSIX interp 1896.
|
|
|
|
f. Fixed a bug that resulted in `wait' setting $? to 255 in some cases when
|
|
waiting for a specific PID.
|
|
|
|
g. Fixed a bug involving redirections to the file descriptor bash is using to
|
|
read a script.
|
|
|
|
h. In POSIX mode, `kill' returns a failure status if any of the PID/job
|
|
arguments are not found or if sending the signal fails.
|
|
|
|
i. Fixed a bug that caused an invalid brace sequence expression to mess up
|
|
expansion of an enclosing brace expansion.
|
|
|
|
j. Fixed a bug in command printing that output the wrong default file
|
|
descriptor for the <> redirection.
|
|
|
|
k. User-specified subshells (`(...)') now update BASH_COMMAND in the subshell.
|
|
|
|
l. Fixed a display bug with the `help -m' and loadable builtins.
|
|
|
|
m. Fixed a potential file descriptor leak when trying to use a pipe for a
|
|
here document.
|
|
|
|
n. Fix a bug with multiple assignment statements preceding a simple command
|
|
containing nofork comsubs.
|
|
|
|
o. Fix a potential bug that could result in a NULL buffered stream even with
|
|
a valid input file descriptor.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Fixed a bug that allowed a history search to change the current history
|
|
list position.
|
|
|
|
b. Fixed a bug that allowed ^G to retain a saved command to execute.
|
|
|
|
c. Updates to new export-completions command to allow filename suffixes.
|
|
|
|
d. Fixed a redisplay bug with prompts containing multiple sequences of
|
|
invisible characters that are longer than the screen width.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. There is a new `fltexpr' loadable builtin to perform floating-point
|
|
arithmetic similarly to `let'.
|
|
|
|
4. New Features in Readline
|
|
|
|
a. Readline can reset its idea of the screen dimensions when executing after
|
|
a SIGCONT.
|
|
|
|
------------------------------------------------------------------------------
|
|
This document details the changes between this version, bash-5.3-beta, and
|
|
the previous version, bash-5.3-alpha.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Per POSIX, a null pathname argument to `cd' is now an error.
|
|
|
|
b. Fixes for command completion when the directory portion of the pathname
|
|
contains characters that require quoting.
|
|
|
|
c. Fix to prevent redirections from undergoing word expansion twice.
|
|
|
|
d. Fix for rare parsing issue with for loops where a newline appears before
|
|
`in'.
|
|
|
|
e. The bash build process now assumes a C90 compilation environment and a
|
|
POSIX.1-1990 execution environment.
|
|
|
|
f. Fixed a bug where bash's internal redirection flags could collide with
|
|
the system's open/fcntl flags.
|
|
|
|
g. Fixed a problem with `jobs' run from a trap or `bind -x' command printing
|
|
the status of terminated foreground jobs.
|
|
|
|
h. Bash works around a macOS gettext bug with translating the `command not
|
|
found' message by caching the translated string.
|
|
|
|
i. Bash does not try to set the tty state after a process finishes if it is
|
|
running a trap, running a readline key binding (bind -x), or executing a
|
|
programmable completion.
|
|
|
|
j. Restricted shells are not allowed to run `enable -f', even when it's
|
|
shorthand from `enable f'.
|
|
|
|
k. Work around an android problem with file descriptors if the read builtin
|
|
gets both -u and -e.
|
|
|
|
l. Fixed some small memory leaks in bash completion and command parsing and
|
|
execution.
|
|
|
|
m. Fix for crash when timed commands jump back to the top level after SIGINT.
|
|
|
|
n. Minor fixes for command substitution parsing in the foreground.
|
|
|
|
o. Fix to reset read builtin buffer after SIGINT.
|
|
|
|
p. Fix for inconsistency between arrays and scalar variables when declaring
|
|
local variables and using values from previous variable contexts.
|
|
|
|
q. Bash doesn't try to give the terminal back to the original process group
|
|
after running a trap unless job control is enabled.
|
|
|
|
r. Fix to inhibit fork optimizations in functions that set a RETURN trap.
|
|
|
|
s. Fixes for parsing commands within process substitutions where they should
|
|
behave differently than command substitutions, including prohibiting the
|
|
special case for redirections that is only available for command
|
|
substitutions.
|
|
|
|
t. Restrict the effect of force_fignore to the cases where FIGNORE should
|
|
affect completions.
|
|
|
|
u. Fix for `read' builtin and invalid multibyte characters that contain the
|
|
delimiter character, so the delimiter acts as intended.
|
|
|
|
v. Fix for `read -e' so it restores the correct completion function if it's
|
|
interrupted.
|
|
|
|
w. Fix an off-by-one error when parsing an improperly-formed printf time
|
|
specification.
|
|
|
|
x. Fix for return status for commands whose return status is being inverted
|
|
when set -e is ignored.
|
|
|
|
y. Fix for checking `read' builtin timeouts after we check for having read
|
|
the delimiter.
|
|
|
|
z. Fixes for integer overflows and size_t variables.
|
|
|
|
aa. Fixes for the Makefiles to simplify, remove some unused variables, and
|
|
clean up what `git' sees after running the various clean targets.
|
|
|
|
bb. Fix for the `exec' builtin to avoid duplicate error messages.
|
|
|
|
cc. `printf' now warns if there are no valid characters at all in an integer
|
|
argument.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Make sure the bracketed-paste input buffer is null-terminated when read
|
|
returns an error.
|
|
|
|
b. Fixed a small memory leak in execute-named-command if the command doesn't
|
|
exist or the function doesn't return.
|
|
|
|
c. Fix for attempting to change case of invalid multibyte characters.
|
|
|
|
d. Fix for possible completions that compare identically when using case-
|
|
insensitive completion but have different byte lengths.
|
|
|
|
e. Fix to make non-incremental searches use undo lists and set the history
|
|
position the same way as incremental searches.
|
|
|
|
f. Don't check for signals when handling a received signal.
|
|
|
|
g. Fix off-by-one error when tokenizing words like $((expr)) while performing
|
|
history expansion.
|
|
|
|
h. Fixes for incremental searches and redisplay in the C locale.
|
|
|
|
i. Fixes for some use-after-free of the undo list errors when stacking multiple
|
|
commands that use rl_maybe_replace_line to save changes to a history entry.
|
|
|
|
j. Fixes to ensure that completion-prefix-display-length and
|
|
colored-completion-prefix are mutually exclusive.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. MULTIPLE_COPROCS is now enabled by default.
|
|
|
|
b. The `bind' builtin interprets additional non-option arguments after -p or
|
|
-P as bindable command names and restricts output to the bindings for
|
|
those names.
|
|
|
|
c. Bash now uses the login shell for $BASH if the shell is named `su' or `-su'.
|
|
|
|
d. Bash now prints job notifications if an interactive shell is running a trap,
|
|
even though the shell is not interactive at that moment.
|
|
|
|
e. Programmable completion allows a new compspec loaded after a completion
|
|
function returns 124 to be used in more cases.
|
|
|
|
f. ./source has a new -p PATH option, which makes it use the PATH argument
|
|
instead of $PATH to look for the file.
|
|
|
|
g. GLOBSORT has a new `numeric' sort specifier, which sorts all-digit strings
|
|
as numbers.
|
|
|
|
h. Documentation has been significantly updated.
|
|
|
|
i. `wait -n' can now return terminated process substitutions, jobs about
|
|
which the user has already been notified (like `wait' without options),
|
|
|
|
j. `wait -n' removes jobs from the jobs table or list of terminated children
|
|
when in posix mode.
|
|
|
|
k. Changed the `wait' builtin behavior regarding process substitutions to
|
|
match the documentation.
|
|
|
|
l. There is a new `bash_source_fullpath' shopt option, which makes bash put
|
|
full pathnames into BASH_SOURCE, and a way to set a default value for it
|
|
at configure time.
|
|
|
|
m. Posix mode now forces job notifications to occur when the new edition of
|
|
POSIX specifies (since it now specifies them).
|
|
|
|
n. Interactive shells don't print job notifications while sourcing scripts.
|
|
|
|
o. The parser prints more information about the command it's trying to parse
|
|
when it encounters EOF before completing the command.
|
|
|
|
p. Posix mode no longer requires function names to be valid shell identifiers.
|
|
|
|
q. If `exit' is run in a trap and not supplied an exit status argument, it
|
|
uses the value of $? from before the trap only if it's run at the trap's
|
|
`top level' and would cause the trap to end (that is, not in a subshell).
|
|
This is from Posix interp 1602.
|
|
|
|
4. New Features in Readline
|
|
|
|
a. Documentation has been significantly updated.
|
|
|
|
b. New `force-meta-prefix' bindable variable, which forces the use of ESC as
|
|
the meta prefix when using "\M-" in key bindings instead of overloading
|
|
convert-meta.
|
|
|
|
c. The default value for `readline-colored-completion-prefix' no longer has a
|
|
leading `.'; the original report was based on a misunderstanding.
|
|
|
|
d. There is a new bindable command, `export-completions', which writes the
|
|
possible completions for a word to the standard output in a defined format.
|
|
|
|
------------------------------------------------------------------------------
|
|
This document details the changes between this version, bash-5.3-alpha, and
|
|
the previous version, bash-5.2-release.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Stop checking for new mail if an interactive shell is in the middle of
|
|
programmable completion or readline command dispatching.
|
|
|
|
b. Changes to multibyte character translation to handle shift states better.
|
|
|
|
c. Fixed a bug with subshell command execution that caused it to set LINENO
|
|
incorrectly.
|
|
|
|
d. Fixed a bug that caused some array subscript references in arithmetic
|
|
expansions to seg fault.
|
|
|
|
e. Don't report on foreground jobs that we won't notify the user about if
|
|
jobs is run from a trap handler or a `bind -x' command.
|
|
|
|
f. Fixed a bug where temporarily turning on `extglob' while parsing a command
|
|
substitution in compatibility mode could leave it set.
|
|
|
|
g. Fixed a bug where nested word expansions confused the state parser and
|
|
resulted in quotes being required where they should not have been.
|
|
|
|
h. Fixed a bug where nested function definitions resulted in `display -F'
|
|
printing incorrect line numbers.
|
|
|
|
i. Fixed the message printed when the shell gets ENOENT from execve: specific
|
|
message about a bad interpreter before the generic error message.
|
|
|
|
j. Fixed a spurious debug message when errexit is set and the shell is
|
|
exiting from an eval command in a shell function.
|
|
|
|
k. Fixed a bug where a pending signal would cause pattern matching to fail in
|
|
an exit trap.
|
|
|
|
l. Fixed a crash caused by a null replacement string in pattern replacement.
|
|
|
|
m. Fixed a bug in interactive shells where a SIGINT received while parsing a
|
|
command substitution would leave the expand_aliases option disabled.
|
|
|
|
n. Fixed a bug with command printing when printing multiple shell functions
|
|
with here-documents inside a command substitution.
|
|
|
|
o. Fixed a bug with expanding aliases while parsing command substitutions
|
|
inside another word expansion.
|
|
|
|
p. Fixed a bug with alias expansion in posix mode in an eval command inside a
|
|
command substitution.
|
|
|
|
q. Fixed a bug that caused the parser not to reset correctly if it encountered
|
|
a syntax error while trying to read a WORD token.
|
|
|
|
r. Fixed a bug that caused `<(' and `>(' to trigger process substitution inside
|
|
an arithmetic expression.
|
|
|
|
s. Fixed a bug that caused the shell to unlink FIFOs used for process
|
|
substitution before a compound command completes.
|
|
|
|
t. Fixed a bug that caused the read builtin to not recognize some negative
|
|
fractional arguments.
|
|
|
|
u. Fixed a bug that caused subshells not to run the EXIT trap if a signal
|
|
arrived after the command and before returning to the caller.
|
|
|
|
v. Fixed a bug where `wait' without arguments could wait for inherited
|
|
process substitutions, which are not children of this shell.
|
|
|
|
w. Fixed a bug with expanding $* in a here-document body.
|
|
|
|
x. Fixed a bug where `declare -p' in a shell function would show the wrong
|
|
command for `local -'.
|
|
|
|
y. Change for POSIX interpretation 1602 about the default return status for
|
|
`return' in a trap command.
|
|
|
|
z. Fixed a bug that caused double evaluation of a dynamic variable like
|
|
$RANDOM when using certain parameter expansions.
|
|
|
|
aa. Fixed a bug where `read -e -t' would cause an interactive shell to exit.
|
|
|
|
bb. Fixed a number of bugs with pathname expansion/pattern matching and
|
|
slashes in bracket expressions.
|
|
|
|
cc. Fixed several bugs with optimizing out forks.
|
|
|
|
dd. Fixed a memory leak when referencing unset associative array elements.
|
|
|
|
ee. System-specific changes for: WIN32
|
|
|
|
ff. Perform more cleanup if the shell exceeds maximum function nesting level.
|
|
|
|
gg. Fixed a bug that caused `eval' to run the ERR trap in commands where it
|
|
should not.
|
|
|
|
hh. Fixed nameref expansion where nameref values are valid length expansion
|
|
expressions but invalid identifiers.
|
|
|
|
ii. Fixed an error that caused syntax errors when expanding nested word
|
|
expansions inside a here-document.
|
|
|
|
jj. POSIX special builtins now exit the shell in posix mode on more failure
|
|
cases.
|
|
|
|
kk. Brace expansion is interruptible at more spots, so long expansions can
|
|
be interrupted more quickly.
|
|
|
|
ll. Fixed a crash caused by running `set -o emacs' in `bash -c command'.
|
|
|
|
mm. Fixed a bug that caused bash to reset the terminal process group before
|
|
a command exited if it received a SIGINT in a non-interactive shell.
|
|
|
|
nn. Significant changes to the source code to make it C23-conformant, including
|
|
C23 undefined behavior.
|
|
|
|
oo. Treat read(2) errors while reading input as immediately fatal errors
|
|
instead of the traditional EOF; POSIX interp 1629
|
|
|
|
pp. Fix to allow asynchronous commands to use `trap' to reset signals that
|
|
are ignored during the command; POSIX interp 751.
|
|
|
|
qq. Fix a posix-mode bug with alias expansion when checking for reserved
|
|
words and the previous alias expansion ends with a space.
|
|
|
|
rr. Programmable completion now creates empty elements in COMP_WORDS if the
|
|
cursor is on whitespace just preceding a word.
|
|
|
|
ss. Fixed a bug that prevented aliases ending with a space from alias
|
|
expanding the next word if more than two aliases are expanded from a
|
|
single word.
|
|
|
|
tt. Fixed a bug that caused the shell to give the terminal to the shell's
|
|
process group when reaping a background job.
|
|
|
|
uu. Command printing is more consistent when to print `function' before a
|
|
shell function name.
|
|
|
|
vv. Fixed a bug that caused unset not to remove a function named a[b] if
|
|
there was no array variable a.
|
|
|
|
ww. Posix mode doesn't perform function lookup for function names containing
|
|
a slash.
|
|
|
|
xx. <( and >( can now be used in function names. [CHANGE REMOVED]
|
|
|
|
yy. Fixed a bug that caused tilde expansion not to be performed on some
|
|
array subscripts.
|
|
|
|
zz. Fixed key-value pair associative array assignment to be more consistent
|
|
with compound array assignment, and indexed array assignment (a=(zero one))
|
|
to be more consistent with explicitly assigning indices one by one.
|
|
|
|
aaa. In posix mode, extra arguments to `fc' are now an error.
|
|
|
|
bbb. The bash readline commands that perform history and alias expansion try
|
|
to place point closer to where it was in the unexpanded line.
|
|
|
|
ccc. Fixed multiple invocations of `local -' in the same shell function to
|
|
have the same effect as one.
|
|
|
|
ddd. Don't export $_ if allexport is set.
|
|
|
|
eee. Don't add extra newlines to the history if parsing a delimited construct.
|
|
|
|
fff. Dynamically-loaded builtins cannot have slashes in their names, since
|
|
they'll never be called.
|
|
|
|
ggg. Fixed a bug that could cause reading EOF while parsing a quoted string
|
|
to terminate the shell.
|
|
|
|
hhh. Fixed a bug that caused local variables with the same name as variables
|
|
in `declare's temporary environment to be propagated back to the caller.
|
|
|
|
iii. Don't try to perform brace expansion on assignment statements in compound
|
|
assignments.
|
|
|
|
jjj. Fixed a bug that could cause a crash while evaluating an arithmetic for
|
|
command if one of the expressions expands to NULL.
|
|
|
|
kkk. In posix mode, cd tries to change to what the user typed if the
|
|
canonicalized version of that pathname is longer than PATH_MAX.
|
|
|
|
lll. Fixes for some errors revealed by address sanitizer.
|
|
|
|
mmm. If fork(2) fails, kill the current pipeline processes with SIGKILL after
|
|
SIGTERM, in case they're ignoring SIGTERM.
|
|
|
|
nnn. Fix to adding command substitutions to history to avoid adding semicolons
|
|
where they shouldn't be.
|
|
|
|
ooo. Programmable completion and compgen honor the setting of `dotglob'.
|
|
|
|
ppp. Use gettimeofday(2) to get time information instead of using time(3).
|
|
|
|
qqq. Save and restore readline variables affecting filename completions in
|
|
case someone runs `compgen' in the foreground.
|
|
|
|
rrr. Treat the failure to open file in $(<file) as a non-fatal expansion
|
|
error instead of a fatal redirection error.
|
|
|
|
sss. In posix mode, command substitution doesn't affect $? except when
|
|
specified for commands consisting solely of assignment statements.
|
|
|
|
ttt. Fix {var}>&- so it doesn't silently close stdin if var is not a number.
|
|
|
|
uuu. Follow namerefs in ${name=word} so the shell can implement the POSIX
|
|
semantics of returning "the final value of parameter."
|
|
|
|
vvv. Bash performs better nameref loop detection in several lookup cases.
|
|
|
|
www. SIGINT will now break out of loops if a process executed in the loop dies
|
|
due to SIGINT, not just if the loop body is a list. This is no longer
|
|
dependent on the compatibility level.
|
|
|
|
xxx. FIGNORE suffixes can now match the entire pathname, like tcsh, instead
|
|
of requiring a non-empty prefix.
|
|
|
|
yyy. Fix bug that caused FUNCNAME not to be reset after a parse error with
|
|
compound assignments to local variables.
|
|
|
|
zzz. Fix bug that caused `jobs' not to remove jobs from the list in a SIGCHLD
|
|
trap.
|
|
|
|
aaaa. Fix bug that caused `ignoreeof' to be ignored if EOF is read at a
|
|
secondary prompt or while parsing a command substitution.
|
|
|
|
bbbb. Fixes to removing jobs from the jobs table when the user isn't notified;
|
|
has effects of fixing issues with `wait -n' not finding jobs.
|
|
|
|
cccc. Fixes to loadable builtin processing so that we never pass a null
|
|
pathname or try to load a builtin that's not found if the -n option is
|
|
supplied.
|
|
|
|
dddd. Work around system-specific problems (macOS) where isblank(3) returns
|
|
true for characters >= 0x80 in a UTF-8 locale.
|
|
|
|
eeee. Fix for crash while parsing alias expansions that include compound
|
|
assignments.
|
|
|
|
ffff. Fixe for non-interactive shells reading a script file that ends with
|
|
backslash preceding EOF.
|
|
|
|
gggg. Fix to command printing when here-documents are attached to compound
|
|
commands in lists.
|
|
|
|
hhhh. Fix bug with sourcing `files' created by process substitutions inside
|
|
a `.' script.
|
|
|
|
iiii. Fixes to declare builtin to treat arguments to declare -f that look like
|
|
assignment statements or array references as function names.
|
|
|
|
jjjj. Fixed a variable conversion problem when exporting a variable in the
|
|
temporary environment back to the calling scope.
|
|
|
|
kkkk. BASH_REMATCH can now be a local variable.
|
|
|
|
llll. Subshell commands clear process substitutions so anything created by a
|
|
redirection doesn't affect the subshell.
|
|
|
|
mmmm. Fixes for several small memory leaks.
|
|
|
|
nnnn. The shell simply ignores attempts to assign to `noassign' variables
|
|
instead of treating them as an assignment error and possibly causing
|
|
the shell to exit.
|
|
|
|
oooo. If the cd builtin uses $OLDPWD, allow it to use $CDPATH if the user has
|
|
set it to something that's not a full pathname.
|
|
|
|
pppp. The test builtin only supports the optional argument to -t if parsing
|
|
an expression with more than four arguments and not in posix mode.
|
|
|
|
qqqq. Changes to filename quoting and rewriting to deal with NFC and NFD
|
|
Unicode forms (primarily for macOS).
|
|
|
|
rrrr. Send SIGCONT to a job we've just restarted with fg or bg, even if we
|
|
think it's already running.
|
|
|
|
ssss. Fixes for setting the line number associated with a simple command.
|
|
|
|
tttt. Many changes for integer overflow and out-of-range arguments to printf.
|
|
|
|
uuuu. Fixes for the read builtin and unescaped backslashes preceding NULs or
|
|
the end of the input.
|
|
|
|
vvvv. The -[anrw] options to the history builtin should have no effect if
|
|
HISTFILE is unset or null.
|
|
|
|
wwww. If programmable completion uses something different than what the user
|
|
typed as the command name (full pathname, alias, etc.), display what's
|
|
actually used in `compopt' output.
|
|
|
|
xxxx. Fix bug with closing /dev/fd process substitutions in shell functions.
|
|
|
|
yyyy. Fix bug with `declare -g' trying to convert a global associative array
|
|
to an indexed array.
|
|
|
|
zzzz. Fix bash history expansion characters so we don't get empty history
|
|
events.
|
|
|
|
aaaaa. Allow `time' and `!' reserved words to be followed by `&', which POSIX
|
|
interp 267 says is required.
|
|
|
|
bbbbb. Upgrade intl library to the one from gettext-0.21.1.
|
|
|
|
ccccc. Fix line number in the event that a simple command jumps back to the
|
|
top level on error.
|
|
|
|
ddddd. Make the order of setting BASH_COMMAND, running the DEBUG trap, and
|
|
printing PS4 consistent across all command types.
|
|
|
|
eeeee. Rely on child processes to set the terminal process group instead of
|
|
having the parent do it as well.
|
|
|
|
fffff. Fix `printf' to consume entire multibyte characters in the format string,
|
|
in case the encoding contains `/' or `%'.
|
|
|
|
ggggg. Fix `hash' to return 1 if -d is supplied and the hash table is empty.
|
|
|
|
hhhhh. Fix `select' command to be like `for' in that an invalid selection
|
|
variable is a fatal error in posix mode.
|
|
|
|
iiiii. Fix to parameter length expansion to avoid expanding dynamic variables
|
|
(e.g., RANDOM) more than once.
|
|
|
|
jjjjj. Fix to `shift', `break', and `continue' to skip over a `--' when
|
|
printing an invalid argument error message.
|
|
|
|
kkkkk. Fix bug that caused an invalid arithmetic expression in an arithmetic
|
|
`for' command to leave the loop level set to the wrong value, preventing
|
|
`break' and `continue' from working.
|
|
|
|
lllll. Fix problem with removing escapes in the `E' variable transformation.
|
|
|
|
mmmmm. Fix bug with word splitting if `read' assigns to IFS.
|
|
|
|
nnnnn. Fix posix-mode cases where failure of special builtins did not cause
|
|
the shell to exit.
|
|
|
|
ooooo. Some fixes to cases where the shell quotes characters that are special
|
|
internally.
|
|
|
|
ppppp. Fix error with read builtin trying to assign to a readonly variable.
|
|
|
|
qqqqq. Fix a slight race condition when bash receives a SIGINT while waiting
|
|
for a foreground job.
|
|
|
|
rrrrr. Fix integer parsing to accept more whitespace characters after the
|
|
digit string -- the same ones we accept before the digits.
|
|
|
|
sssss. Fix a crash when attempting to brace-expand a very large list of
|
|
strings fails.
|
|
|
|
ttttt. Fix dynamic loading of builtins not to look in the current directory
|
|
if looking in BASH_LOADABLES_PATH is not successful, like $PATH
|
|
searching.
|
|
|
|
uuuuu. Fix `bind -x' commands to understand negative argument counts.
|
|
|
|
vvvvv. Disable fork optimization if the shell is running startup files because
|
|
SSH_SOURCE_BASHRC was enabled; prevents infinite recursion.
|
|
|
|
wwwww. Fix `unset' builtin to implement POSIX interp 1009, which says that
|
|
unsetting a variable in the temporary environment unsets the variable
|
|
in the enclosing scope also, in posix mode.
|
|
|
|
xxxxx. Fix parser to read here-document body from the current alias, if that's
|
|
where input is being read from.
|
|
|
|
yyyyy. Fix an off-by-one error that caused completion to fail for certain
|
|
pathnames containing backslash-quoted single-quotes.
|
|
|
|
zzzzz. Fix command printing to print a coproc name only if the coproc command
|
|
is not a simple command.
|
|
|
|
aaaaaa. Fix prompt string decoding to preserve the value of $_.
|
|
|
|
bbbbbb. In posix mode, supplying a non-identifier as a function name to `export'
|
|
or `readonly' should cause the shell to exit, since these are special
|
|
builtins.
|
|
|
|
cccccc. Fix a crash that happens due to accessing freed memory if the parser
|
|
encounters a syntax error while parsing an alias or a compound
|
|
assignment.
|
|
|
|
dddddd. Fix a bug that could cause errors while executing a DEBUG trap in a
|
|
pipeline.
|
|
|
|
eeeeee. Fix a bug where exiting a subshell should not try to restore the
|
|
terminal settings if that subshell didn't reinitialize them.
|
|
|
|
ffffff. Remove long-lived workaround for old AFS bug that causes problems with
|
|
modern implementations.
|
|
|
|
gggggg. Fix a bug that caused an assignment error to BASHOPTS or SHELLOPTS to
|
|
remove the variable's readonly attribute.
|
|
|
|
hhhhhh. Fix for a crash if a pathname argument to `cd' is NULL and the current
|
|
directory has been removed.
|
|
|
|
iiiiii. Fix a bug with shell-expand-line readline command that caused it to
|
|
interpret quoted single quotes incorrectly when inside $'...'.
|
|
|
|
jjjjjj. Fix to the declare builtin to catch more invalid option combinations.
|
|
|
|
kkkkkk. Fix to avoid unsafe execution of the EXIT trap if a terminating signal
|
|
arrives while bash is waiting for a foreground process.
|
|
|
|
llllll. Fixed a bug that allowed attribute changes to readonly variables that
|
|
changed the effects of attempted assignments.
|
|
|
|
mmmmmm. Fix bug that caused quoting errors if $* was expanded in a context
|
|
where word splitting was not performed.
|
|
|
|
oooooo. Fix bug that caused declare commands with `-' and `+' options and an
|
|
assignment statement to be misinterpreted.
|
|
|
|
pppppp. Retry opening startup files if the open is interrupted by a signal
|
|
and is not automatically restarted.
|
|
|
|
qqqqqq. Fix printing a case command where one of the case command lists begins
|
|
with the word `esac'.
|
|
|
|
rrrrrr. Fix for history and command number expansion when expanding a prompt
|
|
string that contains the @P variable transformation.
|
|
|
|
ssssss. Fix a bug that could cause the shell to hang if a script used multiple
|
|
coprocesses without manually closing file descriptors associated with
|
|
existing coprocesses.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Fixed a bug in clearing the visible line structure before redisplay.
|
|
|
|
b. Fix a bug where setlocale(3) returning NULL caused a crash.
|
|
|
|
c. Fixed signal checking in callback mode to handle signals that arrive before
|
|
readline restores the application's signal handlers.
|
|
|
|
d. Fixed a bug with word completion where the directory name needs to be
|
|
dequoted and tilde-expanded.
|
|
|
|
e. Fixed a bug that caused compilation to fail on systems with select but not
|
|
pselect.
|
|
|
|
f. System-specific changes for: WIN32, z/OS, Cygwin, MSYS
|
|
|
|
g. Fixed a bug that caused word completion mismatches if the quoted text the
|
|
user typed was longer than the unquoted match.
|
|
|
|
h. Fixes for freeing undo lists that might appear in history list entries
|
|
after non-incremental searches.
|
|
|
|
i. Fixes for some errors revealed by address sanitizer.
|
|
|
|
j. In vi mode, if an `f' or `F' move command associated with a `c' or `C'
|
|
command fails, don't enter insert mode.
|
|
|
|
k. Fixed bug with truncating a history file containing timestamps that caused
|
|
the timestamp associated with the first history entry not to be written.
|
|
|
|
l. Fix vi-mode so that a motion command attached to d/D, y/Y, or t/T must
|
|
consume or delete at least one character.
|
|
|
|
m. Fix a redisplay error when displaying meta characters as octal sequences
|
|
and other C locale issues.
|
|
|
|
n. Fix error that caused characters composing an incomplete multibyte
|
|
character not to be inserted into the line.
|
|
|
|
o. In callback mode, let the application echo the signal characters (e.g., ^C)
|
|
when the application's signal handlers are installed.
|
|
|
|
p. Added some support for lines that consume more than the physical number of
|
|
screen lines.
|
|
|
|
q. Make sure dump-variables returns the string values for active-region-start-color
|
|
and active-region-end-color if they're set.
|
|
|
|
r. Fixes to how characters between 128 and 159 are printed when displaying
|
|
macro values (use symbolic notation instead of directly printing the
|
|
character).
|
|
|
|
s. Don't convert meta characters that contain NULL (\M-\C-@) to actual NULs,
|
|
which prematurely terminates the macro value.
|
|
|
|
t. Fix typo in the readline color prefix extension that it uses for coloring
|
|
filename prefixes when displaying possible completions.
|
|
|
|
u. Call the filename rewrite hook on the word being completed before comparing
|
|
it against possible completions from the file system to get consistent
|
|
strings.
|
|
|
|
v. Fix infinite recursion that can happen if someone binds a key that doesn't
|
|
have a different upper and lower case representation to do-lowercase-version.
|
|
|
|
w. Check for non-ANSI (dumb) terminals a little more thoroughly.
|
|
|
|
x. Don't attempt to history-expand the `quick substitution' character at the
|
|
beginning of a line if the application has set the quoting state to single
|
|
quotes.
|
|
|
|
y. Fix small memory leak if non-incremental or incremental search is
|
|
interrupted by a signal.
|
|
|
|
z. Loading very large history files should be much faster.
|
|
|
|
aa. Retry opening startup files if the open is interrupted by a signal
|
|
and is not automatically restarted.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. When checking whether a script file argument is a binary file, check the
|
|
first two lines of a script if the first line begins with `#!'.
|
|
|
|
b. Bash does a better job of preserving user-supplied quotes around a word
|
|
completion, instead of requoting it.
|
|
|
|
c. Bash reports the starting line number in an error message about an
|
|
unterminated compound command like `if' without a `fi'.
|
|
|
|
d. Implement the POSIX requirement that running the `jobs' builtin removes
|
|
jobs from the jobs list.
|
|
|
|
f. Call bash signal handlers while executing programmable completion commands,
|
|
instead of readline's.
|
|
|
|
g. Print an error message if a regular expression used with [[ fails to compile.
|
|
|
|
h. The `umask' builtin now has additional features for full POSIX conformance.
|
|
|
|
i. `type -a -P' reports both hashed pathnames and the result of a $PATH search.
|
|
|
|
j. `trap' has a new -P option that prints the trap action associated with each
|
|
signal argument.
|
|
|
|
k. The `command' builtin preceding a declaration builtin (e.g., `declare')
|
|
preserves the special asisgnment statement parsing for the declaration
|
|
builtin. This is a new POSIX requirement.
|
|
|
|
l. `printf' uses the `alternate form' for %q and %Q to force single quoting.
|
|
|
|
m. `printf' now interprets %ls (%S) and %lc (%C) as referring to wide strings
|
|
and characters, respectively, when in a multibyte locale.
|
|
|
|
n. The shell can be compiled with a different default value for the
|
|
patsub_replacement option.
|
|
|
|
o. Check for window size changes during trap commands, `bind -x' commands,
|
|
and programmable completion.
|
|
|
|
p. Treat a NULL value for $PATH as equivalent to ".".
|
|
|
|
p. New loadable builtins: kv, strptime
|
|
|
|
q. GLOBSORT: new variable to specify how to sort the results of pathname
|
|
expansion (name, size, blocks, mtime, atime, ctime, none) in ascending
|
|
or descending order.
|
|
|
|
r. `compgen' has a new option: -V varname. If supplied, it stores the generated
|
|
completions into VARNAME instead of printing them on stdout.
|
|
|
|
s. New form of command substitution: ${ command; } or ${|command;} to capture
|
|
the output of COMMAND without forking a child process and using pipes.
|
|
|
|
t. array_expand_once: new shopt option, replaces assoc_expand_once
|
|
|
|
u. complete/compopt new option: fullquote; sets rl_full_quoting_desired so all
|
|
possible completions are quoted as if they were filenames.
|
|
|
|
v. Command timing now allows precisions up to 6 digits instead of 3 in
|
|
$TIMEFORMAT.
|
|
|
|
w. BASH_MONOSECONDS: new dynamic variable that returns the value of the
|
|
system's monotonic clock, if one is available.
|
|
|
|
x. BASH_TRAPSIG: new variable, set to the numeric signal number of the trap
|
|
being executed while it's running.
|
|
|
|
y. The checkwinsize option can be used in subshell commands started from
|
|
interactive shells.
|
|
|
|
z. In posix mode, the test command < and > binary primaries compare strings
|
|
using the current locale.
|
|
|
|
aa. bind -x allows new key binding syntax: separate the key sequence and the
|
|
command string with whitespace, but require the command string to be
|
|
double-quoted if this is used. This allows different quoting options for
|
|
the command string.
|
|
|
|
bb. Print commands bound to key sequences using `bind -x' with the new key
|
|
binding syntax it allows.
|
|
|
|
cc. `read' has a new `-E' option to use readline but with the default bash
|
|
completion (including programmable completion).
|
|
|
|
dd. New bindable readline command name: `bash-vi-complete'.
|
|
|
|
ee. New test builtin behavior when parsing a parenthesized subexpression and
|
|
test was given more than 4 arguments: scan forward for a closing paren and
|
|
call posixtest() if there are 4 or fewer arguments between the parentheses.
|
|
Added for compatibility with coreutils test, dependent on the shell
|
|
compatibility level. Such expressions remain ambiguous.
|
|
|
|
4. New Features in Readline
|
|
|
|
a. Output a newline if there is no prompt and readline reads an empty line.
|
|
|
|
b. The history library falls back to stdio when writing the history list if
|
|
mmap fails.
|
|
|
|
c. New bindable variable `search-ignore-case', causes readline to perform
|
|
case-insensitive incremental and non-incremental history searches.
|
|
|
|
d. rl_full_quoting_desired: new application-settable variable, causes all
|
|
completions to be quoted as if they were filenames.
|
|
|
|
e. rl_macro_display_hook: new application-settable function pointer, used if
|
|
the application wants to print macro values itself instead of letting
|
|
readline do it
|
|
|
|
f. rl_reparse_colors: new application-callable function, reparses $LS_COLORS
|
|
(presumably after the user changes it)
|
|
|
|
g. rl_completion_rewrite_hook: new application-settable function pointer,
|
|
called to modify the word being completed before comparing it against
|
|
pathnames from the file system.
|
|
|
|
h. execute-named-command: a new bindable command that reads the name of a
|
|
readline command from the standard input and executes it. Bound to M-x
|
|
in emacs mode by default.
|
|
|
|
i. Incremental and non-incremental searches now allow ^V/^Q (or, in the former
|
|
case, anything bound to quoted-insert) to quote characters in the search
|
|
string.
|
|
|
|
j. There is a new rl_print_keybinding function that prints the key bindings
|
|
for a single bindable function specified by name.
|