> Since xargs happens to use execvp(), the executable gets executed by "a
> known command interpreter". This command interpreter might be sh, python,
> emacs, or whatever.
>
> So, the *omission* of #! renders a script non-portable, when that script is
> invoked like an executable.
Anyway, there seems to be an agreement that execvp() needs to execute scripts
through a command interpreter, unlike execv().
* The glibc source code does so, see glibc/posix/execvpe.c.
Also the description of this commit:
https://sourceware.org/git/?p=glibc.git;a=commit;h=283d98512272a12cb84e7798c23edbdf1adb287d
* The musl author agrees as well:
https://www.openwall.com/lists/musl/2018/03/09/1
https://www.openwall.com/lists/musl/2018/03/09/2
https://www.openwall.com/lists/musl/2018/03/11/1
So, the ENOEXEC error is a bug in musl. But POSIX does not specify that the
command interpreter for scripts without shebang is /bin/sh; therefore IMHO
it would be good not to make this assumption.
Bruno