!/usr/bin/python与#!/usr/bin/env python的区别
我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样
#!/usr/bin/python
或者这样
#!/usr/bin/env python
这两者有什么区别呢?
前一个很好理解,就是在执行这个脚本的时候用/usr/bin下python命令去执行。
那#!/usr/bin/env python 这个是什么意思 ?
当我执行 env python 时,自动进入了 python console 的模式。
这是为什么呢?这样做和直接执行 python 好像没什么区别。
查阅man env命令可以看到,env的作用是列出所有的环境变量。
ENV(1) User Commands ENV(1)
NAME
env - run a program in a modified environment
SYNOPSIS
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
DESCRIPTION
Set each NAME to VALUE in the environment and run COMMAND. # 将name=value设置给环境,然后在环境中执行command。换句话说,env命令为command的执行准备了一个执行环境
Mandatory arguments to long options are mandatory for short options too.
-i, --ignore-environment
start with an empty environment
-0, --null
end each output line with 0 byte rather than newline
-u, --unset=NAME
remove variable from the environment
--help display this help and exit
--version
output version information and exit
A mere - implies -i. If no COMMAND, print the resulting environment.
env python就是给python命令指定一个执行环境,这个执行环境是由env命令列出的环境变量组成的。
当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin )这几个路径里去依次查找名为python的可执行文件。
找到一个就直接执行,上面我们的 python 路径是在 /usr/bin/python 里。
那么对于这两者,我们应该使用哪个呢?
一般而言,应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都在 /usr/bin/python 。