On Mon, 2019-02-18 at 13:36 +0100, Joerg Schilling wrote:
Mischa Salle
wrote: I might have missed part of this (very long) discussion, but in my opinion - using /bin/sh means you SHOULD only use constructions which are POSIX compliant. - when you want to use bashisms, use /bin/bash. The same applies to other shells.
This is finally the right conclusion even thouh POSIX does not make any statements on what /bin/sh is.
I don't think that this is the right conclusion. Here's why.
I've been told in this discussion that the POSIX shell standard for
"allows extensions". IOW, it only defines a minimal set of features,
and implementations are free to add more features on top and still
"comply" with the standard. Therefore the fact that bash, invoked as
"/bin/sh", supports the non-POSIX '[[ ]]' syntax doesn't make it non-
compliant.
We need to define without ambiguity under what conditions a _shell
script_ complies with the feature set of "/bin/sh". That means that we
need to have a _test procedure_ (#). We could say that "code is
compliant iff it runs without errors under every POSIX-compliant shell
(*)". But that's hard to test, as we'd have to test with every POSIX-
compliant shell out there, and we may not even know them all. We also
don't want to test by human beings parsing the code (even if that's
basically what Jan is doing today). Rather, we need to settle on an
actual shell implementation, and define "compliant" by reference to
this implementation: "shell code is compliant iff it runs without
errors under this implementation" (*).
That implementation could be bash in POSIX mode, meaning that e.g.
'[[ ]]' would be allowed. Alternatively, it could be a minimal shell
like "pbosh".
So far the discussion in this thread did not come up with a prime
candidate for being that reference shell. dash has been propoposed and
then harshly dismissed. ash, likewise. I suppose that Jörg would
propose "pbosh", and it seems to come closer to the ideal of a "strict"
POSIX shell as anything else mentioned up to now. But I'd call it a bit
exotic. It doesn't seem to have a lot of real-world users under
openSUSE.
I still fail to see the benefit of choosing anything else than bash in
POSIX mode for /bin/sh, unless we want to pursue the long-term goal to
be able to run (a minimal) openSUSE completely without bash.
Regards,
Martin
(#) that doesn't mean we actually have to test every shell code
snippet, but we _could_ in case of disagreement.
(*) ... and yields correct results for a reasonable set of possible
inputs.
--
Dr. Martin Wilck