Index | Thread | Search

From:
Philip Guenther <guenther@gmail.com>
Subject:
Re: Support for /usr/bin/env -S (kind of)
To:
Omar Polo <op@omarpolo.com>
Cc:
Matthias Kilian <kili@outback.escape.de>, tech@openbsd.org
Date:
Sat, 19 Jul 2025 00:46:58 -0700

Download raw body.

Thread
On Fri, Jul 18, 2025 at 11:33 PM Omar Polo <op@omarpolo.com> wrote:
>
> Matthias Kilian <kili@outback.escape.de> wrote:
> > Hi,
> >
> > On Fri, Jul 18, 2025 at 06:23:45PM +0200, Manuel Giraud wrote:
> > > For example, one could make the following silly script:
> > >
> > > #!/usr/bin/env -S cat -b -e
> >
> > In addition to what other people already said, that #!/usr/bin/env
> > thing in general is an absolute antipattern IMHO.
>
> no opinion on -S, but i'm curious about this, why do you think it's an
> antipattern?
>
> curious because i've used it a bit, it's handy for stuff like perl or
> awk that may be at different paths (/bin vs /usr/bin vs /usr/local/bin
> depending on the OS, while env is *generally* always at /usr/bin/env)

In my experience, it works when _any_ install of the required
interpreter is acceptable and fails when there may be multiple
installs, only some of which will be able to run the script.

I.e, if the OS supplied version would work and you don't want to have
to update the #! line at install time then sure, but if you can't
depend on the OS supplied version and are expecting the user to have
the required, newer version earlier in their $PATH, then you will come
to grief when it gets invoked via a context where PATH isn't set as
expected and things blow up.  I have seen the bug reports for the
latter as a developer at two different commercial software companies
and personally had to fix it at one of them.

I have seen it more in python scripts, which I hypothesize to be
related to historical install instability in that ecosystem, but I
lack sufficient experience to be sure.


Philip Guenther