mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-25 06:47:56 +02:00
317 lines
13 KiB
Plaintext
317 lines
13 KiB
Plaintext
This document details the changes between this version, bash-4.2-beta,
|
|
and the previous version, bash-4.2-alpha.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Fixed a bug that caused the \W prompt string escape to not add a closing
|
|
NULL.
|
|
|
|
b. Fixed a bug that caused partially-quoted words that were not subject to
|
|
word splitting to retained quoted NULLs.
|
|
|
|
c. Added considerable efficiency speedups when pattern matching in multibyte
|
|
locales by skipping multibyte character functions where possible.
|
|
|
|
d. Added considerable speedups to variable expansion when in multibyte locales.
|
|
|
|
e. Fixed a bug that caused the expansion of $* when there are no positional
|
|
parameters to cause the shell to dump core when used in a pattern
|
|
matching context.
|
|
|
|
f. Fixed a bug that caused variable expansions preceding regular builtins to
|
|
not change the shell environment during their execution.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Fixed a bug that made an explicit argument of 0 to yank-last-arg behave
|
|
as if it were a negative argument.
|
|
|
|
------------------------------------------------------------------------------
|
|
This document details the changes between this version, bash-4.2-alpha,
|
|
and the previous version, bash-4.1-release.
|
|
|
|
1. Changes to Bash
|
|
|
|
a. Fixed a bug in the parser when processing alias expansions containing
|
|
quoted newlines.
|
|
|
|
b. Fixed a memory leak in associative array expansion.
|
|
|
|
c. Fixed a bug that caused quoted here-strings to be requoted when printed.
|
|
|
|
d. Fixed a bug in arithmetic expansion that caused the index in an array
|
|
expansion to be evaluated twice under certain circumstances.
|
|
|
|
e. Fixed several bugs with the expansion and display of variables that have
|
|
been given attributes but not values and are technically unset.
|
|
|
|
f. Fixed a bug that caused core dumps when using filename completion that
|
|
expands to a filename containing a globbing character.
|
|
|
|
g. Fixed a bug that caused assignment statements preceding a special builtin
|
|
when running in Posix mode to not persist after the builtin completed
|
|
when the special builtin was executed in a shell function without any
|
|
local variables.
|
|
|
|
h. Fixed a bug that caused a command to remain in the hash table even after
|
|
`hash command' did not find anything if there was already an existing
|
|
hashed pathname.
|
|
|
|
i. Fixed several bugs caused by executing unsafe functions from a signal
|
|
handler in the cases where a signal handler is executed immediately
|
|
rather than setting a flag for later execution.
|
|
|
|
j. Fixed a bug that caused some internal flag variables to be set
|
|
incorrectly if `read -t' timed out.
|
|
|
|
k. Fixed a Posix compatibility issue by making sure that a backslash escaping
|
|
a `}' within a double-quoted ${...} parameter expansion is removed as part
|
|
of the parameter expansion.
|
|
|
|
l. Fixed a bug that caused execution of a trap to overwrite PIPESTATUS.
|
|
|
|
m. Fixed a bug that caused here documents to not be displayed correctly
|
|
when attached to commands inside compound commands.
|
|
|
|
n. Fixed a bug that caused the printf builtin to use the wrong precision
|
|
when using the `*' modifier.
|
|
|
|
o. Fixed a bug that caused an arriving SIGCHLD to interrupt output functions
|
|
like those invoked by echo or printf.
|
|
|
|
p. Changed to use a more robust mechanism than eaccess(2) when test is
|
|
checking filenames for execution permission.
|
|
|
|
q. Fixed a bug that caused spurious semicolons to be added into the command
|
|
history in certain cases.
|
|
|
|
r. Fixed a bug that caused the shell to free non-allocated memory when
|
|
unsetting element 0 of an associative array after it was assigned
|
|
implicitly.
|
|
|
|
s. Fixed a bug that could cause the shell to dump core if using the `v'
|
|
vi editing command on a multi-line command.
|
|
|
|
t. Fixed a bug that left FIFOs opened by process substitutions open long
|
|
enough to potentially cause file descriptor exhaustion when running a
|
|
shell function or shell builtin.
|
|
|
|
u. Fixed a bug that caused the history expansion functions to not recognize
|
|
process substitution or extended glob patterns as single words.
|
|
|
|
v. Fixed a bug that caused restricted shells to set a restricted command's
|
|
exit status incorrectly.
|
|
|
|
w. Fixed a bug that caused bash to ignore the wrong set of filenames when
|
|
completing a command using the `complete-filename' readline command.
|
|
|
|
x. Fixed a bug that caused a -PID argument following a -s sig or -n sig to
|
|
not be interpreted as a signal specification.
|
|
|
|
y. Changed posix-mode behavior of a parse error in a `.' script or `eval'
|
|
command to exit the shell under Posix-specified conditions. Previous
|
|
versions printed a warning.
|
|
|
|
z. Fixed a bug in \W prompt expansion that resulted in incorrect expansion
|
|
in the event of overlapping strings.
|
|
|
|
aa. Fixed a bug that caused the := parameter expansion operator to return the
|
|
wrong value as the result of the expansion.
|
|
|
|
bb. When in Posix mode, a single quote is not treated specially in a
|
|
double-quoted ${...} expansion, unless the expansion operator is
|
|
# or % or the non-Posix `//', `^', and `,'. In particular, it does
|
|
not define a new quoting context. This is from Posix interpretation 221.
|
|
|
|
cc. Fixed a bug that inadvertently allowed program names containing slashes
|
|
to be entered into the command hash table.
|
|
|
|
dd. Fixed a bug that caused the select builtin to incorrectly compute the
|
|
display width of the arguments in the presence of multibyte characters.
|
|
|
|
ee. Fixed a bug that caused bash to not change the xtrace file descriptor if
|
|
BASH_XTRACEFD was found in the shell environment at startup.
|
|
|
|
ff. Fixed a memory leak in the pattern removal parameter expansion.
|
|
|
|
gg. Fixed a bug that caused SIGINT to fail to interrupt a nested loop if the
|
|
loop was in a pipeline.
|
|
|
|
hh. Fixed a problem in $(...) parsing that caused the parser to add an extra
|
|
space to a here-document delimiter if the first word contained a `/'.
|
|
|
|
ii. Fixed a bug that caused functions defined with the `function' reserved
|
|
word to require braces around the function body.
|
|
|
|
jj. Fixed a bug that caused bash to dump core when a variable expansion being
|
|
used as an array subscript failed.
|
|
|
|
kk. Fixed a bug that caused bash to dump core if the case-modification
|
|
expansions were used on a variable with a null value.
|
|
|
|
ll. Fixed a bug that caused partially-quoted strings to be split incorrectly
|
|
if a variable with a null value was expanded within double quotes.
|
|
|
|
mm. The pattern substitution word expansion has been sped up dramatically
|
|
when running in a locale with multibyte characters.
|
|
|
|
nn. Fixed a bug that caused history -a to not write the correct lines to
|
|
the history file if all the new lines in the history list were added
|
|
since the last time the history file was read or written.
|
|
|
|
oo. Fixed a bug that caused completion of a word with an unclosed `` command
|
|
substitution to set the prompt incorrectly.
|
|
|
|
pp. Fixed a bug that caused extended globbing patterns in $HISTIGNORE or
|
|
$GLOBIGNORE to be incorrectly scanned.
|
|
|
|
qq. Fixed a bug caused by closing file descriptors 3-20 on shell startup. The
|
|
shell now sets them to close-on-exec.
|
|
|
|
rr. Fixed a bug that caused the exit status of `exec file' to be set incorrectly
|
|
if `file' was a directory.
|
|
|
|
ss. Fixed a bug in the `.' builtin to make a non-interactive posix-mode shell
|
|
exit if the file argument to `.' is not found. Prefixing exec with
|
|
`command' makes the shell not exit. Posix requires this behavior.
|
|
|
|
tt. Fixed a bug that caused `sh -c 'command exec; exit 1' to hang.
|
|
|
|
uu. Fixed a bug in $(...) command substitution parsing that caused the shell
|
|
to treat backslash-newline incorrectly when parsing a comment.
|
|
|
|
vv. Fixed bug that caused brace expansion sequence generation to misbehave
|
|
when supplied integers greater than 2**31 - 1.
|
|
|
|
ww. Fixed a bug that caused failure to save file descriptors for redirections
|
|
to corrupt shell file descriptors.
|
|
|
|
xx. Fixed a bug that caused bash-forward-shellword to not correctly handle
|
|
quoted strings.
|
|
|
|
2. Changes to Readline
|
|
|
|
a. Fixed a bug that caused the unconverted filename to be added to the list of
|
|
completions when the application specified filename conversion functions.
|
|
|
|
b. Fixed a bug that caused the wrong filename to be passed to opendir when the
|
|
application has specified a filename dequoting function.
|
|
|
|
c. Fixed a bug when repeating a character search in vi mode in the case where
|
|
there was no search to repeat.
|
|
|
|
d. When show-all-if-ambiguous is set, the completion routines no longer insert
|
|
a common match prefix that is shorter than the text being completed.
|
|
|
|
e. The full set of vi editing commands may now be used in callback mode.
|
|
|
|
f. Fixed a bug that caused readline to not update its idea of the terminal
|
|
dimensions while running in `no-echo' mode.
|
|
|
|
h. Fixed a bug that caused readline to dump core if an application called
|
|
rl_prep_terminal without setting rl_instream.
|
|
|
|
i. Fixed a bug that caused meta-prefixed characters bound to incremental
|
|
search forward or backward to not be recognized if they were typed
|
|
subsequently.
|
|
|
|
j. The incremental search code treats key sequences that map to the same
|
|
functions as (default) ^G, ^W, and ^Y as equivalent to those characters.
|
|
|
|
k. Fixed a bug in menu-complete that caused it to misbehave with large
|
|
negative argument.
|
|
|
|
l. Fixed a bug that caused vi-mode yank-last-arg to ring the bell when invoked
|
|
at the end of the line.
|
|
|
|
3. New Features in Bash
|
|
|
|
a. `exec -a foo' now sets $0 to `foo' in an executable shell script without a
|
|
leading #!.
|
|
|
|
b. Subshells begun to execute command substitutions or run shell functions or
|
|
builtins in subshells do not reset trap strings until a new trap is
|
|
specified. This allows $(trap) to display the caller's traps and the
|
|
trap strings to persist until a new trap is set.
|
|
|
|
c. `trap -p' will now show signals ignored at shell startup, though their
|
|
disposition still cannot be modified.
|
|
|
|
d. $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
|
|
|
|
e. declare/typeset has a new `-g' option, which creates variables in the
|
|
global scope even when run in a shell function.
|
|
|
|
f. test/[/[[ have a new -v variable unary operator, which returns success if
|
|
`variable' has been set.
|
|
|
|
g. Posix parsing changes to allow `! time command' and multiple consecutive
|
|
instances of `!' (which toggle) and `time' (which have no cumulative
|
|
effect).
|
|
|
|
h. Posix change to allow `time' as a command by itself to print the elapsed
|
|
user, system, and real times for the shell and its children.
|
|
|
|
j. $((...)) is always parsed as an arithmetic expansion first, instead of as
|
|
a potential nested command substitution, as Posix requires.
|
|
|
|
k. A new FUNCNEST variable to allow the user to control the maximum shell
|
|
function nesting (recursive execution) level.
|
|
|
|
l. The mapfile builtin now supplies a third argument to the callback command:
|
|
the line about to be assigned to the supplied array index.
|
|
|
|
m. The printf builtin has a new %(fmt)T specifier, which allows time values
|
|
to use strftime-like formatting.
|
|
|
|
n. There is a new `compat41' shell option.
|
|
|
|
o. The cd builtin has a new Posix-mandated `-e' option.
|
|
|
|
p. Negative subscripts to indexed arrays, previously errors, now are treated
|
|
as offsets from the maximum assigned index + 1.
|
|
|
|
q. Negative length specifications in the ${var:offset:length} expansion,
|
|
previously errors, are now treated as offsets from the end of the variable.
|
|
|
|
r. Parsing change to allow `time -p --'.
|
|
|
|
s. Posix-mode parsing change to not recognize `time' as a keyword if the
|
|
following token begins with a `-'. This means no more Posix-mode
|
|
`time -p'. Posix interpretation 267.
|
|
|
|
t. There is a new `lastpipe' shell option that runs the last command of a
|
|
pipeline in the current shell context. The lastpipe option has no
|
|
effect if job control is enabled.
|
|
|
|
u. History expansion no longer expands the `$!' variable expansion.
|
|
|
|
v. Posix mode shells no longer exit if a variable assignment error occurs
|
|
with an assignment preceding a command that is not a special builtin.
|
|
|
|
w. Non-interactive mode shells exit if -u is enabled and an attempt is made
|
|
to use an unset variable with the % or # expansions, the `//', `^', or
|
|
`,' expansions, or the parameter length expansion.
|
|
|
|
x. Posix-mode shells use the argument passed to `.' as-is if a $PATH search
|
|
fails, effectively searching the current directory. Posix-2008 change.
|
|
|
|
4. New Features in Readline
|
|
|
|
a. The history library does not try to write the history filename in the
|
|
current directory if $HOME is unset. This closes a potential security
|
|
problem if the application does not specify a history filename.
|
|
|
|
b. New bindable variable `completion-display-width' to set the number of
|
|
columns used when displaying completions.
|
|
|
|
c. New bindable variable `completion-case-map' to cause case-insensitive
|
|
completion to treat `-' and `_' as identical.
|
|
|
|
d. There are new bindable vi-mode command names to avoid readline's case-
|
|
insensitive matching not allowing them to be bound separately.
|
|
|
|
e. New bindable variable `menu-complete-display-prefix' causes the menu
|
|
completion code to display the common prefix of the possible completions
|
|
before cycling through the list, instead of after.
|