tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: interactive shell detection in shrc
Robert Elz wrote in
<23334.1727160241%jacaranda.noi.kre.to@localhost>:
| Date: Tue, 24 Sep 2024 03:06:49 +0300
| From: Valery Ushakov <uwe%stderr.spb.ru@localhost>
| Message-ID: <ZvICmRZQjRJoB7m-%snips.stderr.spb.ru@localhost>
|
|| I also wanted to drop the ${1+"$@"} workaroud for the v7 shell bug
|| which I'm pretty sure we are not going to hit in this day and age on a
|| NetBSD system, but I won't to get down that rabbit hole.
|
|That one isn't a rabbit hole, by all means, go ahead and delete that
|usage, you are unlikely to find broken "$@" in any shell anyone would
|actually want to use any more - that was a truly ancient bug being
|worked around, as distinct from a difference from what is required,
|which return being ignored in a script is.
Sven Maschek [1]:
Which Bourne shells exactly need the workaround?
These shells behave the old way and need ${1+"$@"}:
Certainly: /bin/sh on 7th edition (aka Version 7). And thus also /bin/sh on original BSDs, until these shipped the Almquist shell (after 4.3BSD-Reno)
HP-UX 8, 9 /bin/sh, HP-UX 10.x, 11.x /usr/old/bin/sh (as /bin/sh has become a ksh)
OSF1/V4 and V5 aka Tru64 /bin/sh
Ultrix /bin/sh and /bin/sh5
Sinix 5.20 /bin/sh in both the "ucb" and the "sie" universe
In contrast, these Bourne shell variants behave the modern way:
8th edition (aka Version 8) /bin/sh
SunOS 4.1.x and SunOS 5.x /bin/sh
IRIX 5 - IRIX 6.3 /bin/sh, IRIX 6.4+x /usr/bin/bsh (as /usr/bin/sh has become a ksh)
AIX 3.2.4 /bin/sh, AIX 4.x /usr/bin/bsh (as /usr/bin/sh has become a ksh)
OpenServer 3 ff. /usr/bin/sh
MUNIX 3.1 (Cadmus, SVR3.1) /bin/sh
Sinix 5.20 /bin/sh in the "xopen" universe
Oh wait, there's another meaning
It's also a workaround for a problem in some shells if you want to use the flag u ("error upon using empty variables")
and "$@" (or $@, "$*", $*) is used without arguments. Example:
$ shell -cu 'echo "$@"; echo not reached'
@: parameter not set
$ shell -cu 'echo ${1+"$@"}; echo ok'
ok
At least these shells need that workaround:
bash-4.0.0 ... -4.0.27
^ Somewhere around 2010.
dash-0.4.6 ... -0.4.18
all ksh88
ksh93 until release t+20090501
pdksh-5.1.3, -5.2.14
mksh before R39 (as pdksh descendant)
posh < 0.10 (as pdksh descendant)
NetBSD 2 ff. /bin/sh
all traditional Bourne shells
[1] https://www.in-ulm.de/~mascheck/various/bourne_args/
--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)
Home |
Main Index |
Thread Index |
Old Index