I often see #!/usr/bin/env bash
at the first line of shell scripts.
It seems to work fine to omit /usr/bin/
part on macos:
#!env bash echo Yo
Can I do that on all other Unix-like platforms?
Advertisement
Answer
Using interpreter without full path is not supported everywhere. In many cases, kernel does the shebang handling and kernel normally does not know about the environment variables, including PATH. So it needs a full path in order to find the interpreter.
That’s why #!/usr/bin/env bash
is used – bash
is located and executed by env
, so it allows bash
to be anywhere in PATH, while only requiring /usr/bin/env
to be in known location. You can’t use just #!bash
or #!env bash
, because kernel does not know, where to find them.
Using plain interpreter may work sometimes – it means that shebang handling is done by something that is aware of the environment, most likely by the active shell itself and not by the kernel.
There are good answers about the similar question also available: