mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-07-02 18:00:49 +02:00
499 lines
20 KiB
Plaintext
499 lines
20 KiB
Plaintext
This document details the changes between this version, bash-4.3-alpha,
|
|
and the previous version, bash-4.2-release.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Fixed several bugs concerning incomplete bracket expressions in filename
|
|
generation (globbing) patterns.
|
|
|
|
b. Fixed a bug with single quotes and WORD in ${param op WORD} when running
|
|
in Posix mode.
|
|
|
|
c. Fixed a bug that caused the pattern removal and pattern substitution word
|
|
expansions and case statement word expansion to not match the empty string.
|
|
|
|
d. Fixed a bug that caused the tzset() function to not work after changing
|
|
the TZ enviroment variable.
|
|
|
|
e. Fixed a bug that caused the RHS of an assignment statement to undergo
|
|
word splitting when it contained an unquoted $@.
|
|
|
|
f. Fixed bugs that caused the shell to not react to a SIGINT sent while
|
|
waiting for a child process to exit.
|
|
|
|
g. Bash doesn't try to run things in a signal handler context when it gets a
|
|
signal (SIGINT/SIGHUP/etc) while reading input using readline but still
|
|
be responsive to terminating signals.
|
|
|
|
h. Fixed a bug that caused bash to go into an infinite loop if a filename
|
|
to be matched contained an invalid multibyte character.
|
|
|
|
i. Fixed a bug that caused PS4 to end up being truncated if it is longer
|
|
than 128 bytes.
|
|
|
|
j. Fixed a bug that caused brace expansion to not skip over double-quoted
|
|
command substitution.
|
|
|
|
k. System-specific updates for: DJGPP, HP/UX, Mac OS X
|
|
|
|
l. Fixed a bug in displaying commands that caused redirections to be associated
|
|
with the wrong part of the command.
|
|
|
|
m. Fixed the coproc cleanup to unset the appropriate shell variables when a
|
|
coproc terminates.
|
|
|
|
n. Fixed a bug that caused `fc' to dump core due to incorrect calculation of
|
|
the last history entry.
|
|
|
|
o. Added workarounds for FreeBSD's implementation of faccessat/eaccess and
|
|
`test -x'.
|
|
|
|
p. Fixed a bug that caused the shell to not match patterns containing
|
|
control-A.
|
|
|
|
q. Fixed a bug that could result in doubled error messages when the `printf'
|
|
builtin got a write error.
|
|
|
|
r. Fixed a bug that caused the shell to not correctly expand words containing
|
|
multiple consecutive quoted empty strings (""""""aa).
|
|
|
|
s. Fixed a bug that caused the shell to not correctly parse multi-line
|
|
process substitutions containing comments and quoted strings.
|
|
|
|
t. Fixed a problem with the bash malloc's internal idea of the top of the
|
|
memory heap that resulted in incorrect decisions to try to reduce the
|
|
break and give memory back to the kernel.
|
|
|
|
u. There are changes to the expansions peformed on compound array assignments,
|
|
in an effort to make foo=( [ind1]=bar [ind2]=baz ) identical to
|
|
foo[ind1]=bar foo[ind2]=baz.
|
|
|
|
v. Bash now reports an error if `read -a name' is used when `name' is an
|
|
existing associative array.
|
|
|
|
w. Fixed a bug that allowed an attempted assignment to a readonly variable
|
|
in an arithmetic expression to not return failure.
|
|
|
|
x. Fixed several bugs that caused completion functions to be invoked even when
|
|
the cursor was before the first word in the command.
|
|
|
|
y. Fixed a bug that caused parsing a command substitution to overwrite the
|
|
parsing state associated with the complete input line.
|
|
|
|
z. Fixed several bugs with the built-in snprintf replacement and field widths
|
|
and floating point.
|
|
|
|
aa. Fixed a bug that caused incorrect offset calculations and input buffer
|
|
corruption when reading files longer than 2^31 bytes.
|
|
|
|
bb. Fixed several bugs where bash performed arithmetic evaluation in contexts
|
|
where evaluation is suppressed.
|
|
|
|
cc. Fixed a bug that caused bash to close FIFOs used for process substitution
|
|
too early when a shell function was executing, but protect against using
|
|
all file descriptors when the shell functions are invoked inside loops.
|
|
|
|
dd. Added checks for printable (and non-printable) multibyte characters for
|
|
use in error messages.
|
|
|
|
ee. Fixed a bug that caused ^O (operate-and-get-next) to not work correctly
|
|
at the end of the history list.
|
|
|
|
ff. Fixed a bug that caused command-oriented history to incorrectly combine
|
|
here documents into one line.
|
|
|
|
gg. Fixed a bug that caused importing SHELLOPTS from the environment into a
|
|
Posix-mode shell to print an error message and refuse to parse it.
|
|
|
|
hh. Fixed a bug that caused the shell to delete an extra history entry when
|
|
using `history -s'.
|
|
|
|
ii. Fixed a bug that caused floating-point exceptions and overflow errors
|
|
for the / and % arithmetic operators when using INTMAX_MIN and -1.
|
|
|
|
jj. Fixed a bug that caused parsing errors when reading an arithmetic for
|
|
loop inside a command substitution.
|
|
|
|
kk. Fixed a bug that caused a readonly function to be unset when unset was
|
|
called without the -f or -v option.
|
|
|
|
ll. Fixed several bugs in the code that quotes characters special to regular
|
|
expressions when used in a quoted string on the RHS of the =~ operator
|
|
to the [[ command.
|
|
|
|
mm. Fixed a bug that caused redirections to fail because the file descriptor
|
|
limit was set to a value less than 10.
|
|
|
|
nn. Fixed a bug that caused the `read' builtin to execute code in a signal
|
|
handler context if read timed out.
|
|
|
|
oo. Fixed a bug that caused extended globbing patterns to not match files
|
|
beginning with `.' correctly when a `.' was explicitly supplied in the
|
|
pattern.
|
|
|
|
pp. Fixed a bug that caused key sequences longer than two characters to not
|
|
work when used with `bind -x'.
|
|
|
|
qq. Fixed a bug that resulted in redefined functions having the wrong source
|
|
file names in BASH_SOURCE.
|
|
|
|
rr. Fixed a bug that caused the read builtin to assign null strings to variables
|
|
when using `read -N', which caused core dumps when referenced
|
|
|
|
ss. Fixed a bug that caused `bash -m script' to not enable job control while
|
|
running the script.
|
|
|
|
tt. Fixed a bug that caused `printf -v var' to dump core when used with the
|
|
%b format code.
|
|
|
|
uu. Fixed a bug that caused the shell to exit with the wrong status if -e was
|
|
active and the shell exited on a substitution error.
|
|
|
|
vv. Fixed a bug that caused the shell to seg fault if an array variable with
|
|
the same name as an existing associative array was implicitly created by
|
|
an assignment (declare a[n]=b).
|
|
|
|
ww. Fixed a bug that caused a redirection to misbehave if the number specified
|
|
for a file descriptor overflows an intmax_t.
|
|
|
|
xx. Fixed several bugs with the handling of valid and invalid unicode character
|
|
values when used with the \u and \U escape sequences to printf and $'...'.
|
|
|
|
yy. Fixed a bug that caused tildes to not be escaped in expanded filenames,
|
|
making them subject to later expansion.
|
|
|
|
zz. When using the pattern substitution word expansion, bash now runs the
|
|
replacement string through quote removal, since it allows quotes in that
|
|
string to act as escape characters. This is not backwards compatible, so
|
|
it can be disabled by setting the bash compatibility mode to 4.2.
|
|
|
|
aaa. Fixed the rest of the cases where the shell runs non-allowed code in a
|
|
signal handler context.
|
|
|
|
bbb. Fixed a bug that caused spurious DEL characters (\177) to appear in
|
|
double-quoted expansion where the RHS is evaluated to the empty string.
|
|
|
|
ccc. Fixed a bug that caused the use of the shell's internal random number
|
|
generator for temporary file names to perturb the random number
|
|
sequence.
|
|
|
|
ddd. Fixed several bugs that caused `declare -g' to not set the right global
|
|
variables or to misbehave when declaring global indexed arrays.
|
|
|
|
eee. Fixed a logic bug that caused extended globbing in a multibyte locale to
|
|
cause failures when using the pattern substititution word expansions.
|
|
|
|
fff. Fixed a bug that caused the `lastpipe' option to corrupt the file
|
|
descriptor used to read the script.
|
|
|
|
ggg. Fixed a bug that causes the shell to delete DEL characters in the
|
|
expanded value of variables used in the same quoted string as variables
|
|
that expand to nothing.
|
|
|
|
hhh. Fixed a bug that caused the shell to assign the wrong value from an
|
|
assignment like (( x=7 )) when `x' was an existing array variable.
|
|
|
|
iii. Fixed a bug that caused the shell to misbehave when generating sequences
|
|
and the boundary values overflow an intmax_t.
|
|
|
|
jjj. Fixed a bug caused expansion errors if an expansion of "$@" appeared
|
|
next to another expansion (e.g.. "${@}${x}").
|
|
|
|
kkk. Fixed a potential buffer overflow bug when performing /dev/fd expansion.
|
|
|
|
lll. Fixed a bug that resulted in an extra semicolon being added to compound
|
|
assignments when they were added to the history list.
|
|
|
|
mmm. Fixed a bug that caused mapfile to read one extra line from the input.
|
|
|
|
nnn. Fixed a bug that caused the mail checking code to use uninitialized
|
|
values.
|
|
|
|
ooo. Fixed a bug that prevented history timestamps from being saved if the
|
|
history comment character is unset.
|
|
|
|
ppp. Fixed a bug that caused the case-modifying expansions to not work with
|
|
multibyte characters.
|
|
|
|
qqq. Fixed a bug that caused the edit-and-execute bindable readline command
|
|
to see the wrong data if invoked in the middle of a multi-line quoted
|
|
string.
|
|
|
|
rrr. Fixed a bug that resulted in the shell returning the wrong exit status
|
|
for a background command on systems that recycle PIDs very quickly.
|
|
|
|
sss. Fixed a bug that caused asynchronous group commands to not run any EXIT
|
|
trap defined in the body of the command.
|
|
|
|
ttt. Fixed a bug that caused `eval "... ; return"' to not clean up properly.
|
|
|
|
uuu. Fixed a bug that caused the shell to dump core if `read' reads an escaped
|
|
IFS whitespace character.
|
|
|
|
vvv. Fixed a bug that caused BASH_COMMAND to be set to an incorrect value when
|
|
executing a (...) subshell.
|
|
|
|
www. Fixed a pointer aliasing bug with the token string in arithmetic
|
|
evaluation.
|
|
|
|
xxx. Fixed a bug with parsing multi-line command substitutions when reading
|
|
the `do' keyword followed by whitespace.
|
|
|
|
yyy. Fixed a bug that caused the shell to seg fault if the time given to the
|
|
printf %(...)T format overflowed the value accepted by localtime(3).
|
|
|
|
zzz. Fixed a problem with displaying help topics in two columns when the
|
|
translated text contained multibyte characters.
|
|
|
|
aaaa. Fixed a bug with the extended globbing pattern matcher where a `*' was
|
|
followed by a negated extended glob pattern.
|
|
|
|
bbbb. Fixed a race condition with short-lived coproc creation and reaping that
|
|
caused the child process to be reaped before the various coproc shell
|
|
variables were initialized.
|
|
|
|
cccc. Fixed a bug where turning off `errexit' in command substitution subshells
|
|
was not reflected in $SHELLOPTS.
|
|
|
|
dddd. Partially fixed an inconsistency in how the shell treated shell
|
|
functions run from an EXIT trap.
|
|
|
|
eeee. Fixed a bug in how the shell invalidated FIFOs used for process
|
|
substitution when executing a pipeline (once rather than in every child).
|
|
|
|
ffff. Fixed a bug that occurred when expanding a special variable ($@, $*)
|
|
within double quotes and the expansion resulted in an empty string.
|
|
|
|
gggg. Fixed bugs with executing a SIGCHLD trap handler to make sure that it's
|
|
executed once per exited child.
|
|
|
|
hhhh. Fixed a bug that caused `declare' and `test' to find variables that
|
|
had been given attributes but not assigned values. Such variables are
|
|
not set.
|
|
|
|
iiii. Fixed a bug that caused commands in process substitutions to not look in
|
|
the local temporary environment when performing word expansions.
|
|
|
|
jjjj. Fixed several problems with globstar expansions (**/**) returning null
|
|
filenames and multiple instances of the same pathname.
|
|
|
|
kkkk. Fixed an oversight that did not allow the exit status of `coproc' to
|
|
be inverted using `!'.
|
|
|
|
llll. Fixed a bug that caused the -e option to be re-enabled using `set -e'
|
|
even when executing in a context where -e is ignored.
|
|
|
|
mmmm. Fixed a (mostly theoretical) bug with input lines longer than SIZE_MAX.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Fixed a bug that did not allow the `dd', `cc', or `yy' vi editing mode
|
|
commands to work on the entire line.
|
|
|
|
b. Fixed a bug that caused redisplay problems with prompts longer than 128
|
|
characters and history searches.
|
|
|
|
c. Fixed a bug that caused readline to try and run code to modify its idea
|
|
of the screen size in a signal handler context upon receiving a SIGWINCH.
|
|
|
|
d. Fixed a bug that caused the `meta' key to be enabled beyond the duration
|
|
of an individual call top readline().
|
|
|
|
e. Added a workaround for a wcwidth bug in Mac OS X that caused readline's
|
|
redisplay to mishandle zero-width combining characters.
|
|
|
|
f. Fixed a bug that caused readline to `forget' part of a key sequence when
|
|
a multiple-key sequence caused it to break out of an incremental search.
|
|
|
|
g. Fixed bugs that caused readline to execute code in a signal handler
|
|
context if interrupted while reading from the file system during completion.
|
|
|
|
h. Fixed a bug that caused readline to `forget' part of a key sequence when
|
|
reading an unbound multi-character key sequence.
|
|
|
|
i. Fixed a bug that caused Readline's signal handlers to be installed beyond
|
|
the bounds of a single call to readline().
|
|
|
|
j. Fixed a bug that caused the `.' command to not redo the most recent `R'
|
|
command in vi mode.
|
|
|
|
k. Fixed a bug that caused ignoring case in completion matches to result in
|
|
readline using the wrong match.
|
|
|
|
l. Paren matching now works in vi insert mode.
|
|
|
|
m. Fix menu-completion to make show-all-if-ambiguous and menu-complete-display-prefix
|
|
work together.
|
|
|
|
n. Fixed a bug that didn't allow the `cc', `dd', or `yy' commands to be redone
|
|
in vi editing mode.
|
|
|
|
o. Fixed a bug that caused the filename comparison code to not compare
|
|
multibyte characters correctly when using case-sensitive or case-mapping
|
|
comparisons.
|
|
|
|
p. Fixed the input reading loop to call the input hook function only when there
|
|
is no terminal input available.
|
|
|
|
q. Fixed a bug that caused binding a macro to a multi-character key sequence
|
|
where the sequence and macro value share a common prefix to not perform
|
|
the macro replacement.
|
|
|
|
r. Fixed several redisplay errors with multibyte characters and prompts
|
|
containing invisible characters when using horizontal scrolling.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. The `helptopic' completion action now maps to all the help topics, not just
|
|
the shell builtins.
|
|
|
|
b. The `help' builtin no longer does prefix substring matching, so `help read'
|
|
does not match `readonly'.
|
|
|
|
c. The shell can be compiled to not display a message about processes that
|
|
terminate due to SIGTERM.
|
|
|
|
d. Non-interactive shells now react to the setting of checkwinsize and set
|
|
LINES and COLUMNS after a foreground job exits.
|
|
|
|
e. There is a new shell option, `globasciiranges', which, when set to on,
|
|
forces globbing range comparisons to use character ordering as if they
|
|
were run in the C locale.
|
|
|
|
f. There is a new shell option, `direxpand', which makes filename completion
|
|
expand variables in directory names in the way bash-4.1 did.
|
|
|
|
g. In Posix mode, the `command' builtin does not change whether or not a
|
|
builtin it shadows is treated as an assignment builtin.
|
|
|
|
h. The `return' and `exit' builtins accept negative exit status arguments.
|
|
|
|
i. The word completion code checks whether or not a filename containing a
|
|
shell variable expands to a directory name and appends `/' to the word
|
|
as appropriate. The same code expands shell variables in command names
|
|
when performing command completion.
|
|
|
|
j. In Posix mode, it is now an error to attempt to define a shell function
|
|
with the same name as a Posix special builtin.
|
|
|
|
k. When compiled for strict Posix conformance, history expansion is disabled
|
|
by default.
|
|
|
|
l. The history expansion character (!) does not cause history expansion when
|
|
followed by the closing quote in a double-quoted string.
|
|
|
|
m. `complete' and its siblings compgen/compopt now takes a new `-o noquote'
|
|
option to inhibit quoting of the completions.
|
|
|
|
n. Setting HISTSIZE to a value less than zero causes the history list to be
|
|
unlimited (setting it 0 zero disables the history list).
|
|
|
|
o. Setting HISTFILESIZE to a value less than zero causes the history file size
|
|
to be unlimited (setting it to 0 causes the history file to be truncated
|
|
to zero size).
|
|
|
|
p. The `read' builtin now skips NUL bytes in the input.
|
|
|
|
q. There is a new `bind -X' option to print all key sequences bound to Unix
|
|
commands.
|
|
|
|
r. When in Posix mode, `read' is interruptible by a trapped signal. After
|
|
running the trap handler, read returns 128+signal and throws away any
|
|
partially-read input.
|
|
|
|
s. The command completion code skips whitespace and assignment statements
|
|
before looking for the command name word to be completed.
|
|
|
|
t. The build process has a new mechanism for constructing separate help files
|
|
that better reflects the current set of compilation options.
|
|
|
|
u. The -nt and -ot options to test now work with files with nanosecond
|
|
timestamp resolution.
|
|
|
|
v. The shell saves the command history in any shell for which history is
|
|
enabled and HISTFILE is set, not just interactive shells.
|
|
|
|
w. The shell has `nameref' variables and new -n(/+n) options to declare and
|
|
unset to use them, and a `test -R' option to test for them.
|
|
|
|
x. The shell now allows assigning, referencing, and unsetting elements of
|
|
indexed arrays using negative subscripts (a[-1]=2, echo ${a[-1]}) which
|
|
count back from the last element of the array.
|
|
|
|
y. The {x}<word redirection feature now allows words like {array[ind]} and
|
|
can use variables with special meanings to the shell (e.g., BASH_XTRACEFD).
|
|
|
|
z. There is a new CHILD_MAX special shell variable; its value controls the
|
|
number of exited child statues the shell remembers.
|
|
|
|
aa. There is a new configuration option (--enable-direxpand-default) that
|
|
causes the `direxpand' shell option to be enabled by default.
|
|
|
|
bb. Bash does not do anything special to ensure that the file descriptor
|
|
assigned to X in {x}<foo remains open after the block containing it
|
|
completes.
|
|
|
|
cc. The `wait' builtin has a new `-n' option to wait for the next child to
|
|
change status.
|
|
|
|
dd. The `printf' %(...)T format specifier now uses the current time if no
|
|
argument is supplied.
|
|
|
|
ee. There is a new variable, BASH_COMPAT, that controls the current shell
|
|
compatibility level.
|
|
|
|
4. New Features in Readline
|
|
|
|
a. Readline is now more responsive to SIGHUP and other fatal signals when
|
|
reading input from the terminal or performing word completion but no
|
|
longer attempts to run any not-allowable functions from a signal handler
|
|
context.
|
|
|
|
b. There are new bindable commands to search the history for the string of
|
|
characters between the beginning of the line and the point
|
|
(history-substring-search-forward, history-substring-search-backward)
|
|
|
|
c. Readline allows quoted strings as the values of variables when setting
|
|
them with `set'. As a side effect, trailing spaces and tabs are ignored
|
|
when setting a string variable's value.
|
|
|
|
d. The history library creates a backup of the history file when writing it
|
|
and restores the backup on a write error.
|
|
|
|
e. New application-settable variable: rl_filename_stat_hook: a function called
|
|
with a filename before using it in a call to stat(2). Bash uses it to
|
|
expand shell variables so things like $HOME/Downloads have a slash
|
|
appended.
|
|
|
|
f. New bindable function `print-last-kbd-macro', prints the most-recently-
|
|
defined keyboard macro in a reusable format.
|
|
|
|
g. New user-settable variable `colored-stats', enables use of colored text
|
|
to denote file types when displaying possible completions (colored analog
|
|
of visible-stats).
|
|
|
|
h. New user-settable variable `keyseq-timout', acts as an inter-character
|
|
timeout when reading input or incremental search strings.
|
|
|
|
i. New application-callable function: rl_clear_history. Clears the history list
|
|
and frees all readline-associated private data.
|
|
|
|
j. New user-settable variable, show-mode-in-prompt, adds a characters to the
|
|
beginning of the prompt indicating the current editing mode.
|
|
|
|
k. New application-settable variable: rl_input_available_hook; function to be
|
|
called when readline detects there is data available on its input file
|
|
descriptor.
|
|
|
|
l. Readline calls an application-set event hook (rl_event_hook) after it gets
|
|
a signal while reading input (read returns -1/EINTR but readline does not
|
|
handle the signal immediately) to allow the application to handle or
|
|
otherwise note it.
|
|
|
|
m. If the user-settable variable `history-size' is set to a value less than
|
|
0, the history list size is unlimited.
|
|
|
|
n. New application-settable variable: rl_signal_event_hook; function that is
|
|
called when readline is reading terminal input and read(2) is interrupted
|
|
by a signal. Currently not called for SIGHUP or SIGTERM.
|