[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bash-4.4-alpha available for FTP

From: Chet Ramey
Subject: Bash-4.4-alpha available for FTP
Date: Fri, 10 Jul 2015 11:21:50 -0400

The first alpha release of bash-4.4 is now available with the URL


This tar file includes the formatted documentation (you should be able to
generate updated versions yourself).

This release fixes many outstanding bugs in bash-4.3 and introduces several
new features.  The most significant bug fixes are the remaining changes to
reworking of signal handling to avoid running signal and trap handlers in a
signal handler context.  There are also several changes dealing with variables
that have been given attributes but not values, which means they are
technically unset.

All of the released patches for the shellshock vulnerability, and several
other related changes, are included in bash-4.4.

The most notable new features are mapfile's ability to use an arbitrary
record delimiter, a --help option available for nearly all builtins, a
new family of address@hidden expansions that transform the value of
`parameter', the `local' builtin's ability to save and restore the state
of the single-letter shell option flags around function calls, and a new
EXECIGNORE variable, which adds the ability to specify names that should
be ignored when searching for commands.

There are a few incompatible changes between bash-4.3 and bash-4.4.  Bash
now retains the exit status only of asynchronous jobs, as opposed to all
jobs.  This means that it is not possible to use `wait' to retrieve the
status of a previously-completed synchronous command.  Bash no longer
attempts to perform compound assignment if a variable expansion on the
right-hand side of an assignment statement to `declare' or `local' has the
form of a compound assignment.  There are other changes to compound array
assignments used as arguments to the `declare' and `local' builtins, but
those should be backwards compatible, albeit with warning messages about
deprecated constructs. 

`bashbug' may be used to report bugs with this version.  It will send
mail to address@hidden if the shell's `release status' is alpha or

As always, thanks for your help.


+========== CHANGES ==========+
This document details the changes between this version, bash-4.4-alpha, and
the previous version, bash-4.3-release.

1.  Changes to Bash

a.  A bug that caused pipelines to be corrupted while running the DEBUG trap
    was fixed.

b.  A bug that accidentally omitted the `-R' unary operator from `test' was

c.  A bug that could cause the shell to not restore the terminal's process
    group on shell exit was fixed.

d.  Several changes were made to programmable completion to accommodate
    assumptions made by the bash-completion package.

e.  Bash no longer inhibits C-style escape processing ($'...') while performing
    pattern substitution word expansions.

f.  Fixed a bug that caused `return' executed from a trap handler to use the
    wrong return status when one was not supplied as an argument.

g.  In Posix mode, defining a function with the same name as a special
    builtin is now an error, fatal only when the shell is not interactive.

h.  Fixed a bug that caused compound array assignments to discard unset or null
    variables used as subscripts, thereby making it appear as if the index was
    not present.

i.  Fixed a bug that caused extended glob patterns to incorrectly match
    filenames with a leading `.'.

j.  Fixed a bug involving sign extension when reallocating the input line
    after a history expansion, causing segmentation faults.

k.  Bash now does a better job at identifying syntax errors during word
    completion and tailoring completion appropriately.

l.  Bash now uses the current locale's decimal point in comamnd timing output.

m.  Fixed a bug that caused segmentation faults while reading here documents if
    PS2 contains a command substitution.

n.  There are several changes to how $@ is expanded when unquoted but in a
    context where word splitting is not performed (e.g., on the rhs of an
    assignment or in a conditional command).

o.  Bash now quotes command hash table entries that contain shell metacharacters
    when displaying hash table contents.

p.  Fixed a potential file descriptor leak when dup2() fails while performing a

q.  Fixed a bug that caused directory names evaluated during word completion to
    be dequoted twice.

r.  Fixed several bugs which could result in indirect variable expansion and
    namerefs creating variables with invalid names or referencing variables
    set to the empty string.

s.  Fixed a bug that caused bash to not expand $0 in word expansions where it

t.  Fixed a bug that caused bash to perform process substitution if <(
    appeared inside an arithmetic context.

u.  Fixed a bug in extglob pattern parsing that caused slashes in the pattern
    to be confused as directory names.

v.  Fixed several bugs with treatment of invisible variables (variables with
    attributes that are unset because they have never been assigned values).

w.  Fixed a bug that caused the `read' builtin to not clean up readline's
    state when using the -e and -t options together and the read timed out.

x.  Fixed a bug that caused the shell to exit with the wrong (but non-zero)
    value if a command was not found or was not executable.

y.  Fixed a bug that caused the `time' reserved word to not be recognized as
    such in all contexts where it should have been.

z.  Fixed a bug that caused the shell to close process subsitution file
    descriptors when executing a script without the `#!' leading line.

aa. Fixed a typo that caused the `compat42' shell option to set the wrong
    compatibility level.

bb. The shell now handles process substitution commands with embedded
    parentheses the same way as it does when parsing command substitution.

cc. Fixed a bug that caused nested pipelines and the `lastpipe' shell option
    to produce core dumps.

dd. Fixed a bug that caused patterns containing `*' to match pathnames in cases
    where slashes must be matched explicitly.

ee. Fixed a problem with patterns containing `:' in colon-separated variables
    lik GLOBIGNORE. 

ff. Fixed a bug that caused indirect variable expansion using indexed arrays to
    always use index 0.

gg. Fixed a parsing problem that caused quoted newlines immediately following a
    command substitution to be mishandled in certain cases.

hh. Fixed a potential buffer overflow on systems without locale_charset or the
    bash replacement.

ii. Fixed a bug that caused background processes to modify the terminal's
    process group under certain circumstances.

jj. Asynchronous commands now always set $? to 0 and are not affected by
    whether or not the command's exit status is being inverted.

kk. Fixed a problem that caused a line ending with an escaped newline and
    containingh a prior `eval' to be incorrectly parsed.

ll. Fixed an issue with programmable completion and `!' in extglob patterns
    used as arguments to `compgen -X'.

mm. Word completion now treats the two-character token `>|' as requiring
    filename expansion.

nn. Bash no longer expands tildes in $PATH elements while in Posix mode.

oo. Fixed a bug that caused bash to not clean up readline's state, including
    the terminal settings, if it received a fatal signal while in a readline()
    call (including `read -e' and `read -s').

pp. Fixed bug that caused importing shell functions from the environment to
    execute additional commands following the function.

qq. Fixed a bug that caused the parser to return a lookahead character pushed
    back by a previous call, even when on another line.

rr. Fixed a bug that caused many here-documents or many nested case statements
    to overflow an internal stack.

ss. Changed the way bash encodes exported functions for inclusion in the
    environment to avoid name collisions with valid variable names and to
    indicate that they are exported functions.

tt. Fixed a bug that could result in an invalid memory access when processing
    a here document delimited by end of file or end of string.

uu. Fixed a bug that could cause an invalid memory access if a command was run
    before initializing the job control framework.

vv. When in Posix mode, bash prints shell function definitions as Posix
    specifies them, without the leading `function' keyword.

ww. The variable attribute display builtins no longer display variables with
    invalid names that were imported from the environment.

xx. Fixed a bug that could allow `break' or `continue' executed from shell
    functions to affect loops running outside of the function.

yy. Fixed a bug that could cause a restricted shell to attempt to import shell
    functions from the environment.

zz. The shell now allows double-quoted identifiers in arithmetic expressions.

aaa. Fixed a bug that could allow scalar variables subscripted using 
address@hidden in
     word expansions to be incorrectly quoted.

bbb. The shell now makes sure to ignore SIGTSTP/SIGTTIN/SIGTTOU in child
     processes if they were ignored at shell startup, even if job control is
     in effect.

ccc. Fixed a bug that could cause $* to be split on spaces when IFS is set to
     the empty string.

ddd. Posix says that expanding $* in a pattern context where the expansion is
     double-quoted should not treat $* as if it were double quoted.

eee. Bash now restores getopts' internal state between calls to getopts even if
     a shell function declares a local copy of OPTIND.

fff. Fixed a bug that could cause `history -r' or `history -n' to read identical
     lines from the history file more than once.

ggg. The commands executed by `bind -x' now redisplay at most the final line
     of a multi-line prompt, and those commands may return 124 to indicate that
     the entire prompt should be redrawn.

hhh. Fixed a bug that could cause `mapfile' to create variables with invalid

iii. The shell only goes into debugging mode when --debugger is supplied if
     the debugger initialization file is present.

jjj. Fixed a bug that disallowed an assignment to (implicit) subscript 0 of an
     existing array in a declare command that set the readonly attribute.

kkk. Fixed a bug that inadvertently allowed assignments to FUNCNAME to disable
     its special status.

lll. Appending to an existing array variable using the compound assignment
     syntax (var+=(aaa)) should not affect assignments to existing subscripts
     appearing in the compound assignment.

mmm. Fixed a bug that could cause the shell to crash when a variable with a
     null value was passed in the temporary environment and the variable's
     attributes are modified using `declare' while performing a redirection.

nnn. Fixed a bug in printf so that a missing precision specifier after a `.'
     is treated as 0.

ooo. Fixed a bug that attempted to use the internal command timing to time
     pipeline components if the pipeline elements are separated by newlines.

ppp. Fixed a bug that caused `declare -al foo=(ONE TWO THREE)' to not lowercase
     the values on assignment.

qqq. Bash does a better job of determining whether or not files are executable
     when running on Windows, since the X_OK flag to access(2) is not supported.

rrr. Fixed a bug that caused some of the shell's internal traps (e.g., ERR) to
     be interrupted (and leave incorrect state) by pending SIGINTs.

sss. Fixed a bug in the bash interface to history expansion to avoid attempting
     expansion if the history expansion character occurs in a command

ttt. Fixed a bug that caused the select command to crash if the REPLY variable
     ends up empty (e.g., if it's made readonly)

uuu. Bash handles backslash-quoting of multibyte characters better when quoting
     output that is intended to be reused.

vvv. System-specific changes for: Windows, Cygwin.

www. Fixes for upper and lower-casing multibyte characters, some locales have
     characters whose upper and lowercase versions have different numbers of

xxx. Fixed a bug that caused the ERR trap in a shell function to have the
     right value for $LINENO.

yyy. Fixed a bug that resulted in incorrect quoting of regexps for the =~
     operator when an open brace appears without a close brace.

zzz. Fixed a bug in the array unset operation that caused it to attempt to
     parse embedded single and double quotes.

aaaa. Fixed a bug that caused $* to not expand with the first character of
      $IFS as a separator in a context where word splitting will not take

bbbb. Fixed two bugs that could cause the shell to dereference a null pointer
      while attempting to print an error message from arithmetic expansion.

cccc. Fixed a bug that resulted in short-circuited evaluation when reading
      commands from a string ending in an unquoted backslash, or when sourcing
      a file that ends with an unquoted backslash.

dddd. Fixed a bug that resulted in the no-fork optimization not cleaning up
      any FIFOs created by process substitution.

eeee. If the -T option is not set, allow the source builtin and shell functions
      to set a DEBUG trap that persists after the sourced file or function
      returns, instead of restoring the old (unset) value unconditionally.

ffff. Fixed a bug that caused redirections to not be undone on some syntax
      errors, e.g., when parsing a command substitution.

gggg. Bash only adds asynchronous commands to the table of background pids
      whose status it remembers, to avoid it growing too large during scripts
      that create and reap large numbers of child processes.  This means that
      `wait' no longer works on synchronous jobs, but $? can be used to get
      the exit status in those cases.

hhhh. Bash now checks whether or not a shell script argument is a directory
      before trying to open it; Posix says implementations may allow open(2)
      on a directory.

iiii. Fixed a bug that could cause the shell to set the terminal's process
      group to a background process group when running as part of a pipeline.

jjjj. Made a few changes to strings to avoid possible potential negative effects
      caused by malicious translations.

kkkk. Fixed a bug that caused the `unset' builtin to continue to treat its
      arguments as functions after unsetting a function when invoked with no

llll. Fixed a bug that would not replace empty strings using pattern
      substitution even if the pattern matched the empty string.

mmmm. Fixed a bug with word completion that prevented some characters from
      being backslash-quoted (backquote, dollar sign).

nnnn. Fixed a bug that prevented a command from the history re-executed by the
      `fc' builtin from setting verbose mode.

oooo. Fixed a bug that caused the shell to not enable and disable function
      tracing with changes to the `extdebug' shell option.

pppp. Fixed a bug that caused assignments to nameref variables pointing to
      unset variables with attributes but no values to create variables with
      incorrect names.

qqqq. Fixed a bug that caused `unset' on nameref variables (without -n) to
      unset the wrong variable under certain circumstances.

rrrr. Fixed a bug that caused close braces occurring in brace expansions within
      command substitutions to incorrectly terminate parameter expansions.

ssss. Fixed a bug that caused `command -p' to temporarily alter $PATH.

tttt. Fixed a bug that caused interactive shells compiled without job control
      to return incorrect status values for child processes when running a
      single command that creates enough children to use the entire PID space.

uuuu. `esac' should not be recognized as a reserved word when it appears as the
      second or later pattern in a case statement pattern list.

vvvv. Fixed a bug that caused the completion code to read past the end of the
      readline line buffer while skipping assignment statements to find the
      command name.

wwww. Fixed a bug that caused case statements within loops contained in a
      command substitution to be parsed incorrectly.

xxxx. Fixed a bug that could cause SIGCHLD handling to be delayed after
      running `wait' with no arguments and interrupting it with ^C without
      a trap handler installed.

2.  Changes to Readline

a.  A bug that caused vi-mode `.' to be unable to redo `c', `d', and `y'
    commands with modifiers was fixed.

b.  Fixed a bug that caused callback mode to dump core when reading a
    multiple-key sequence (e.g., arrow keys).

c.  Fixed a bug that caused the redisplay code to erase some of the line when
    using horizontal scrolling with incremental search.

d.  Readline's input handler now performs signal processing if read(2) is
    interrupted by SIGALRM or SIGVTALRM.

e.  Fixed a problem with revert-all-at-newline freeing freed memory.

f.  Clarified the documentation for the history_quotes_inhibit_expansion
    variable to note that it inhibits scanning for the history comment
    character and that it only affects double-quoted strings.

g.  Fixed an off-by-one error in the prompt printed when performing searches.

h.  Use pselect(2), if available, to wait for input before calling read(2), so
    a SIGWINCH can interrupt it, since it doesn't interrupt read(2).

i.  Some memory leaks caused by signals interrupting filename completion have
    been fixed.

j.  Reading EOF twice on a non-empty line causes EOF to be returned, rather
    than the partial line.  This can cause partial lines to be executed on
    SIGHUP, for example.

k.  Fixed a bug concerning deleting multibyte characters from the search
    string while performing an incremental search.

l.  Fixed a bug with tilde expanding directory names in filename completion.

m.  Fixed a bug that did not allow binding sequences beginning with a `\'.

n.  Fixed a redisplay bug involving incorrect line wrapping when the prompt
    contains a multibyte character in the last screen column.

o.  Fixed a bug that caused history expansion to disregard characters that are
    documented to delimit a history event specifier without requiring `:'.

p.  Fixed a bug that could cause reading past the end of a string when reading
    the value when binding the set of isearch terminators.

q.  Fixed a bug that caused readline commands that depend on knowing which  
    key invoked them to misbehave when dispatching key sequences that are
    prefixes of other key bindings. 

r.  Paren matching now works in vi insert mode.

3.  New Features in Bash

a.  There is now a settable configuration #define that will cause the shell
    to exit if the shell is running setuid without the -p option and setuid
    to the real uid fails.

b.  Command and process substitutions now turn off the `-v' option when
    executing, as other shells seem to do.

c.  The default value for the `checkhash' shell option may now be set at
    compile time with a #define.

d.  The `mapfile' builtin now has a -d option to use an arbitrary character
    as the record delimiter, and a -t option  to strip the delimiter as
    supplied with -d.

e.  The maximum number of nested recursive calls to `eval' is now settable in
    config-top.h; the default is no limit.

f.  The `-p' option to declare and similar builtins will display attributes for
    named variables even when those variables have not been assigned values
    (which are technically unset).

g.  The maximum number of nested recursive calls to `source' is now settable
    in config-top.h; the default is no limit.

h.  All builtin commands recognize the `--help' option and print a usage

i.  Bash does not allow function names containing `/' and `=' to be exported.

j.  The `ulimit' builtin has new -k (kqueues) and -P (pseudoterminals) options.

k.  The shell now allows `time ; othercommand' to time null commands.

l.  There is a new `--enable-function-import' configuration option to allow
    importing shell functions from the environment; import is enabled by

m.  `printf -v var ""' will now set `var' to the empty string, as if `var=""'
    had been executed.

n.  GLOBIGNORE, the pattern substitution word expansion, and programmable
    completion match filtering now honor the value of the `nocasematch' option.

o.  There is a new address@hidden family of operators to transform the
    value of `parameter'.

p.  Bash no longer attempts to perform compound assignment if a variable on the
    rhs of an assignment statement argument to `declare' has the form of a
    compound assignment (e.g., w='(word)' ; declare foo=$w); compound
    assignments are accepted if the variable was already declared as an array,
    but with a warning.

q.  The declare builtin no longer displays array variables using the compound
    assignment syntax with quotes; that will generate warnings when re-used as
    input, and isn't necessary.

r.  Executing the rhs of && and || will no longer cause the shell to fork if
    it's not necessary.

s.  The `local' builtin takes a new argument: `-', which will cause it to save
    and the single-letter shell options and restore their previous values at
    function return.

t.  `complete' and `compgen' have a new `-o nosort' option, which forces
    readline to not sort the completion matches.

u.  Bash now allows waiting for the most recent process substitution, since it
    appears as $!.

v.  The `unset' builtin now unsets a scalar variable if it is subscripted with
    a `0', analogous to the ${var[0]} expansion.

w.  `set -i' is no longer valid, as in other shells.

x.  BASH_SUBSHELL is now updated for process substitution and group commands
    in pipelines, and is available with the same value when running any exit

y.  Bash now checks $INSIDE_EMACS as well as $EMACS when deciding whether or
    not bash is being run in a GNU Emacs shell window.

z.  Bash now treats SIGINT received when running a non-builtin command in a
    loop the way it has traditionally treated running a builtin command:
    running any trap handler and breaking out of the loop.

aa. New variable: EXECIGNORE; a colon-separate list of patterns that will
    cause matching filenames to be ignored when searching for commands.

bb. Aliases whose value ends in a shell metacharacter now expand in a way to
    allow them to be `pasted' to the next token, which can potentially change
    the meaning of a command (e.g., turning `&' into `&&').

4.  New Features in Readline

a.  The history truncation code now uses the same error recovery mechansim as
    the history writing code, and restores the old version of the history file
    on error.  The error recovery mechanism handles symlinked history files.

b.  There is a new bindable variable, `enable-bracketed-paste', which enables
    support for a terminal's bracketed paste mode.

c.  The editing mode indicators can now be strings and are user-settable
    (new `emacs-mode-string', `vi-cmd-mode-string' and `vi-ins-mode-string'
    variables).  Mode strings can contain invisible character sequences.
    Setting mode strings to null strings restores the defaults.

d.  Prompt expansion adds the mode string to the last line of a multi-line
    prompt (one with embedded newlines).

e.  There is a new bindable variable, `colored-completion-prefix', which, if
    set, causes the common prefix of a set of possible completions to be
    displayed in color.

f.  There is a new bindable command `vi-yank-pop', a vi-mode version of emacs-
    mode yank-pop.

g.  The redisplay code underwent several efficiency improvements for multibyte

h.  The insert-char function attempts to batch-insert all pending typeahead
    that maps to self-insert, as long as it is coming from the terminal.

i.  rl_callback_sigcleanup: a new application function that can clean up and
    unset any state set by readline's callback mode.  Intended to be used
    after a signal.

``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    address@hidden    http://cnswww.cns.cwru.edu/~chet/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]