When writing shell scripts or other types of executables, you often put a directive at the top of the file to indicate which kind of interpreter to use.
#!/bin/python
Oh wait, that didn’t work?
#!/usr/bin/python
Okay, that worked on my Mac. But why all the guesswork? There is another command that is better.
Introducing env. Use it as a directive like so:
#!/usr/bin/env python
And if it’s a bash script:
#!/usr/bin/env bash
env is kinda like which. It takes the first argument and figures out the full path of that, and uses it as the directive
man env to read more about it.
Basically using #!/usr/bin/env INTERPRETER makes your script more portable
portability (adj.)
the ability to run your script anywhere, on any OS/platform
The holy grail goal of programming/CS = write once, run everywhere
It is somewhat circular in that it depends on env living inside of /usr/bin/, but I believe it is a convention that is much more rarely broken than where python or bash lives.
convention (n.)
another CS vocab word.
The quality of being predictable, doing expected things.e.g you walk into a dark room, you expect the light switch to be near the doorway opposite of the door hinge, not a mousetrap clamping down on your fingers when you reach along the wall.
