#! /usr/bin/env considered harmful - Printable Version
+- nixers (
+-- Forum: Development & Graphics (
+--- Forum: General Shell Scripting (
+--- Thread: #! /usr/bin/env considered harmful (/showthread.php?tid=1988)
Pages: 1 2

#! /usr/bin/env considered harmful - jkl - 14-09-2016

Good read:

RE: #! /usr/bin/env considered harmful - venam - 14-09-2016

This is highly informative.
Next week podcast is about "default programs", I've added the subtitle: "Welcome to hell, choose your default program!".

I've only scrapped the subject so far, just prior knowledge, but it's not looking good, it's a mess.

RE: #! /usr/bin/env considered harmful - z3bra - 14-09-2016

That space between the bang and path is bothering me...
IMO, the only VALID bang you should rely on is #!/bin/sh. Every single bit of it is defined by POSIX, and is made for portability.

RE: #! /usr/bin/env considered harmful - josuah - 14-09-2016

On android, #!/bin/sh does not even works, as there is no /bin at all.

Such a bad OS for command line, but the projects for pocketable devices running linux are so rare these days!

Alternative is to build its own with a raspberry.

Useful article, as I was not aware of these issues.

RE: #! /usr/bin/env considered harmful - robotchaos - 14-09-2016

@josuah, what about tizen?

EDIT: taking this off topic...

I wish my corp firewall didn't block github. I'd really like to read this. Will read it soon though

RE: #! /usr/bin/env considered harmful - jkl - 14-09-2016

(14-09-2016, 01:36 PM)z3bra Wrote: That space between the bang and path is bothering me...

It's debatable if it was actually added intentionally or if it just "slipped through" in the affected BSD versions.

RE: #! /usr/bin/env considered harmful - pranomostro - 14-09-2016

> Not the right interpreter is found

Generally we then have to ask for the better alternatives. If we specify a path, we can never be sure it works (because none of this shit is standartized, except the location of /usr/bin/env).

> No dependencies or modules

I can't say anything about that since the most things I use scripting for is either rc or lua, where I don't happen to need modules or dynamically linking libraries. Someone smarter than me comment on this please.

> no flags

This is really stupid. This is one of the stupid unix limitatians I talked about, things that don't make any sense today but are still included.
But it applies to other shebangs as well, so I would say fuck that.

> wrong configuration of $PATH

Then your user is a moron and it is his own fault. $PATH should never be changed, only appended to.

The solutions given are both bloated and unportable. env seems like the cleaner solution to me. I don't like using tho whole path since people thought it would be a good idea to put binaries into different directories. Ugh.

RE: #! /usr/bin/env considered harmful - robotchaos - 14-09-2016

i) correct interpreter indeed. If you are on a shared server and are setting up a cron job that uses the absolute path to the python binary /usr/bin/python2.7, can you even still be sure that the executable is the one intended to complete the job? Or does shebanging absolutely give you checksumming powers?


iii) byoi(nterpreter)

iv) no flags? fine, don't use shebang on interpreted scripts. $ /usr/bin/python2.7 -RE ~/myscript

v) manage $PATH -- I fail to see the problem

vi) I feel like #!/usr/bin/env is suitable in the most properly configured environments; and in that case, more suited

Good read though :)

RE: #! /usr/bin/env considered harmful - z3bra - 15-09-2016

(14-09-2016, 05:34 PM)josuah Wrote: On android, #!/bin/sh does not even works, as there is no /bin at all.

Android is not a POSIX Operating System, that's why :)

RE: #! /usr/bin/env considered harmful - TheAnachron - 15-09-2016

I actually agree with pranomostro. That article also seems to be mosty linked to Python.
I use #!/usr/bin/env very often. It makes the user flexible to do as he wish.
If he messes this one up, it's not up to the programmer.