On 21Jul2019 15:47, Peter J. Holzer <hjp-pyt...@hjp.at> wrote:
On 2019-07-21 09:04:43 +1000, Cameron Simpson wrote:
I'm with Tim Daneliuk. The environment matters and should be honoured except
in extremely weird cases.

I don't think that all the scripts in /usr/bin are extremely weird
cases.

I think I'd better add some nuance to my stance.

I've no problem with all the scripts shipped from an OS vendor having #!/usr/bin/python (or whatever fixed path) in them. They have been released tested against the system python and should _expect_ to run against it. My position here is that the entire OS distribution constitutes a working (and via the #! controlled) environment.

But consider third party tools. Including personal tools, but basicly anything from _outside_ the local system in terms of authorship.

Particularly with a language like Python which is strongly backwards compatible, they should generally use "#!/usr/bin/env python" (or python2 or python3 as appropriate, when that matters) so that they can run in the environment they find themselves in.

1: You can can always execute a script via a specific interpreter explicitly.

2: If you want to test a script it is easier to provide an environment that exercises the script in a particular way than to hand patch the shebang lines on every run/reconfig.

3: If the script (per one of Chris' examples) requires a specific python such as 3.6, you can always go "#!usr/bin/env python3.6" in the script to express the target version and provide a executable "python3.6" name in you environment. I keep a personal ~/bin-local directory for just this kind of per-host stuff myself, and of course one can do the same thing in places like venvs or /usr/local/bin etc. And thus _still_ leave the script itself without a hardwired path.

[...]
If you require a specific outcoming, set a specific environment. It is under
your control. Control it.

For your specific example, "man youtube-dl" _is_ affected by the
environment. It honours the $MANPATH variable.

MANPATH is explicitely intended to control man.

But man doesn't fail if you set your PATH to something weird. It will
still invoke /usr/bin/groff even if that isn't in the PATH.
(I expected that there is also an environment variable to control that
but the manpage doesn't mention one).

Heh.

I wrote my own "man" yonks ago for various reasons. Guess what? I expect to type "man" and get mine most of the time, but type "man" when not me and get /usr/bin/man (absent weirdness). That applies interactively and also in scripts.

Same philosophy. Use the command name to express intent and the environment to choose the implementation of the intent. And so also in the shebang lines.

For Peter J. Holzer, if we must play the "I've been doing this forever" game: I've been sysadmining etc longer than your 25 years and disagree with
you.

That's fine. Unlike Tim I don't claim that anybody who disagrees with me
must be a newbie.

Aye; sorry for the snarkiness. Which is why I'm disagreeing on some things instead of asserting that you're wrong, because you're not "wrong".

Cheers,
Cameron Simpson <c...@cskk.id.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to