On Tue, Nov 22, 2022 at 4:26 PM wrote: > 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. Pedro