I know shebang line like this:
#!/bin/sh
but I found out I can also use shebang line like this:
#!/usr/bin/env python3
This confuses me, can someone explain to me how Linux will process this one?
env
is the name of a Unix program. If you read the manual (man env
) you can see that one way to use it is env COMMAND
, where in your case, COMMAND
is python3
.
According to the manual, this will
Set each NAME to VALUE in the environment and run COMMAND.
Running env
alone will show you what NAMEs and VALUEs are set:
$ env
TERM=xterm-256color
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
…
Therefore, /usr/bin/env python3
is an instruction to set the PATH
(as well as all the other NAME+VALUE pairs), and then run python3
, using the first directory in the PATH
that contains the python3
executable.