[External] : configure shell game

Jan Pechanec Jan.Pechanec at oracle.com
Wed Jun 3 01:56:18 AEST 2026


On Tue, Jun 02, 2026 at 10:28:41AM -0500, Nico Williams wrote:
> On Tue, Jun 02, 2026 at 05:11:44PM +0200, Jan Pechanec via openssh-unix-dev wrote:
> > /bin/sh on Solaris 11+ is ksh93 which considers ``, and documents it in
> > its man page, as obsolete.  Retrospectively, using ksh93 as /bin/sh was
> > not a good decision but it would be close to imposible to change it now.
> 
> I thought ksh93 recognizes when it's invoked as 'sh' and tries to act as
> a POSIX shell in that case.  Unless its POSIX mode is incomplete in
> obnoxious ways I wouldn't say it was a mistake to make ks93 /bin/sh.  (I
> do think it was a mistake though.)

No, ksh93 does not work like that, running it as /bin/sh does not change
its behavior.  Well, unless it would be something hidden in the code and
undocumented.

It's posix mode is complete, I believe (well, likely not with the latest
one from 2024), but to make it short, the biggest problem to have it for
/bin/sh is that it has too many features for that, and bugs keep showing
up.  And there is no compatible upstream with the original ksh93.

I believe that dash is a great replacement for /bin/sh when the
situation allows it.

> 
> > We seriously considered that but as it would likely break large amount
> > of existing user scripts using ksh93 features without explicitly calling
> > /bin/ksh in the shebang, we decided against that.
> 
> I commend you for not making such a breaking change.
> 
> > ksh93 issues the warning with the -n option, which is used in
> > test-exec.sh.  And it does not distinguish between syntax errors and
> > warnings.
> 
> Syntax errors don't cause /bin/sh -n to exit with an error?  Or warnings
> cause it to exit with an error?  The former would be quite bad and worth
> fixing; the latter would be quite obnoxious and also worth fixing.

It works as expected - syntax errors make ksh93 exit with a non-zero,
and warnings are non-errors.  However, you cannot say "be quiet on
non-errors" so you will always get those warnings with -n.

> The warning message is somewhat useful: $() is POSIX now, and $() is
> much better than ``.

I agree but it's "obsolete" by ksh93 only, the POSIX sh spec makes those
constructs equal.

> Users usually can't do anything with such warnings, which makes them
> more an annoyance than anything.

+1

-- 
Jan Pechanec <jan.pechanec at oracle.com>


More information about the openssh-unix-dev mailing list