Newsgroups: comp.os.coherent Subject: sh clones evaluated (was Re: C News) Organization: Software Tool & Die Netnews Research Center References: <138198@allan.sublink.org> <920725204@umunk.GUN.de> <9207260813.30@rmkhome.UUCP> <1992Jul27.200244.2456@acme.gen.nz> <9207291604.00@rmkhome.UUCP> <9208011403.38@rmkhome.UUCP> I've reevaluated the allegedly-sh-compatible shells I have on hand (sh, bash, ash, zsh and a redistributable ksh). bash seems to have improved since I last looked at it and seems to run inews and subordinates correctly, and passes the diagnostic tests I extracted from inews and anne.jones. ash, zsh and redistributable ksh each fail three of the six tests. This saddens me, as ash is an elegant and relatively small piece of work, whereas bash is bloated and complicated. I've enclosed the test scripts (shx?), driver script (shx) and results (log) below. A couple caveats: shx4 (a quoting test) uses the C News getdate command; there may be newer versions of the shells tested - this evaluation is decidedly informal. Here's a quick summary: sh and bash passed all tests; ash can't parse "<&$fd" and doesn't understand quoting; redistributable ksh dumps core on a newline inside backquotes, doesn't understand quoting, and botches waiting on background processes; zsh doesn't understand sh quoting (in particular, it sees ! as a job control character, even inside quotes), and botches waiting for background processes. # To unbundle, sh this file echo log 1>&2 sed 's/^X//' >log <<'!' X:; ./shx sh: X<&$fd ok nlbq Mon Aug 3 02:45:00 EDT 1992 bang geoff quote 712824302 setbq defmsgid=<1992Aug3.024502.6176@host> bgwait sleep done... wait 6187 bash: X<&$fd ok nlbq Mon Aug 3 02:45:09 EDT 1992 bang geoff quote 712824311 setbq defmsgid=<1992Aug3.024512.6212@host> bgwait sleep done... wait 6223 ash: X<&$fd shx1: 4: Syntax error: Bad fd number nlbq Mon Aug 3 02:45:19 EDT 1992 bang geoff quote getdate: `"now"' not a valid date setbq defmsgid=<1992Aug3.` echo 024521 bgwait sleep done... wait 6241 ksh: X<&$fd ok nlbq ./shx: 6248 Memory fault - core dumped bang geoff quote getdate: `"now"' not a valid date setbq defmsgid=<1992Aug3.024530.6257@host> bgwait no such job: 6265 wait 6265 sleep done... zsh: X<&$fd ok nlbq Mon Aug 3 02:45:36 EDT 1992 bang shx3: event not found: /s/ [4] quote 712824337 setbq defmsgid=<..6290@host> bgwait shx7: unmatched " [9] sleep done... X:; ! echo shx 1>&2 sed 's/^X//' >shx <<'!' X#! /bin/sh for cmd in sh bash ash ksh zsh do X echo X echo $cmd: X for demo in shx? X do X $cmd $demo X done done ! echo shx1 1>&2 sed 's/^X//' >shx1 <<'!' X# ash fails this one echo -n '<&$fd ' fd=3 echo ok <&$fd ! echo shx2 1>&2 sed 's/^X//' >shx2 <<'!' X# pd ksh fails this one echo -n "nlbq " date=` date` echo "$date" ! echo shx3 1>&2 sed 's/^X//' >shx3 <<'!' X# zsh fails this one echo -n 'bang ' echo 'geoff tty?? Aug 3 02:35' | X sed -e 's/[ ].*//' -e '/!/s/^.*!//' ! echo shx4 1>&2 sed 's/^X//' >shx4 <<'!' X# ash, pd ksh fail this one echo -n "quote " expiry="now" timet="` getdate \"$expiry\" `" echo "$timet" ! echo shx5 1>&2 sed 's/^X//' >shx5 <<'!' X# ash, zsh fail this one echo -n "setbq " host=host date="`date`" echo defmsgid="`set $date; echo \<$6$2$3.\` echo $4 | tr -d : \`.$$@$host\>`" ! echo shx7 1>&2 sed 's/^X//' >shx7 <<'!' X# pd ksh and zsh fail this one echo -n "bgwait " X( X sleep 2 X echo -n "sleep done... " X) & waitcmd="wait $!" eval $waitcmd echo "$waitcmd" ! echo shx8 1>&2 sed 's/^X//' >shx8 <<'!' X# in case gcx7 is really breaks this shell sleep 3 echo ! exit 0