Proper shebang for python3
Cameron Simpson
cs at cskk.id.au
Mon Jul 22 19:13:58 EDT 2019
On 22Jul2019 21:14, Eli the Bearded <*@eli.users.panix.com> wrote:
>In comp.lang.python, Tim Daneliuk <info at tundraware.com> wrote:
>> On 7/20/19 1:20 PM, Chris Angelico wrote:
>> > On Sun, Jul 21, 2019 at 4:13 AM Michael Speer <knomenet at gmail.com> wrote:
>> >> You may want to use `#!/usr/bin/env python3` instead.
>
>I no longer have one to verify, but I recall Solaris boxen used /bin/env
>not /usr/bin/env.
That is my recollection too. A pain point. To the point that I'd hand
make a /usr/bin/env symlink.
Why _any_ modern system has anything other than /bin in the base install
escapes me. In the distant past /sbin and a distinct /usr with its own
bin had their values, but these days? Bah!
(I'm not complaining about /usr/local/bin here - keeping added stuff
distinct from the vendor/distributor stuff is very valuable.)
>> So, no, do NOT encode the hard location - ever. Always use env to
>> discover the one that the user has specified.
>
>But wait, you just hard coded the location of env...
Yeah. Too many boots, too many straps.
>> The only exception is
>> /bin/sh which - for a variety of reasons - can reliably counted upon.
>
>BZZZZ! Fully half of my work porting trn4 to my cellphone was fixing all
>the places that ancient build system believed /bin/sh was the name of
>sh. In that environment (Termux shell on an Android phone) the location
>is /data/data/com.termux/files/usr/bin/sh (and env is also in
>/data/data/com.termux/files/usr/bin hahaha).
I'd do the symlink thing there too, if feasible. (Counterpoint: I've a
DVR here where changes to / don't survive a reboot and there's no
/etc/rc.local like file which survives a reboot either.)
POSIX systems have a /bin/sh. I would move heaven itself to ensure this.
>Even on more traditional environments -cough-Solaris-cough- /bin/sh may
>exist but be so ancient as to break things that work elsewhere. "^" as
>a synonym for "|", is a noteworthy gotcha.
Aye. I still quote ^ in my scripts to this day for this reason. But
then, I learnt shell programming on V7 UNIX, well older than Solaris.
>Figuring out where things are on the user's path is a laudable goal, but
>do it only at install time, not run time, for consistent runs.
Perhaps. Consistent runs require consistent environments. That often
includes executables.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list