This document details the changes between this version, bash-4.2-release, and the previous version, bash-4.2-rc2. 1. Changes to Bash a. Fixed a bug that caused some variables to be clobbered by a longjmp, resulting in stack corruption. ------------------------------------------------------------------------------ This document details the changes between this version, bash-4.2-rc2, and the previous version, bash-4.2-rc1. 1. Changes to Bash a. Changes to bash_directory_completion_hook so that it's assigned to the readline rl_directory_rewrite_hook variable, which modifies the directory name passed to opendir without modifying the directory name the user typed. b. Fixed bug in select builtin that caused it to not terminate correctly if the read timed out due to $TMOUT. c. Fixed a problem that resulted in non-repeatable sequences of random numbers when RANDOM=0. ------------------------------------------------------------------------------ This document details the changes between this version, bash-4.2-rc1, and the previous version, bash-4.2-beta. 1. Changes to Bash a. Fixed a bug that caused some redirection errors to leak file descriptors. b. Fixed a bug that caused unary `+' and `-' arithmetic operators to have a higher precedence than unary `!' and `~'. c. Fixed a bug that caused simple commands in a pipeline to affect the exit status ($?) seen by subsequent pipeline commands. d. A number of cygwin-specific changes to avoid the use of text-mode files and file access, and to make sure that \r is handled correctly. e. Fixed a bug that caused the read builtin to not return failure if an attempt is made to assign to a readonly variable. f. Fixed a bug that caused some builtin usage messages to not be translated. g. Fixed a bug that caused the getopts builtin to not return failure if an attempt is made to assign to a readonly variable. Now it returns 2. h. Fixed the cd and pwd builtins to return failure if PWD is readonly and cannot be assigned to. i. Added code to check the return value of access(2) on Solaris systems, since it returns success for executable tests (e.g., `test -x') when run by root, even if the file permissions don't allow execution. 2. Changes to Readline a. Fixed a bug that caused directory names in words to be completed to not be dequoted correctly. 3. New Features in Bash 4. New Features in Readline ------------------------------------------------------------------------------ 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.