Stefan wrote:
[...]
In fact, how are you even running the dejagnu(1) and runtest(1)
scripts if /bin/sh does not exist? Their #! lines refer to /bin/sh...
In Guix there is an automatism to patch (only) all shebangs to the
correct absolute paths.
So you patch every script instead of installing symlinks that allow
interpreters to be easily updated...
If you search for “ sh ” usage across the DejaGnu source, then you
will find plenty of places happily using sh without /bin/. But there
is only this one usage of /bin/sh. So for consistency one might argue
to change it.
A search of the source tree for " sh " finds exactly three code files in
DejaGnu containing that word: lib/remote.exp, lib/rsh.exp, and
lib/ssh.exp. Other files are either documentation or imported.
Notably, config.sub is actually matching the string "sh" in a case block
and configure only references " sh " while attempting to determine the
PATH_SEPARATOR (in a test that assumes that /bin exists, notably) and in
a list of names under which a POSIX shell might be found.
POSIX says otherwise, you must not rely on the presence of /bin/sh;
cf.
<https://pubs.opengroup.org/onlinepubs/9799919799/utilities/sh.html#tag_20_110_16>.
The path to the interpreter can be easily substituted e.g. with
autoconf.
That is in an informative section; and it is indeed correct that
/bin/sh cannot be assumed to be a POSIX shell. The scripts that use
#!/bin/sh in DejaGnu avoid making such an assumption. That section
also says that you are supposed to be able to find a POSIX shell with
`command -v sh` but I suspect that Autoconf does considerably more
work than that to locate a suitable shell.
There is also confstr()¹, which is able to deliver a PATH, which is
guaranteed to find sh. And there is also a hint to “popen("command -p
getconf variable", "r");”
Will `command -v sh` reliably locate a POSIX sh?
A quick test at cfarm111 finds that AIX7.1 command(1) does not allow the
combination of -p and -v, although `getconf PATH` works and is defined
to return the _CS_PATH string (see
<URL:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getconf.html#tag_20_53_05>)
available to C programs using confstr(). Remember that dejagnu(1) is a
shell script, so the XCU volume of the POSIX spec is relevant, not
(confusingly) XSH.
-- Jacob