Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What is the purpose of using #!/usr/bin/env <sh|bash|python> shebang compared to #!/bin/bash, #!/bin/sh or #!/usr/bin/python?

share|improve this question
There is a good answer here in regards to the general use of env. – Kevin Bowen Jan 24 '13 at 9:37
up vote 11 down vote accepted

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.

share|improve this answer
Configured 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 how env python would be any different from python? – Tuminoid Jan 24 '13 at 9:15
Your PATH probably includes /usr/local/bin first. If somebody has manually installed python there, then env will call it, whereas #!/usr/bin/python will bypass it. – Robie Basak Jan 24 '13 at 9:44
virtualenv is a quite popular tool, and it installs a python executable in the working directory. You would need the env trick to get it to work correctly. – Flimm Jan 29 '13 at 21:38
@Tuminoid: you are right: env python is the same as python. 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

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.