What is the purpose of using #!/usr/bin/env <sh|bash|python> shebang compared to #!/bin/bash, #!/bin/sh or #!/usr/bin/python?
Asked
Active
Viewed 2,952 times
19
-
4There is a good answer here in regards to the general use of env. – Kevin Bowen Jan 24 '13 at 09:37
2 Answers
11
Some people might use a different python (perl, etc.) than the system one. /usr/bin/env python would run the version configured as the current one, possibly making the script more portable.
On the other hand, reportedly, some systems do not have /usr/bin/env. Also, you cannot use #!/usr/bin/env foo x as a replacement for #!foo x, because foo x will be interpreted as a single argument. So the value of the approach is debatable.
Andrea Corbellini
- 15,826
choroba
- 9,643
-
1Configured where? From
info coreutils 'env invocation'I can see this form of calling makes sure it is external binary instead of shell built-in, but no indication howenv pythonwould be any different frompython? – Tuminoid Jan 24 '13 at 09:15 -
4Your
PATHprobably includes/usr/local/binfirst. If somebody has manually installed python there, thenenvwill call it, whereas#!/usr/bin/pythonwill bypass it. – Robie Basak Jan 24 '13 at 09:44 -
2
virtualenvis a quite popular tool, and it installs a python executable in the working directory. You would need theenvtrick to get it to work correctly. – Flimm Jan 29 '13 at 21:38 -
2@Tuminoid: you are right:
env pythonis the same aspython. However the problem is that you can't write a shebang like#!python: you need to specify a full path. – Andrea Corbellini Jan 29 '13 at 22:36