NetBSD's ash (Almquist sh) for Linux
====================================

Version of this Linux port: 0.2
This version can be found on ftp.sbusol.uni-sb.de(134.96.7.7) in the
directory /pub/Linux/local/florian.

I took from the NetBSD-current release as of 93/09/18 the source code
of ash. Then I applied again the Linux patches. This will hopefully
fix some bugs.

ash is a Bourne compatible shell. It is without job control only 62K.
The slackware distribution has shown, that such a small shell can be usefull
for a good bootdisk. But I don't think, this shell is good for interactive
use. Take other shells like bash, ksh or tcsh for that.
Also bash 1.13 is now much better than 1.12...

If you have problems and you can give me an exact bug report, I will have
a look into ash. I will also keep a look at the NetBSD people.
If someone else wants to do more work on ash, I could pass on all the email
messages about ash I got from Arjan. Maybe this will help a little bit.


Florian  La Roche     flla@stud.uni-sb.de  or  rzsfl@sbusol.uni-sb.de



Known bugs in NetBSD's ash or the Linux ports.
==============================================

* There are bug reports, that 'ash' will hang, if invoked from 'cron' or
  in '/etc/rc'. I am not sure, if this is still true.

* The following code from trn 3.2's Pnews script gives a non-empty
  $moderator variable for all newsgroups (even the non-moderated ones).
  bash gives an empty $moderator for non-moderated groups.

  ---------------------------------------------------------------------------
		for newsgroup in $*; do
  # the following screwy sed should prevent Eunice from hanging on no match
		    moderator=`$sed <$lib/moderators \
		    -e "/^$newsgroup[ 	]/!s/.*//" \
		    -e "s/^$newsgroup[ 	]//"`
		    case ${moderator}X in
		    X)  tryinews=yes
			;;
		    *)
			$echo Mailing to moderator $moderator
  ---------------------------------------------------------------------------



History of NetBSD's ash for Linux
=================================


* Version 0.2 released by Florian La Roche

- I took a newer version from NetBSD-current (93/09/18) and applied again the
  patches for Linux. Maybe this fixes some errors.


* Version 0.1 released August 21, 1993 devet@adv.win.tue.nl

- added builtin test command and -u flag for detecting unset variables
  (patches from Branko Lankester).

- fixed `permission denied' errors when running as root and trying to execute
  executables not owned by root (Branko).

- more fixes, additions and cleanups by Branko.


* Version 0.0 released August 20, 1993 devet@adv.win.tue.nl

- original sources fetched August 10

- patches for Makefile and some other files by Sunando Sen

- chdir() fixes in cd.c and an initial signal(SIGCHLD,SIG_DFL) in main.c


The patches are based on Sunando Sen's <sens@fasecon.econ.nyu.edu>
patches with further fixes suggested by Linus Torvalds, Branko Lankester
and Alan Cox.


Branko Lankester:	branko@hacktic.nl
Sunando Sen:		sens@fasecon.econ.nyu.edu
Arjan de Vet:		devet@adv.win.tue.nl
Florian La Roche:       flla@stud.uni-sb.de  or rzsfl@sbusol.uni-sb.de

