Le Tue, Nov 22, 2022 at 08:40:30AM -0700, Rebecca Cran a écrit :
> On 11/21/22 15:22, Pedro Falcato wrote:
>
> > I kind of dislike your solution. Does NetBSD ship /bin/which by default?
> > I think replacing whereis with "which -a" would be a lot better.
> > I don't think there's a 100% standard way to do this in POSIX, as which
> > isn't POSIX either, and your solution seems... hacky?
>
>
> "command" seems to be the POSIX way to do this?
> https://pubs.opengroup.org/onlinepubs/9699919799/
>
> Though "whereis python3" shows the following on my system:
>
> python3: /usr/bin/python3.9-config /usr/bin/python3.9 /usr/bin/python3
> /usr/lib/python3.9 /usr/lib/python3 /etc/python3.9 /etc/python3
> /usr/local/lib/python3.9 /usr/include/python3.9 /usr/share/python3
> /usr/share/man/man1/python3.1.gz
>
> "which -a python3" returns:
>
> /usr/bin/python3
> /bin/python3
>
> And "command -p -v" returns:
>
> /bin/python3
>
> I don't know if we need all the results from "whereis"?
The problem is when one does not know which exact version of python
is here and how, exactly, the command is named.
whereis(1) returns whatever command with python3 as prefix, while
command or "which -a" will return only exactly python3. If, on the
system, python is fully version qualified (as is the case with
pkgsrc, the opt packages framework, used on NetBSD):
which -a python3
will return nothing, since, it is python3.9 for example on the OS.
Sorry, what? This sounds so broken. How can a script shebang ever work?
For Sane(tm) systems, I propose command -v python3 + $(command -v python3) -c 'import sys; print(sys.version.split(" ")[0])',
which gives us the path to the Python 3 interpreter + the path in a relatively easy, simple way.
I think this could work mostly everywhere but apparently NetBSD since you don't provide python3? Which makes little sense in my head.