punkwalrus (punkwalrus) wrote,

Linux - Bash 3.0 is out!

Come and get it!

This document details the changes between this version, bash-3.0-release,
and the previous version, bash-3.0-rc1.

1. Changes to Bash

a. Fixed a boundary overrun that could cause segmentation faults when the
completion code hands an incomplete construct to the word expansion

b. Changed posix mode behavior so that an error in a variable assignment
preceding a special builtin causes a non-interactive shell to exit.

c. Change the directory expansion portion of the completion code to not
expand embedded command substitutions if the directory name appears in
the file system.

d. Fixed a problem that caused `bash -r' to turn on restrictions before
reading the startup files.

e. Fixed a problem with the default operation of the `umask' builtin.

2. Changes to Readline

a. Fixed a problem with readline saving the contents of the current line
before beginning a non-interactive search.

b. Fixed a problem with EOF detection when using rl_event_hook.

c. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric

This document details the changes between this version, bash-3.0-rc1,
and the previous version, bash-3.0-beta1.

1. Changes to Bash

a. Fixed a bug that caused incorrect behavior when referecing element 0 of
an array using $array, element 0 was unset, and `set -u' was enabled.

b. System-specific changes for: SCO Unix 3.2, Tandem.

c. Fixed a bug that caused inappropriate word splitting when a variable was
expanded within a double-quoted string that also included $@.

d. Fixed a bug that caused `pwd' to not display anything in physical mode
when the file system had changed underneath the shell.

e. Fixed a bug in the pre- and post- increment and decrement parsing in the
expression evaluator that caused errors when the operands and corresponding
operators were separated by whitespace.

f. Fixed a bug that caused `history -p' to add an entry to the history list,
counter to the documentation. (Keeps the history expansions invoked by
emacs-mode command line editing from doing that as well.)

g. Fixed a bug that could cause a core dump if `cd' is asked to print out a
pathname longer than PATH_MAX characters.

h. Fixed a bug that caused jobs to be put into the wrong process group under
some circumstances after enabling job control with `set -m'.

i. `unalias' now returns failure if no alias name arguments are supplied.

j. Documented the characters not allowed to appear in an alias name.

k. $* is no longer expanded as if in double quotes when it appears in the
body of a here document, as the SUS seems to require.

l. The `bashbug' script now uses a directory in $TMPDIR for exclusive
access rather than trying to guess how the underlying OS provides for
secure temporary file creation.

m. Fixed a few problems with `cd' and `pwd' when asked to operate on pathnames
longer than PATH_MAX characters.

n. Fixed a memory leak caused when creating multiple local array variables
with identical names.

o. Fixed a problem with calls to getcwd() so that bash now operates better
when the full pathname to the current directory is longer than PATH_MAX

p. The `trap' builtin now reports an error if a single non-signal argument
is specified.

q. Fixed a bug that caused `umask' to not work correctly when presented
with a mask of all 0s.

r. When `getopts' reaches the end of options, OPTARG is unset, as POSIX
appears to specify.

s. Interactive mode now depends on whether or not stdin and stderr are
connected to a tty; formerly it was stdin and stdout. POSIX requires

t. Fixed vi-mode completion to work more as POSIX specifies (e.g., doing the
right kind of filename generation).

2. Changes to Readline

a. Fixed a problem that could cause readline to refer to freed memory when
moving between history lines while doing searches.

b. Improvements to the code that expands and displays prompt strings
containing multibyte characters.

c. Fixed a problem with vi-mode not correctly remembering the numeric argument
to the last `c'hange command for later use with `.'.

d. Fixed a bug in vi-mode that caused multi-digit count arguments to work

e. Fixed a problem in vi-mode that caused the last text modification command
to not be remembered across different command lines.

f. Fixed problems with changing characters and changing case at the end of
the line.

3. New Features in Bash

a. The `jobs', `kill', and `wait' builtins now accept job control notation
even if job control is not enabled.

b. The historical behavior of `trap' that allows a missing `action' argument
to cause each specified signal's handling to be reset to its default is
now only supported when `trap' is given a single non-option argument.

4. New Features in Readline

a. When listing completions, directories have a `/' appended if the
`mark-directories' option has been enabled.

This document details the changes between this version, bash-3.0-beta1,
and the previous version, bash-3.0-alpha.

1. Changes to Bash

a. Fixes to build correctly when arrays are not compiled into the shell.

b. Fixed command substitution to run any exit trap defined in the command
substitution before returning; the exit trap is not inherited from the
calling shell.

c. Fixes to process group synchronization code so that every child process
attempts to set the terminal's process group; fixes some synchronization
problems on Linux kernels that schedule the child to always run before
the parent.

d. Fixed processing of octal and hex constants in printf builtin for POSIX.2

e. Fixed a couple of core dumps in the pattern removal code.

f. Fixes to the array subrange extraction code to deal better with sparse

g. Parser errors and other errors that result in the shell exiting now cause
the exit trap to be run.

h. Change the command substitution completion functions to not append any
closing quote, because it would be inserted a closing "`" or ")".

i. Fix history initialization so assignments to $histchars made in startup
files are honored.

j. If an exit trap does not contain a call to `exit', the shell now uses
the exit status of the last command executed before the trap as the exit
status of the shell.

k. The parser now prompts with $PS2 if it reads a newline while parsing a
compound array assignment statement.

l. When performing a compound array assignment, the parser doesn't treat
words of the form [index]=value as assignments if they're the result of

m. Fixed a bug that caused `return' executed in a trap command to make the
shell think it was still running the trap.

n. Fixed the value of errno set by the pathname canonicalization functions.

o. Changed the grammar so that `time' alone on a line times a null command
rather than being a syntax error.

p. The pattern substitution coded no longer performs quote removal on the
pattern before trying to match it, as the pattern removal functions do.

q. Fixed a bug that could cause core dumps when checking whether a quoted
command name was being completed.

r. Fixes to the pattern removal and pattern replacement expansions to deal
with multibyte characters better (and faster).

s. Fix to the substring expansion (${param:off[:len]}) to deal with (possibly
multibyte) characters instead of raw bytes.

t. Fixed a bug that caused some key bindings set in an inputrc to be ignored
at shell startup.

u. Fixed a bug that caused unsetting a local variable within a function to
not work correctly.

v. Fixed a bug that caused invalid variables to be created when using
`read -a'.

w. Fixed a bug that caused "$@" to expand incorrectly when used as the right
hand side of a parameter expansion such as ${word:="$@"} if the first
character of $IFS was not a space.

x. Fixed a slight cosmetic problem when printing commands containing a
`&word' redirection.

y. Fixed a problem that could cause here documents to not be created correctly
if the system temporary directory did not allow writing.

2. Changes to Readline

a. Change to history expansion functions to treat `^' as equivalent to word
one, as the documention states.

b. Some changes to the display code to improve display and redisplay of
multibyte characters.

c. Changes to speed up the multibyte character redisplay code.

d. Fixed a bug in the vi-mode `E' command that caused it to skip over the
last character of a word if invoked while point was on the word's
next-to-last character.

e. Fixed a bug that could cause incorrect filename quoting when
case-insensitive completion was enabled and the word being completed
contained backslashes quoting word break characters.

f. Fixed a bug in redisplay triggered when the prompt string contains
invisible characters.

g. Fixed some display (and other) bugs encountered in multibyte locales
when a non-ascii character was the last character on a line.

h. Fixed some display bugs caused by multibyte characters in prompt strings.

i. Fixed a problem with history expansion caused by non-whitespace characters
used as history word delimiters.

3. New Features in Bash

a. printf builtin understands two new escape sequences: \" and \?.

b. `echo -e' understands two new escape sequences: \" and \?.

c. The GNU `gettext' package and libintl have been integrated; the shell's
messages can be translated into different languages.

d. The `\W' prompt expansion now abbreviates $HOME as `~', like `\w'.

e. The error message printed when bash cannot open a shell script supplied
as argument 1 now includes the name of the shell, to better identify
the error as coming from bash.

4. New Features in Readline

a. New application variable, rl_completion_quote_character, set to any
quote character readline finds before it calls the application completion

b. New application variable, rl_completion_suppress_quote, settable by an
application completion function. If set to non-zero, readline does not
attempt to append a closing quote to a completed word.

c. New application variable, rl_completion_found_quote, set to a non-zero
value if readline determines that the word to be completed is quoted.
Set before readline calls any application completion function.

d. New function hook, rl_completion_word_break_hook, called when readline
needs to break a line into words when completion is attempted. Allows
the word break characters to vary based on position in the line.

e. New bindable command: unix-filename-rubout. Does the same thing as
unix-word-rubout, but adds `/' to the set of word delimiters.

This document details the changes between this version, bash-3.0-alpha,
and the previous version, bash-2.05b-release.

1. Changes to Bash

a. Fixes so that the shell will compile without some of the default options

b. Fixed an error message that did not pass enough arguments to printf.

c. Fixed a bug that caused input redirection to a builtin inside a script
being read from standard input to result in the rest of the already-
read and buffered script to be discarded.

d. Fixed a bug that caused subshell initialization to close the file
descriptor from which the shell was reading a script under certain

e. Fixed a bug that caused the shell to not advance a string pointer over
a null wide character when doing string operations.

f. Fixed the internal logout code so that shells that time out waiting for
input (using $TMOUT) run ~/.bash_logout.

g. Portability and configuration changes for: cygwin, HP/UX, GNU/FreeBSD.

h. The parser no longer adds implicit double quotes to ((...)) arithmetic

i. The ((...)) arithmetic command evaluation code was fixed to not dump core
when the expanded string is null.

j. The ((...)) arithmetic command evaluation code was fixed to not perform
variable assignments while expanding the expression.

k. Fixed a bug that caused word splitting to be performed incorrectly when
IFS is set, but null.

l. Fixed a bug in brace expansion that caused a quoted `$' preceding an
open brace to inhibit brace expansion.

m. Fixed a bug that caused a leading `-' in the shell's name to cause it to
not be recognized as a restricted shell.

n. Fixed a bug in the arithmetic evaluation code that could cause longjmps
to an invalid location and result in a core dump.

o. Fixed a bug in the calculation of how many history lines are new in a
single shell session when reading new history lines from a file with
`history -n'.

p. Fixed a bug in pathname canonicalization that caused the shell to dump
core when presented with a pathname longer than PATH_MAX.

q. Fixed the parser so that it doesn't try to compare a char variable to
EOF, which fails when chars are unsigned.

r. Fixed a bug in the simple command execution code that caused occasional
core dumps.

s. The shell does a better job of saving any partial parsing state during
operations which cause a command to be executed while a line is being
entered and parsed.

t. The completion code now splits words more like the expansion code when
$IFS is used to split.

u. The locale code does a better job of recomputing the various locale
variable values when LC_ALL is unset.

v. The programmable completion code does a better job of dequoting expanded
word lists before comparing them against the word to be matched.

w. The shell no longer seg faults if the expanded value of $PS4 is null
and `set -x' is enabled.

x. Fixed a bug that caused core dumps when a here string expanded to NULL.

y. The mail checking code now makes sure the mailbox is bigger before
reporting the existence of new mail.

z. The parser does not try to expand $'...' and $"..." when the appear
within double quotes unless the `extquote' option has been enabled with
`shopt'. For backwards compatibility, it is enabled by default.

aa. Fixed a bug that caused `for x; do ...' and `select x; do ... to use
$@ instead of "$@" for the implicit list of arguments.

bb. Fixed a bug that caused a subshell of a restricted shell (e.g., one
spawned to execute a pipeline) to not exit immediately if attempting
to use a command containing a slash.

cc. Fixed a problem with empty replacements for a pattern that doesn't match
when performing ${param/word/} expansion.

dd. Word expansions performed while expanding redirections no longer search
a command's temporary environment to expand variable values.

ee. Improvements to the alias expansion code when expanding subsequent words
because an aliase's value ends with a space.

ff. `cd -' now prints the current working directory after a successful chdir
even when the shell is not interactive, as the standard requires.

gg. The shell does a better job of ensuring a child process dies of SIGINT
before resending SIGINT to itself.

hh. The arithmetic expansion variable assignment code now does the right
thing when assigning to `special' variables like OPTIND.

ii. When history expansion verification is enabled, the bash readline helper
functions that do history expansion on the current line don't print
the results.

jj. Fixed bugs with multiple consecutive alias expansion when one of the
expansions ends with a space.

kk. Fixed a problem in the programmable completion code that could cause core
dumps when trying to initialize a set of possible completions from a
list of variables.

ll. The \[ and \] escape characters are now ignored when decoding the prompt
string if the shell is started with editing disabled.

mm. Fixed a bug that could leave extra characters in a string when doing
quoted null character removal.

nn. Command substitution and other subshell operations no longer reset the
line number (aids the bash debugger).

oo. Better line number management when executing simple commands, conditional
commands, for commands, and select commands.

pp. The globbing code now uses malloc, with its better failure properties,
rather than alloca().

qq. Fixed a bug that caused expansions like #{a[2]:=value} to create the
appropriate array element instead of a variable named `a[2]'.

rr. Fixed a bug in the handling of a `?(...)' pattern immediately following
a `*' when extglob is enabled.

ss. Fixed a bug that caused a `return' invoked in an exit trap when exit is
invoked in a function to misbehave.

tt. Fixed a bug that caused CTLESC and CTLNUL characters to not be escaped
by the internal shell string quoting functions.

uu. Fixed a bug that caused quoted null characters in an expanded word list
to be inappropriately assigned to an array variable when using `read -a'.

vv. Fixed a bug that caused redirections accompanying a null command to persist
in the current shell.

ww. Fixed a bug that caused the prompt to be printed when the shell was
expanding a multiline alias.

xx. Fixed a bug that resulted in core dumps when the completion for a command
changed the compspec.

yy. Fixed a bug that caused evaluation of programmable completions to print
notifications of completed jobs.

zz. Bash now disables line editing when $EMACS == `t' and $TERM == `dumb'
(which is what emacs shell windows do).

aaa. In posix mode, `kill -l' causes signal names to be displayed without
a leading `SIG'.

bbb. Clear error flag on standard output so it doesn't persist across multiple
builtin commands.

ccc. In posix mode, `alias' displays alias values without the leading `alias',
so the output cannot be used as subsequent input.

ddd. In posix mode, the `trap' builtin doesn't check whether or not its
first argument is a signal specification and revert the signal handling
to its original disposition if it is.

eee. Fixed several bugs in the handling of "$*" and "${array[*]}" by the
pattern substitution and removal expansions.

fff. Fixed several problems with the handling of ${array[@]}, ${array[*]},
$@, and $* by the indirect variable expansion code.

ggg. Fixed a bug that did not allow `time' to be aliased.

hhh. Improved the mail checking code so it won't check (and possibly cause an
NFS file system mount) until MAILPATH or MAIL is given a value -- there
is no default if DEFAULT_MAIL_DIRECTORY is not defined at compile time.
(It is computed by configure, but can be #undef'd in config-bot.h.)

iii. If the `chkwinsize' option is enabled, the shell checks for window size
changes if a child process exits due to a signal.

jjj. Removed the attempts to avoid adding a slash at the end of a completed
executable name if there was a directory with the same name in the
current directory.

kkk. Fixed PATH lookup code so it treats the permission bits separately for
owner, group, and other, rather than checking them all.

lll. Fixed the locale code to reset the parser's idea of the character class
blank, which controls how it splits tokens, when the locale changes.

mmm. The shell now binds its special readline functions and key bindings only
if the user's inputrc file has not already bound them.

nnn. The shell now reports on processes that dump core due to signals when
invoked as `-c command'.

2. Changes to Readline

a. Fixes to avoid core dumps because of null pointer references in the
multibyte character code.

b. Fix to avoid infinite recursion caused by certain key combinations.

c. Fixed a bug that caused the vi-mode `last command' to be set incorrectly.

d. Readline no longer tries to read ahead more than one line of input, even
when more is available.

e. Fixed the code that adjusts the point to not mishandle null wide

f. Fixed a bug in the history expansion `g' modifier that caused it to skip
every other match.

g. Fixed a bug that caused the prompt to overwrite previous output when the
output doesn't contain a newline and the locale supports multibyte
characters. This same change fixes the problem of readline redisplay
slowing down dramatically as the line gets longer in multibyte locales.

h. History traversal with arrow keys in vi insertion mode causes the cursor
to be placed at the end of the new line, like in emacs mode.

i. The locale initialization code does a better job of using the right
precedence and defaulting when checking the appropriate environment

j. Fixed the history word tokenizer to handle ( and ( better when used as
part of bash.

k. The overwrite mode code received several bug fixes to improve undo.

l. Many speedups to the multibyte character redisplay code.

m. The callback character reading interface should not hang waiting to read
keyboard input.

n. Fixed a bug with redoing vi-mode `s' command.

o. The code that initializes the terminal tracks changes made to the terminal
special characters with stty(1) (or equivalent), so that these changes
are reflected in the readline bindings. New application-callable function
to make it work: rl_tty_unset_default_bindings().

p. Fixed a bug that could cause garbage to be inserted in the buffer when
changing character case in vi mode when using a multibyte locale.

q. Fixed a bug in the redisplay code that caused problems on systems
supporting multibyte characters when moving between history lines when the
new line has more glyphs but fewer bytes.

r. Undo and redo now work better after exiting vi insertion mode.

s. Make sure system calls are restarted after a SIGWINCH is received using

t. Improvements to the code that displays possible completions when using
multibyte characters.

u. Fixed a problem when parsing nested if statements in inputrc files.

v. The completer now takes multibyte characters into account when looking for
quoted substrings on which to perform completion.

w. The history search functions now perform better bounds checking on the
history list.

3. New Features in Bash

a. ANSI string expansion now implements the \x{hexdigits} escape.

b. There is a new loadable `strftime' builtin.

c. New variable, COMP_WORDBREAKS, which controls the readline completer's
idea of word break characters.

d. The `type' builtin no longer reports on aliases unless alias expansion
will actually be performed.

e. HISTCONTROL is now a colon-separated list of values, which permits
more extensibility and backwards compatibility.

f. HISTCONTROL may now include the `erasedups' option, which causes all lines
matching a line being added to be removed from the history list.

g. `configure' has a new `--enable-multibyte' argument that permits multibyte
character support to be disabled even on systems that support it.

h. New variables to support the bash debugger: BASH_ARGC, BASH_ARGV,

i. FUNCNAME has been changed to support the debugger: it's now an array

j. for, case, select, arithmetic commands now keep line number information
for the debugger.

k. There is a new `RETURN' trap executed when a function or sourced script
returns (not inherited child processes; inherited by command substitution
if function tracing is enabled and the debugger is active).

l. New invocation option: --debugger. Enables debugging and turns on new
`extdebug' shell option.

m. New `functrace' and `errtrace' options to `set -o' cause DEBUG and ERR
traps, respectively, to be inherited by shell functions. Equivalent to
`set -T' and `set -E' respectively. The `functrace' option also controls
whether or not the DEBUG trap is inherited by sourced scripts.

n. The DEBUG trap is run before binding the variable and running the action
list in a `for' command, binding the selection variable and running the
query in a `select' command, and before attempting a match in a `case'

o. New `--enable-debugger' option to `configure' to compile in the debugger
support code.

p. `declare -F' now prints out extra line number and source file information
if the `extdebug' option is set.

q. If `extdebug' is enabled, a non-zero return value from a DEBUG trap causes
the next command to be skipped, and a return value of 2 while in a
function or sourced script forces a `return'.

r. New `caller' builtin to provide a call stack for the bash debugger.

s. The DEBUG trap is run just before the first command in a function body is
executed, for the debugger.

t. `for', `select', and `case' command heads are printed when `set -x' is

u. There is a new {x..y} brace expansion, which is shorthand for {x.x+1,
x+2,...,y}. x and y can be integers or single characters; the sequence
may ascend or descend; the increment is always 1.

v. New ksh93-like ${!array[@]} expansion, expands to all the keys (indices)
of array.

w. New `force_fignore' shopt option; if enabled, suffixes specified by
FIGNORE cause words to be ignored when performing word completion even
if they're the only possibilities.

x. New `gnu_errfmt' shopt option; if enabled, error messages follow the `gnu
style' (filename:lineno:message) format.

y. New `-o bashdefault' option to complete and compgen; if set, causes the
whole set of bash completions to be performed if the compspec doesn't
result in a match.

z. New `-o plusdirs' option to complete and compgen; if set, causes directory
name completion to be performed and the results added to the rest of the
possible completions.

aa. `kill' is available as a builtin even when the shell is built without
job control.

bb. New HISTTIMEFORMAT variable; value is a format string to pass to
strftime(3). If set and not null, the `history' builtin prints out
timestamp information according to the specified format when displaying
history entries. If set, bash tells the history library to write out
timestamp information when the history file is written.

cc. The [[ ... ]] command has a new binary `=~' operator that performs
extended regular expression (egrep-like) matching.

dd. `configure' has a new `--enable-cond-regexp' option (enabled by default)
to enable the =~ operator and regexp matching in [[ ... ]].

ee. Subexpressions matched by the =~ operator are placed in the new
BASH_REMATCH array variable.

ff. New `failglob' option that causes an expansion error when pathname
expansion fails to produce a match.

gg. New `set -o pipefail' option that causes a pipeline to return a failure
status if any of the processes in the pipeline fail, not just the last

4. New Features in Readline

a. History expansion has a new `a' modifier equivalent to the `g' modifier
for compatibility with the BSD csh.

b. History expansion has a new `G' modifier equivalent to the BSD csh `g'
modifier, which performs a substitution once per word.

c. All non-incremental search operations may now undo the operation of
replacing the current line with the history line.

d. The text inserted by an `a' command in vi mode can be reinserted with

e. New bindable variable, `show-all-if-unmodified'. If set, the readline
completer will list possible completions immediately if there is more
than one completion and partial completion cannot be performed.

f. There is a new application-callable `free_history_entry()' function.

g. History list entries now contain timestamp information; the history file
functions know how to read and write timestamp information associated
with each entry.

h. Four new key binding functions have been added:


This document details the changes between this version, bash-2.05b-release,
and the previous version, bash-2.05b-beta2.

1. Changes to Bash

a. Fixed an off-by-one error in the function that translates job

b. Note that we're running under Emacs and disable line editing if
$EMACS == `t'.

This document details the changes between this version, bash-2.05b-beta2,
and the previous version, bash-2.05b-beta1.

1. Changes to Bash

a. Fixed the /= and %= arithmetic operators to catch division by zero.

b. Added putenv, setenv, unsetenv to getenv replacement for completeness.

c. Fixed a bug that could cause the -O expand_aliases invocation option
to not take effect.

d. Fixed a problem with process substitution that resulted in incorrect
behavior when the number of process substitutions in an individual
command approached 64.

2. Changes to Readline

a. Fixed a problem with backward-char-search when on a system with support
for multibyte characters when running in a locale without any multibyte

This document details the changes between this version, bash-2.05b-beta1,
and the previous version, bash-2.05b-alpha1.

1. Changes to Bash

a. Fixed a problem when parsing a POSIX.2 character class name while
evaluating a bracket expression containing multibyte characters.

b. Changed the help text for `bind' to make it clear that any command
that may be placed in ~/.inputrc is a valid argument to `bind'.

c. Added `help' builtin entries for `((', `[[', and arithmetic for.

d. malloc updated again:
o slightly better overflow and underflow detection by putting the
chunk size at the beginning and end of the chunk and making
sure they match in free/realloc
o partial page allocated to make things page-aligned no longer
completely wasted
o block coalescing now enabled by default
o splitting and coalescing enabled for 32-byte chunks, the most
common size requested
o fixed a problem that resulted in spurious underflow messages and
o bin sizes are precomputed and stored in an array rather than
being computed at run time
o malloc will return memory blocks back to the system if the block
being freed is at the top of the heap and of sufficient size to
make it worthwhile
o malloc/free/realloc now inline memset instead of calling the
libc function; uses Duff's device for good performance

e. Check for getservent(); make the service name completion code dependent
on its presence.

f. Changed the readline callback that executes a command bound to a key
sequence to not save the executed command on the history list and to
save and restore the parsing state.

g. Changes to lib/sh/snprintf.c: fixed some bugs in the `g' and `G'
floating point format display; implemented the "'" flag character
that turns on thousands' grouping; fixed behavior on systems where
MB_CUR_MAX does not evaluate to a constant.

h. The `unset' builtin no longer returns a failure status when asked to
unset a previously-unset variable or function.

i. Changes to the build system to make it easier to cross-compile bash
for different systems.

j. Added `,' to the characters that are backslash-escaped during filename
completion, to avoid problems with complete-into-braces and RCS filenames
containing commas.

k. Some changes to the multibyte character support code to avoid many calls
to strlen().

l. Bash now correctly honors setting LANG to some value when LC_ALL does not
already have a value.

m. Fixed a bug that could cause SIGSEGV when processing nested traps with
trap handlers.

n. The `source/.' builtin now restores the positional parameters when it
returns unless they were changed using the `set' builtin during the file's

o. Fixed a bug that caused a syntax error when a command was terminated by

2. New Features in Bash

a. There is now support for placing the long help text into separate files
installed into ${datadir}/bash. Not enabled by default; can be turned
on with `--enable-separate-helpfiles' option to configure.

b. All builtins that take operands accept a `--' pseudo-option, except

c. The `echo' builtin now accepts \0xxx (zero to three octal digits following
the `0') in addition to \xxx (one to three octal digits) for SUSv3/XPG6/
POSIX.1-2001 compliance.

3. Changes to Readline

a. Fixed a small problem in _rl_insert_char with multibyte characters.

b. Fixes from IBM for line wrapping problems when using multibyte characters.

c. Fixed a problem which caused the display to be messed up when the last
line of a multi-line prompt (possibly containing invisible characters)
was longer than the screen width.

d. Fixed a problem with the vi-mode `r' command that ocurred on systems with
support for multibyte characters when running in a locale without any
multibyte characters.

This document details the changes between this version, bash-2.05b-alpha1,
and the previous version, bash-2.05a-release.

1. Changes to Bash

a. Some changes to work around inlining differences between compilers.

b. Added more prototypes for internal shell typedefs, to catch argument
passing errors when using pointers to functions.

c. The `cd' builtin now fails in posix mode when a valid directory cannot be
constructed from a relative pathname argument and the $PWD using pathname
canonicalization, and the -P option has not been supplied. Previously,
the shell would attempt to use what the user typed, leading to weird
values for $PWD and discrepancies between the value of $PWD and the
actual working directory.

d. The `cd' builtin now resets $PWD when canonicalization fails but a chdir
to the pathname passed as an argument succeeds (when not in posix mode).

e. The `fc' builtin has been fixed, as POSIX requires, to use the closest
history position in range when given an out-of-range argument.

f. The history file loading code was changed to allow lines to be saved in
the history list from the shell startup files.

g. `history -s args' now works better in compound commands.

h. The tilde expansion code was fixed to better recognize when it's being
invoked in an assignment context, which enables expansion after `='
and `:'.

i. Fixed the command name completion code so a slash is no longer appended
to a single match if there happens to be a directory with that name in

j. Fixed compound array assignment to no longer perform alias expansion, to
allow reserved words as array members, and to not produce extra output
when the `-v' option had been enabled.

k. Fixed the programmable completion code to better handle newlines in lists
of possible completions (e.g., `complete -W').

l. Removed the reserved words from the `bash-builtins' manual page.

m. Parser error reporting now attempts to do a better job of identifying the
token in error rather than doing straight textual analysis.

n. Fixes for Inf/NaN, locales, wide/multibyte characters and zero-length
arguments in the library snprintf(3) replacement.

o. `read -e' no longer does command name completion on the first word on
the line being read.

p. `select' now returns failure if the read of the user's selection fails.

q. Fixed a bug that could cause a core dump when setting $PIPESTATUS.

r. Fixes to not allocate so many job slots when the shell is running a loop
with job control enabled in a subshell of an interactive shell.

s. Fixed a bug in the trap code that caused traps to be inherited by
command substitutions in some cases.

t. Fixed a bug that could cause alias expansion to inappropriately expand
the word following the alias.

u. Fixed a bug in the `kill' builtin that mishandled negative pid arguments.

v. The parser is less lenient when parsing assignment statements where the
characters before the `=' don't comprise a valid identifier.

w. The arithmetic expression evaluation code now honors the setting of the
`-u' option when expanding variable names.

x. Fixed the arithmetic evaluation code to allow array subscripts to be
assigned (`let b[7]=42') and auto-incremented and auto-decremented
(e.g., b[7]++).

y. Reimplemented the existing prompt string date and time expansions using
strftime(3), which changed the output of \@ in some locales.

z. Fixed a bug that could cause a core dump when a special shell variable
(like RANDOM) was converted to an array with a variable assignment.

aa. Fixed a bug that would reset the handler for a signal the user had
trapped to a function that would exit the shell when setting the exit
trap in a non-interactive shell.

bb. Changed the execve(2) wrapper code to check whether or not a failing
command is a directory before looking at whether a `#!' interpreter
failed for some reason.

cc. Fixed a bug in the command printing code so it no longer inserts a `;'
after a newline, which produces a syntax error when reused as input.

dd. The code that expands $PS4 no longer inherits the `-x' flag.

ee. The bash-specific completion functions may now take advantage of the
double-TAB and M-? features of the standard readline completion

ff. The mail checking code no longer prints a message if the checked file's
size has not increased, even if the access time is less than the modification time.

gg. Rewrote the variable symbol table code: there is now a stack of
contexts, each possibly including a separate symbol table; there can
be more than one temporary environment supplied to nested invocations
of `./source'; the temporary environments no longer require so much
special-case code; shell functions now handle the temporary environment
and local variables more consistently; function scope exit is faster now
that the entire symbol table does not have to be traversed to dispose of
local variables; it is now easier to push vars from the temporary
environment to the shell's variable table in posix mode; some duplicated
code has been removed.

hh. Regularized the error message printing code; builtin_error is now called
more consistently, and common error message strings are handled by small
functions. This should make eventual message translation easier.

ii. Error messages now include the line number in a script when the shell
is not interactive.

jj. Array subscript expansion now takes place even when the array variable is
unset, so side effects will take place.

kk. Fixed a bug in the SICGHLD child-reaping code so that it won't find
jobs already marked as terminated if the OS reuses pids quickly enough.

ll. Fixed a bug that could cause a signal to not interrupt the `wait'
builtin while it was waiting for a background process to terminate.

mm. A couple of changes to make it easier for multiple shells to share history
files using `history -n', `history -r', and `history -w'.

nn. The `getopts' builtin always increments OPTIND to point to the next
option to be handled when an option is returned, whether it's valid
or not, as POSIX 1003.x-2001 requires.

oo. Changed some parts of the expansion code to avoid allocating and
immediately freeing memory without using the results for anything.

pp. The shell now keeps track of $IFS internally, updating its internal map
each time the variable is assigned a new value (or at local scope exit).
This saves thousands of hash lookups for IFS, which, while individually
cheap, add up.

qq. Rewrote the hash table code: searching and insertion are much faster now,
and it uses a better string hashing function; augmented the function
interface to simplify other parts of the code and remove duplicated code

rr. The shell now uses a simple, generic `object cache' for allocating and
caching words and word lists, which were the major users of

ss. Fixed the assignment statement parsing code to allow whitespace and
newlines in subscripts when performing array element assignment.

tt. The shell now issues many fewer calls to sigprocmask and other signal
masking system calls.

uu. Fixed the `test' and conditional command file comparison operators to
work right when one file has a non-positive timestamp and the other
does not exist.

vv. Fixed some cases where the special characters '\001' and '\177' in the
values of variables or positional parameters caused incorrect expansion

2. Changes to Readline

a. Fixed output of comment-begin character when listing variable values.

b. Added some default key bindings for common escape sequences produced by
HOME and END keys.

c. Fixed the mark handling code to be more emacs-compatible.

d. A bug was fixed in the code that prints possible completions to keep it
from printing empty strings in certain circumstances.

e. Change the key sequence printing code to print ESC as M\- if ESC is a
meta-prefix character -- it's easier for users to understand than \e.

f. Fixed unstifle_history() to return values that match the documentation.

g. Fixed the event loop (rl_event_hook) to handle the case where the input
file descriptor is invalidated.

h. Fixed the prompt display code to work better when the application has a
custom redisplay function.

i. Changes to make reading and writing the history file a little faster, and
to cope with huge history files without calling abort(3) from xmalloc.

j. The vi-mode `S' and `s' commands are now undone correctly.

3. New Features in Bash

a. If set, TMOUT is the default timeout for the `read' builtin.

b. `type' has two new options: `-f' suppresses shell function lookup, and
`-P' forces a $PATH search.

c. New code to handle multibyte characters.

d. `select' was changed to be more ksh-compatible, in that the menu is
reprinted each time through the loop only if REPLY is set to NULL.
The previous behavior is available as a compile-time option.

e. `complete -d' and `complete -o dirnames' now force a slash to be
appended to names which are symlinks to directories.

f. There is now a bindable edit-and-execute-command readline command,
like the vi-mode `v' command, bound to C-xC-e in emacs mode.

g. Added support for ksh93-like [:word:] character class in pattern matching.

h. The $'...' quoting construct now expands \cX to Control-X.

i. A new \D{...} prompt expansion; passes the `...' to strftime and inserts
the result into the expanded prompt.

j. The shell now performs arithmetic in the largest integer size the
machine supports (intmax_t), instead of long.

k. If a numeric argument is supplied to one of the bash globbing completion
functions, a `*' is appended to the word before expansion is attempted.

l. The bash globbing completion functions now allow completions to be listed
with double tabs or if `show-all-if-ambiguous' is set.

m. New `-o nospace' option for `complete' and `compgen' builtins; suppresses
readline's appending a space to the completed word.

n. New `here-string' redirection operator: word.

o. When displaying variables, function attributes and definitions are shown
separately, allowing them to be re-used as input (attempting to re-use
the old output would result in syntax errors).

p. There is a new configuration option `--enable-mem-scramble', controls
bash malloc behavior of writing garbage characters into memory at
allocation and free time.

q. The `complete' and `compgen' builtins now have a new `-s/-A service'
option to complete on names from /etc/services.

r. `read' has a new `-u fd' option to read from a specified file descriptor.

s. Fix the completion code so that expansion errors in a directory name
don't cause a longjmp back to the command loop.

t. Fixed word completion inside command substitution to work a little more

u. The `printf' %q format specifier now uses $'...' quoting to print the
argument if it contains non-printing characters.

v. The `declare' and `typeset' builtins have a new `-t' option. When applied
to functions, it causes the DEBUG trap to be inherited by the named
function. Currently has no effect on variables.

w. The DEBUG trap is now run *before* simple commands, ((...)) commands,
[[...]] conditional commands, and for ((...)) loops.

x. The expansion of $LINENO inside a shell function is only relative to the
function start if the shell is interactive -- if the shell is running a
script, $LINENO expands to the line number in the script. This is as
POSIX-2001 requires.

y. The bash debugger in examples/bashdb has been modified to work with the
new DEBUG trap semantics, the command set has been made more gdb-like,
and the changes to $LINENO make debugging functions work better. Code
from Gary Vaughan.

z. New [n]&word- and [n]&word- redirections from ksh93 -- move fds (dup
and close).

aa. There is a new `-l' invocation option, equivalent to `--login'.

bb. The `hash' builtin has a new `-l' option to list contents in a reusable
format, and a `-d' option to remove a name from the hash table.

4. New Features in Readline

a. Support for key `subsequences': allows, e.g., ESC and ESC-a to both
be bound to readline functions. Now the arrow keys may be used in vi
insert mode.

b. When listing completions, and the number of lines displayed is more than
the screen length, readline uses an internal pager to display the results.
This is controlled by the `page-completions' variable (default on).

c. New code to handle editing and displaying multibyte characters.

d. The behavior introduced in bash-2.05a of deciding whether or not to
append a slash to a completed name that is a symlink to a directory has
been made optional, controlled by the `mark-symlinked-directories'
variable (default is the 2.05a behavior).

e. The `insert-comment' command now acts as a toggle if given a numeric
argument: if the first characters on the line don't specify a
comment, insert one; if they do, delete the comment text

f. New application-settable completion variable:
rl_completion_mark_symlink_dirs, allows an application's completion
function to temporarily override the user's preference for appending
slashes to names which are symlinks to directories.

g. New function available to application completion functions:
rl_completion_mode, to tell how the completion function was invoked
and decide which argument to supply to rl_complete_internal (to list
completions, etc.).

h. Readline now has an overwrite mode, toggled by the `overwrite-mode'
bindable command, which could be bound to `Insert'.

i. New application-settable completion variable:
rl_completion_suppress_append, inhibits appending of
rl_completion_append_character to completed words.

j. New key bindings when reading an incremental search string: ^W yanks
the currently-matched word out of the current line into the search
string; ^Y yanks the rest of the current line into the search string,
DEL or ^H deletes characters from the search string.

This document details the changes between this version, bash-2.05a-release,
and the previous version, bash-2.05a-rc1.

1. Changes to Bash

a. Fixed the `printf' builtin so that the variable name supplied as an
argument to a %n conversion must be a valid shell identifier.

b. Improved the random number generator slightly.

c. Changes to configuration to not put -I/usr/include into $CFLAGS, since
it messes up some includes.

d. Corrected description of POSIXLY_CORRECT in man page and info manual.

e. Fixed a couple of cases of incorrect function prototypes that sneaked
through and caused compilation problems.

f. A few changes to avoid potential core dumps in the programmable completion

g. Fixed a configure problem that could cause a non-existent file to show
up in LIBOBJS.

h. Fixed a configure problem that could cause siglist.o to not be built when

i. Changes to the strtoimax and strtoumax replacement functions to work
around buggy compilers.

j. Fixed a problem with the snprintf replacement function that could
potentially cause a core dump.

2. Changes to Readline

a. Fixed a locale-specific problem in the vi-mode `goto mark' command.

b. Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause
include file problems.

This document details the changes between this version, bash-2.05a-rc1,
and the previous version, bash-2.05a-beta1.

1. Changes to Bash

a. Fixed the snprintf replacement to correctly implement the `alternate form'
of the %g and %G conversions.

b. Fixed snprintf to correctly handle the optional precision with the %g and
%G conversions.

c. Fixed the arithmetic evaluation code to correct the values of `@' and `_'
when translating base-64 constants (they were backwards).

d. New library functions for formatting long and long long ints.

e. Fixed a few places where negative array subscripts could have occurred,
mostly as the result of systems using signed characters.

f. Fixed a few places that assumed a pid_t was no wider than an int.

g. Fixed the `maildir' mail checking code to work on systems where a
`struct stat' doesn't include an `st_blocks' member.

h. Fixed snprintf to make `unsigned long long' conversion formats (%llu)
work better.

i. Fixed snprintf to not print a sign when asked to do an unsigned conversion.

j. Made configure changes to avoid compiling empty source files in lib/sh.

k. New replacement functions (if necessary) for strtoull, strtoll, strtoimax,

l. The `printf' builtin now handles the `ll' and `j' length modifiers
directly, since they can affect the type and width of the argument
passed to printf(3).

m. Renamed a number of the bash-specific autoconf macros in aclocal.m4 to
have more sytematic naming, with accompanying changes to configure.in.

n. Fixed snprintf to handle long doubles and the %a/%A conversions by
falling back to sprintf, as long as sprintf supports them.

o. Fixed return value from vsnprintf/snprintf to be the number of characters
that would have been printed, even if that number exceeds the buffer
size passed as an argument.

p. Bash no longer attempts to define its own versions of some ctype macros
if they are implemented as functions in libc but not as macros in

q. Changed the variable printing code (used by `set', `export', etc.) to
not use the $'...' syntax when in posix mode, since that caused
interoperability problems with other shells (most notably with autoconf).
When not in posix mode, it uses $'...' if the string to be printed
contains non-printing characters and regular single quotes otherwise.

r. snprintf now recognizes the %F conversion.

s. Fixed a bug that could cause the wrong status to be returned by a shell
function when the shell is compiled without job control and a null
command containing a command substutition was executed in the function.

t. When in posix mode, the default value for MAILCHECK is 600.

u. Bash only initializes FUNCNAME, GROUPS, and DIRSTACK as special variables
if they're not in the initial environment.

v. If SECONDS appears in the initial environment with a valid integer value,
bash uses that as the starting value, as if an assignment had been

w. Bash no longer auto-exports HOME, PATH, SHELL, or TERM, even though it
gives them default values if they don't appear in the initial environment.

x. Bash no longer auto-exports HOSTNAME, HOSTTYPE, MACHTYPE, or OSTYPE,
even if it assigns them default values.

y. Bash no longer removes the export attribute from SSH_CLIENT or SSH2_CLIENT
if they appear in the initial environment.

z. Bash no longer attempts to discover if it's being run by sshd in order to
run the startup files. If the SSH_SOURCE_BASHRC is uncommented in
config-top.h it will attempt to do so as previously, but that's commented
out in the distributed version.

aa. Fixed a typo in the code that tests for LC_NUMERIC.

bb. The POSIXLY_CORRECT shell variable and its effects are now documented.

cc. Some changes to several of the support shell scripts included in the
definitions to try to avoid race conditions and attacks.

dd. Several changes to avoid warnings from `gcc -Wall'.

ee. Fixed a problem with the `unset' builtin that could cause incorrect
results if asked to unset a variable and an array subscript in the
same command.

ff. A few changes to the shell's temporary file creation code to avoid
potential file descriptor leaks and to prefer the system's idea of
the temporary directory to use.

gg. Fixes to build with the C alloca in lib/malloc/alloca.c if the system
requires it but the shell has been configured --without-bash-malloc.

hh. Updated the documentation to note that only interactive shells resend
SIGHUP to all jobs before exiting.

ii. Fixes to only pass unquoted tilde words to tilde_expand, rather than
rely on tilde_expand or getpwnam(3) to handle the quotes (MacOS 10.x
will remove backslashes in any login name passed to getpwnam(3)).

jj. Small change from Paul Eggert to make LINENO right in commands run with
`bash -c'.

2. New Features in Bash

a. The `printf' builtin now handles the %a and %A conversions if they're
implemented by printf(3).

b. The `printf' builtin now handles the %F conversion (just about like %f).

c. The `printf' builtin now handles the %n conversion like printf(3). The
corresponding argument is the name of a shell variable to which the
value is assigned.

3. Changes to Readline

a. Fixed a few places where negative array subscripts could have occurred.

b. Fixed the vi-mode code to use a better method to determine the bounds of
the array used to hold the marks.

c. Fixed the defines in chardefs.h to work better when chars are signed.

d. Fixed configure.in to use the new names for bash autoconf macros.

e. Readline no longer attempts to define its own versions of some ctype
macros if they are implemented as functions in libc but not as macros in

f. Fixed a problem where rl_backward could possibly set point to before
the beginning of the line.

This document details the changes between this version, bash-2.05a-beta1,
and the previous version, bash-2.05a-alpha1.

1. Changes to Bash

a. Fixed a bug in the evalution of arithmetic `for' statements when the
expanded expression is NULL.

b. Fixed an unassigned variable problem in the redirection printing code.

c. Added more prototypes to extern function declarations in the header
files and to static function declarations in C source files.

d. Make sure called functions have a prototype in scope, to get the arguments
and return values right instead of casting. Removed extern function
declarations from C source files that were already included in header

e. Changed some function arguments to use function typedefs in general.h so
the prototypes can be checked. The only use of Function and VFunction
now is for unwind-protects.

f. More const changes to function arguments and appropriate variables.

g. Changed the mail checking support to handle `maildir'-style mail

h. Augmented the bash malloc to pass in the file and line number information
for each malloc, realloc, and free. This should result in better error

i. The `old' gnu malloc is no longer a configuration option.

j. Augmented the bash malloc with optional tracing and registering allocated
and freed memory.

k. Prompt string decoding now saves and restores the value of $? when it
expands the prompt string, so command substitutions don't change $?.

i. Array indices are now `long', since shell arithmetic is performed as long,
and the internal arrayind_t type is used consistently.

j. Some more `unsigned char *' fixes from Paul Eggert.

k. Fixed a bad call to builtin_error that could cause core dumps when making
local variables.

l. `return' may no longer be used to terminate a `select' command, for
compatibility with ksh.

m. Changed code that reads octal numbers to do a better job of detecting

n. The time formatting code no longer uses absolute indices into a buffer,
because the buffer size changes depending on the size of a `time_t'.

o. `umask' now prints four digits when printing in octal mode, for
compatibility with other shells.

p. Lots of changes to the `printf' builtin from Paul Eggert: it handles `L'
formats and long doubles better, and internal functions have been
simpified where appropriate.

q. Some `time_t' fixes for machines were a time_t is bigger than a long.

r. Replaced some bash-specific autoconf macros with standard equivalents.

s. Improvmed the code that constructs temporary filenames to make the
generated names a bit more random.

t. Added code that checks for ascii before calling any of the is* ctype

u. Changed some places where a `char' was used as an array subscript to use
`unsigned char', since a `char' can be negative if it's signed by default.

v. Lots of changes to the `ulimit' builtin from Paul Eggert to add support
for the new POSIX-200x RLIM_SAVED_CUR and RLIM_SAVED_MAX values and
simplify the code.

w. `ulimit' now prints the description of a resource in any error message
relating to fetching or setting that resource's limits.

x. The `snprintf' replacement now computes maximum values at compile
time rather than using huge constants for things like long long.

y. Interactive shells now ignore `set -n'.

z. Changed the malloc bookkeeping information so that it's now 8 bytes
instead of 12 on most 32-bit machines (saving 4 bytes per allocation),
restoring 8-byte alignment.

aa. The malloc error reporting code now attempts to print the file and line
number of the call that caused the error.

bb. Changed the redirection error reporting code to catch EBADF errors and
report the file descriptor number rather than the file being redirected
to or from (e.g., things like `exec 4242x' where 4242 is an out-of-range
file descriptor).

cc. `printf', `echo -e', and the $'...' code now process only two hex digits
after a `\x' escape sequence for compatibility with other shells, and
the documentation was changed to note that the octal and hex escape
sequences result in an eight-bit value rather than strict ASCII.

2. Changes to Readline

a. The completion code now attempts to do a better job of preserving the
case of the word the user typed if ignoring case in completions.

b. Readline defaults to not echoing the input and lets the terminal
initialization code enable echoing if there is a controlling terminal.

c. The key binding code now processes only two hex digits after a `\x'
escape sequence, and the documentation was changed to note that the
octal and hex escape sequences result in an eight-bit value rather
than strict ASCII.

3. New Features in Bash

a. The builtin `ulimit' now takes two new non-numeric arguments: `hard',
meaning the current hard limit, and `soft', meaning the current soft
limit, in addition to `unlimited'

b. `ulimit' now prints the option letter associated with a particular
resource when printing more than one limit.

c. `ulimit' prints `hard' or `soft' when a value is not `unlimited' but is
one of RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively.

4. New Features in Readline

a. New bindable variable `history-preserve-point'. If set, the history
code attempts to place the user at the same location on each history
line retrived with previous-history or next-history.

This document details the changes between this version, bash-2.05a-alpha1,
and the previous version, bash-2.05-release.

1. Changes to Bash

a. Better checks in the redirection code for write errors.

b. bashbug now uses $TMPDIR, defaulting to /tmp, and uses mktemp(1) more

c. System-specific configuration changes for: Interix, OpenBSD, FreeBSD,
MacOS X.

d. Some more `const' cleanups through the code.

e. Fixed a typo in the /dev/fd redirection code, better checks for valid
numeric fds in /dev/fd.

f. Fixed many parts of the shell to handle integer overflow more gracefully
and to do more stringent checks for valid numbers.

g. Fixed mksignames to include config.h.

h. Fixed an uninitialized variable problem that could cause the shell to core
dump when replacing characters in a string.

i. New mechanism for updating the patch level when official patches are
released (patchlevel.h).

j. configure.in changed to no longer require external files _distribution and

k. Fixed non-interactive shell initialization problem when bash started as
`bash -i filename'.

l. Fixed printf builtin conversion error handling to be POSIX.2-conformant.

m. autoconf-2.52 is now used to build configure; autoconf-2.50 or newer is
required. Some of the bash-specific macros were removed, since they are
now standard.

n. Startup files and files read with source or `.' are no longer required to
be regular files.

o. Fixed core dump in builtin printf when user-supplied precision or field
width is 0.

p. Fixed builtin printf to treat a negative field width as a positive field
width with left-justification.

r. New unwind-protect implementation from Paul Eggert.

s. Fixed an inadvertently-unclosed comment in the bash completion code that
caused programmable completions to not add trailing slashes or spaces to

t. Fixed the process substitution code to cope better when stdin is closed.

v. Fixes, mostly from Paul Eggert, for a few possible buffer overflows in
the shell.

w. Fixes from Paul Eggert to avoid most of the type casts in the shell code,
and use more appropriate types for a number of variables.

x. Command substition no longer inherits the DEBUG trap.

y. Some fixes to the process substition code on machines without /dev/fd so
that named pipes are not removed inappropriately.

z. The loadable `getconf' builtin is now much more complete, and will become
part of the shell in the future.

aa. The select command no longer terminates on a `return', so it can be used
to return from an enclosing function (as ksh does it).

bb. Fixed the extended pattern matching code to behave better when presented
with incorrectly-formed patterns.

cc. Some changes were made with the intent of making cross-compilation easier.

dd. The network code (/dev/tcp and /dev/udp redirections) uses getaddrinfo(3)
if it's available, which adds support for IPv6.

ee. Subshells of login shells no longer source ~/.bash_logout when they exit.

ff. Fixes so that subshells don't exit inappropriately if the -e option has
been set.

gg. Restricted shells no longer allow functions to be exported.

hh. Changes to the pattern matching code so extended pattern matching works
on systems with deficient shared library implementations, like MacOS X.

ii. Better error messages when a script with a leading `#!interp' fails
to execute because of problems with `interp'.

jj. Fixed `compgen' to handle the `-o default' option better.

kk. Fixed the job control code to force an asynchronous process's standard
input to /dev/null only if job control is not active.

ll. Fixed a possible infinite recursion problem when `fc ""=abc' (a null
pattern) is used to re-execute a previous command.

mm. Fixed `declare [-a] var=value' to assign VALUE to el
  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded