ANNOUNCE: DJGPP port of GNU Bash 4.2.53 uploaded.

Skip to first unread message

Juan Manuel Guerrero ( [via]

Sep 8, 2022, 1:39:37 PM9/8/22
This is a port of GNU Bash 4.2.53 to MSDOS/DJGPP.

Bash is the GNU Project's Bourne Again SHell, a complete
implementation of the POSIX.2 shell spec, but also with interactive
command line editing, job control on architectures that support it,
csh-like features such as history substitution and brace expansion,
and a slew of other features.

DJGPP specific changes.

- This port is based on the last port of bash to DJGPP (aka
bsh4117b*.zip). It fixes some issues discovered while using it.
Beacuse the bsh4117* port is based on all previous ports of bash,
it implies that all of them are very likely to suffer from the same
issues. Thus all previous ports have been moved to the "deleted"
directory. Their usage is no longer neither supported nor

- The port checks at run time if LFN support is available or not and
selects the file names of temporary files that are created

- This port now supports colorized printing on terminal in the same
fashion as other DJGPP ports like grep and diffutils do.

- The port has been compiled using a C library version compiled from
current repository code. To avoid any nmalloc related issues, the
old malloc functions have been compiled instead of nmalloc.

- There may exist much more DOS specific bugs in this port that have
still not been discovered and that will be fixed as they appear.

- The testsuite is POSIX centric and has not been ported. Especially
assumptions about paths that are POSIX specific make it really
difficult to adjust the testsuite to DOS. Currently the port can
only be tested by using it.
It is also not clear at all if this port does work on FreeDOS and
OpenDos in a reliably way.

- The port has been configured and compiled on WinXP SP3, Win98SE,
MS-DOS 7.10 using DOSLFN 0.41f and MS-DOS 6.22 using DOSLFN 0.41f.
There is no guarantee that this may be possible with any other DOS-
like OS. Due to the use of long file names it will not be possible
to configure and compile without LFN support. The port has been
compiled using gcc346 and bnu2351b.

- The coprocess support and the coproc reserved word have been
disabled. This feature requires special pipe support and this may
be implemented in the future.

- To be able to build this port you may need to have LFN support.

- If NLS support is wanted, then the sources must be reconfigured
passing the nls option to config.bat.

As usual, all djgpp specific files (diffs, README files, etc.) are
stored in the "djgpp" directory. The sources have been configured to
be build in the "0build" directory. If for some reason it does not
work for you, delete its contents and configure from scratch again.

Please read the docs to become familiar with this product.

Here is an extract of the NEWS file showing the user visible changes
from the last port (GNU Bash 4.1.17) to this one:


This is a terse description of the new features added to bash-4.2 since
the release of bash-4.1. As always, the manual page (doc/bash.1) is
the place to look for complete descriptions.

1. New Features in Bash

a. `exec -a foo' now sets $0 to `foo' in an executable shell script
without a leading #!.

b. Subshells begun to execute command substitutions or run shell
functions or builtins in subshells do not reset trap strings until a
new trap is specified. This allows $(trap) to display the caller's
traps and the trap strings to persist until a new trap is set.

c. `trap -p' will now show signals ignored at shell startup, though
their disposition still cannot be modified.

d. $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape

e. declare/typeset has a new `-g' option, which creates variables in
the global scope even when run in a shell function.

f. test/[/[[ have a new -v variable unary operator, which returns
success if `variable' has been set.

g. Posix parsing changes to allow `! time command' and multiple
consecutive instances of `!' (which toggle) and `time' (which have no
cumulative effect).

h. Posix change to allow `time' as a command by itself to print the
elapsed user, system, and real times for the shell and its children.

j. $((...)) is always parsed as an arithmetic expansion first, instead
of as a potential nested command substitution, as Posix requires.

k. A new FUNCNEST variable to allow the user to control the maximum
shell function nesting (recursive execution) level.

l. The mapfile builtin now supplies a third argument to the callback
command: the line about to be assigned to the supplied array index.

m. The printf builtin has a new %(fmt)T specifier, which allows time
values to use strftime-like formatting.

n. There is a new `compat41' shell option.

o. The cd builtin has a new Posix-mandated `-e' option.

p. Negative subscripts to indexed arrays, previously errors, now are
treated as offsets from the maximum assigned index + 1.

q. Negative length specifications in the ${var:offset:length}
expansion, previously errors, are now treated as offsets from the end
of the variable.

r. Parsing change to allow `time -p --'.

s. Posix-mode parsing change to not recognize `time' as a keyword if
the following token begins with a `-'. This means no more Posix-mode
`time -p'. Posix interpretation 267.

t. There is a new `lastpipe' shell option that runs the last command
of a pipeline in the current shell context. The lastpipe option has no
effect if job control is enabled.

u. History expansion no longer expands the `$!' variable expansion.

v. Posix mode shells no longer exit if a variable assignment error
occurs with an assignment preceding a command that is not a special

w. Non-interactive mode shells exit if -u is enabled and an attempt is
made to use an unset variable with the % or # expansions, the `//',
`^', or `,' expansions, or the parameter length expansion.

x. Posix-mode shells use the argument passed to `.' as-is if a $PATH
search fails, effectively searching the current directory. Posix-2008

2. New Features in Readline

a. The history library does not try to write the history filename in
the current directory if $HOME is unset. This closes a potential
security problem if the application does not specify a history filename.

b. New bindable variable `completion-display-width' to set the number
of columns used when displaying completions.

c. New bindable variable `completion-case-map' to cause
case-insensitive completion to treat `-' and `_' as identical.

d. There are new bindable vi-mode command names to avoid readline's
case- insensitive matching not allowing them to be bound separately.

e. New bindable variable `menu-complete-display-prefix' causes the menu
completion code to display the common prefix of the possible
completions before cycling through the list, instead of after.


The port consists of the usual three packages that have been produced
using djdev206 (CVS repository code) and can be downloaded from and mirrors as (time stamp 2022-08-31):

GNU Bash 4.2.53 binary, info and man format documentation:

GNU Bash 4.2.53 dvi, html, pdf and ps format documentation:

GNU Bash 4.2.53 source:

Send GNU Bash specific bug reports to <>.
Send suggestions and bug reports concerning the DJGPP port
to comp.os.msdos.djgpp or <>.


Guerrero, Juan Manuel <>

Reply all
Reply to author
0 new messages