关于脚本文件首行声明

之前在学习python的时候,发现总是会在python文件的第一行声明文件的执行解释器。例如:

#!/usr/bin/python

表示声明该文件是由/usr/bin/python程序执行的脚本。

  • 目前发现这种声明脚本执行方式的写法有两种。

  • 第一种就是上面这种 #!/usr/bin/python

  • 还有一种是 #!/usr/bin/env python

两种写法有什么区别?

  • #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;

  • #!/usr/bin/env python 这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。

可以看出,第一种写法是直接指定了绝对路径下的某个程序作为解释器;第二种写法是根据当前的环境配置寻找解释器。

其实,PHP脚本也是做类似的声明

例如我现在有一个PHP的脚本文件(tast.php),是用于在服务器上通过定时任务调用的。

  1. 当task.php内容如下时,手动执行该文件的方式是:php tast.php
<?php
echo "hello world";
  1. 当task.php的首行加上解释器声明时,则可以直接通过文件名执行而不需要输入前面的 php , ./task.php
#!/usr/bin/env php
<?php
echo "hello world";