This file details the changes between the previous release of bash (1.13.5) and this release (1.14.0). 1. New Features in Bash a. The source has been reorganized: nearly all extern function declarations have been moved to header files, function prototypes have been added to most header files, function declarations have been moved to file scope, dead code has been removed, the bash history code has been isolated in bashhist.[ch], and several new header files have been created b. `set -o posix' puts bash into Posix.2 mode c. If $POSIX_PEDANTIC exists in the initial environment or is assigned a value, bash enters Posix.2 mode d. Bash sets $OSTYPE to a string describing the UNIX version e. The features.info file was completely rewritten and now reflects the current state of things f. A manual page for readline is in documentation/readline.{3,ps} g. The test builtin emulates /dev/fd/x for systems without /dev/fd h. `dirs' has -n and +n options to access members of the directory stack i. Prompt string expansion handles invisible characters in the prompt; \[ and \] are used (and required) to start and end sequences of invisible chars j. NO_PROMPT_VARS has been removed k. New machine descriptions have been added: IBM AIX/ESA, NEC EWS, NetBSD, FreeBSD, QNX 4.2, concurrent, MIPS SVR4.2, Lynx 2.1 l. RESTRICTED_SHELL is no longer defined by default in config.h m. The version string in $BASH_VERSION has changed to dist.patch(build) n. $history_control has been renamed to $HISTCONTROL and now takes the value `ignoreboth' ($history_control is still accepted for backwards compatibility) o. There is a new program `bashbug' for reporting bugs. Eventually I will probably switch to gnats. p. auto_resume can take the values `exact' and `substring' q. `set -P' (`set -o physical') enables the same physical view of the file system that `nolinks' enables (`nolinks' will remain for one more release) r. There is a `mkmachtype' program to generate a GNU-style machine type string (e.g., `sparc-sun-sunos4.1.2') suitable for assigning to $MACHTYPE s. The variable $HISTCMD returns the current history number t. Variables in directory names are now expanded while doing completion u. The test suite has been expanded and is runnable as a regression test with `make tests' v. `bye' is no longer a builtin synonym for `exit' w. The ksh `select' control construct has been implemented x. The `ignoreeof' attribute can be inherited if $IGNOREEOF is exported y. The `USG-style' echo is now a configuration option. Define DEFAULT_ECHO_TO_USG for default \-interpretation without the -e flag z. There is a copy of an article I wrote about bash for the Linux Journal in documentation/article.{ms,ps} aa. The `pwd' builtin now obeys the setting of `set -o physical' (`nolinks') bb. Process substitution is no longer performed when the shell is in `posix mode' cc. Users may change the debugging and optimization flags to cc by specifying CFLAGS to make 2. New Features in Readline a. Readline now understands sequences of invisible characters in the prompt string, as long as they are escaped (e.g., by the bash \[ and \] escapes) b. A `set keymap' variable assignment c. A `bell-style' variable that can be set to `visible', `audio', or `none' d. A `show-all-if-ambiguous' variable, which causes non-unique completion to immediately list the possible completions e. An `output-meta' variable to make readline directly output chars with the eighth bit set f. New bindable readline commands: kill-whole-line, tilde-expand, vi-redo, vi-tilde-expand, emacs-editing-mode, non-incremental-forward-search-history-again, non-incremental-reverse-search-history-again g. New history-search-forward and history-search-backward to search for the characters between the start of the current line and point h. Readline takes the name of the startup file from the INPUTRC variable before defaulting to ~/.inputrc i. isearch no longer finds identical lines multiple times in succession j. M-C-H bound to backward-kill-word in emacs mode k. M-~ bound to tilde-expand in emacs mode l. History expansion is now fully csh-compatible: missing modifiers and substitutions have been added, and bugs fixed m. When asking whether or not to display the possible completions, readline now accepts space as equivalent to `y' and rubout for `n' n. Readline now attempts to find and bind the arrow keys into the vi mode movement keymap 3. Bugs fixed in Bash a. Portability fixes: `index' and `rindex' are gone completely, many OS-specific defines have been replaced with feature-test macros, the use of alloca has been reduced, and other platform-specific fixes (e.g. cray) have been made b. The man page has been fixed up and brought up to date c. Speed improvements: here documents, variable expansion, history expansion, command substitution d. If history is stifled, the history list replaces the history file at exit e. Asynchronous jobs re-run with fc -s now print the job number f. Output redirections do not perform filename expansion in Posix.2 mode when the shell is not interactive g. operate_and_get_next now works on the most recent line even if the history is unstifled h. $PROMPT_COMMAND execution no longer causes recursive invocations of yyparse() i. An error message is printed if job control initialization fails j. A command found in $PATH from the temporary environment is not hashed k. Errors display the name of the script if the shell is not interactive l. Fixed expression evaluation so blank expressions return 0 m. Fixed a bug that caused SIGINT and SIGQUIT not to be ignored in some asynchronous children n. Pipes used for /dev/fd process substitution are now closed on errors o. Fixed /dev/null redirection so that ( list ) subshells inherit the `stdin-has-been-redirected' flag as in sh p. Process substitution now works only when unquoted q. Fixed a bug where the async flag was added inappropriately in a command like `a;b;c;d &' r. Fixed off-by-one bug which caused negative history offsets in `fc' to be wrong s. Shell now remembers mail dates at startup on all systems t. Posix systems without job control no longer create so many zombies u. $ENV is now sourced by shells forked to execute scripts without a leading `#!' line v. Non-root users can now use the `unlimited' argument to ulimit and have the resource value set to the hard limit w. Made bash more sh-compatible by assigning the first argument after `-c command' to $0 x. Fixed mail checking bug to note that *new* mail has arrived y. Fixed off-by-one error in mailcheck.c:free_mail_files() z. Fixed a bug where command strings passed to `bash -c' would be truncated after executing the first disk command in the string aa. Fixed a bug which caused redirections passed to executable commands with input or output pipes to be closed before the command was executed bb. Fixed a bug which caused bash to search for files supplied on the command line in the $PATH if the initial open failed, even if the names contained a slash cc. The initial argument parsing was fixed up so that other options can be supplied with -c (that is, `sh -ec command' now works as make intends), and so `bash -o' lists all the shell options at startup. dd. Error messages are consistently prefixed with the name of the shell or shell script when non-interactive. ee. Fixed up a problem with the `read' builtin that occurred when more variables than arguments were supplied. ff. Unset the variables passed to `read' as arguments when EOF is read from stdin (sh, Posix.2 compatibility). gg. Fixes to the command printing code to make the output of `type' available as legal shell input. ii. Fixes so that command completion is attempted after all of the shell command separator characters. jj. Fixes to the shell completion code so that it handles quoted characters and substrings better. kk. Bash no longer looks through $PATH for a shell script passed as an argument if the name contains slashes. ll. Bash now checks that the `name' in a `name[=value]' argument to `declare' (and thus `typeset', `export', and `readonly') is a legal shell variable name. 4. Bugs fixed in Readline a. The ^W and ^U bindings in non-incremental search mode have been changed to be closer to what Posix specifies b. Tries to initialize the keypad to enable the arrow keys c. Multiple words are now killed and yanked in the right order d. rl_read_init_file now reads filenames in a more regular order: the last one read, $INPUTRC, then ~/.inputrc e. yank_nth_arg inserts a space in the right place in vi mode f. Fixed a bug in the history library that tried to write to a file opened O_RDONLY g. Binding of `0' in vi command mode is now right h. The VISIBLE_STATS completion listing code now follows symlinks i. Memory allocated with alloca() is no longer passed to other functions j. Error messages are now printed for unrecognized history modifiers k. Fixed a problem with history library and `!#'; now it is more csh-like. l. Fixed a csh incompatibility in the history library: now only an end of line or `?' terminates a ?string history search string. m. Fixed a problem with readline completion that sometimes caused possible matches to be listed one per line when `show-all-if-ambiguous' was set. n. Fixed a problem in the readline display code that caused divide-by-zero errors. o. Fixed an off-by-one error in the kill ring reallocation code.