It is available for anonymous FTP from prep.ai.mit.edu in
Because this release is so close to the release of Bash-1.11 I have
also released a diffs file, with instructions on how to use it to
bring your version of Bash-1.11 up to the 1.12 release. The diffs
file is about 60k, while an entire distribution of 1.12 is close to a
This release contains a couple of new files, but is mostly bug fixes
for 1.11. Here is the top of the ChangeLog file from the main
* parse.y, shell.h, new files parser.h and input.h: parser.h
contains all of the structures necessary to parse commands; this
file is included within shell.h. input.h contains definitions and
structures which are used by the parser to read input; this file
is included only by parse.y and builtins/common.c.
* execute_cmd.c (find_user_command_in_path), (extract_colon_unit),
and (user_command_matches): Fix core dumping when Bash encounters
a trailing `:' in $PATH.
* bashline.c (initialize_readline) Fix typo: name of user visible
function is `operate-and-get-next', not `operate_and_get_next'.
* machines.h: (DGUX) Fix typo '_DFOO' -> '-DFOO'.
* execute_cmd.c (do_redirection_internal) Add a workaround for
machines using AFS which exhibit the `AFS create bug'. This code
is conditionalized on "AFS_CREATE_BUG".
* execute_cmd.c (do_redirection_internal) Add an additional step
when calling alloca () for those machines which only allow the
output of alloca () to be assigned to a simple variable.
* execute_cmd.c (execute_command_internal) Free memory allocated
with alloca () on machines where the alloca emulation is being
* jobs.c (drain_output) Remove extra argument to select (). Now
we expect drain_output () to work correctly.
* parse.y: Many functions. New union INPUT_STREAM can contain a
(FILE *) or a (char *). New structure BASH_INPUT contains all of
the information that used to be in globals, namely: the address
of the function to get a character (getter), the address of the
function to unget a character (ungetter), the location from which
to get or unget (INPUT_STREAM)location, the type (type), and the
name of the stream (name). New global structure variable
`bash_input' is the place in which the globals are stored.
* shellc. (initialize_shell) Call initialize_bash_input () to zero
the data structure used by the BASH_INPUT functions.
* parse.y (decode_prompt_string): '\s' now always returns the
base_pathname () of the shell_name.
* shell.c (reader_loop): Make declaration of setjmp () variable
and call for that variable to receive output of setjmp () two
separate statements so that the Cray and other compilers won't
* nojobs.c: Add define for WAITPID which does Posix or non-posix
versions of wait (). Add code to reap zombied children, and call
it when forking fails the first time so we can retry the fork.
* builtins/read.def (read_builtin): Fix bug in -r mode. We use a
new variable called `raw_mode' to control input handling.
* builtins/times.def: Clean up defines.
* builtins/ulimit.def (ulimit_builtin): Fix typos.
* builtins/getopt.c: Include ../config.h if being compiled for
* cpp-Makefile: Remove declaration of DESTDIR and associated
comment. It is passed in from Makefile now.
* Makefile: Pass DESTDIR variable in from Makefile to
* variables.c: (initialize_shell_variables) Set our internal PWD
variable before reading the environment so that if an exported PWD
exists it takes precedence.