think 是一个可执行文件,位置:网站根目录
内容:1 定义项目路径 2 加载cll框架文件
shell脚本里第一行的:#!/usr/bin/env php 什么意思
这句#!的含义就是,按照环境变量PATH寻找第一个php程序来执行。
#!/usr/bin/php表示,直接使用/usr/bin/php来执行脚本,但是这个路径下没有php可执行命令呢?就会报错
最近在写PHP脚本发现有些脚本有这么个写法,长见识了。
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它。比如php脚本的第一行可以写成如下几种格式
#!/usr/bin/php
#!/usr/bin/env php
#!/usr/bin/env -S -P/usr/local/bin:/usr/bin php
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} php
#!/usr/bin/env php写法的好处这种写法主要是为了让你的程序在不同的系统上都能适用。
不管你的php是在/usr/bin/php还是/usr/local/bin/php#!/usr/bin/env php会自动的在你的用户PATH变量中所定义的目录中寻找php来执行的。
加上-P参数使用来指定一些目录去寻找php这个程序#!/usr/bin/env -S -P/usr/local/bin:/usr/bin php的作用就是在/usr/local/bin和/usr/bin目录下寻找php。
为了让程序更加的有可扩展性,可以写成如下代码:
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} php
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl
(-S-P之间没有空格)那么它除了在这两个目录寻找之外,还会在PATH变量中定义的目录中寻找。
#!/usr/bin/php写成 #!/usr/bin/env php会好些,当然更好的是#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} php一般使用#!/usr/bin/env php这种写法就能兼容大部分服务器了。
同理,python脚本开头写法:
#!/usr/bin/env python
我的执行命令
cd /www/wwwroot/www.xxx.com/ 进入网站根目录(也就是think文件所在目录)
php think spider --user php软连接到php的安装目录下的可执行文件(/www/server/php/73/bin/php)上面已经解释过
env php think spider --user 这个和上面的直接用php执行在命令行下没有区别,都是从PATH环境变量里按顺序找php可执行命令,但是如果是在shell脚本就有区别了,详情请看shell脚本里第一行的:#!/usr/bin/env php 什么意思里的解释
/usr/bin/php think spider --user php软连接到php的安装目录下的可执行文件(/www/server/php/73/bin/php)
/www/server/php/73/bin/php think spider --user 直接用php的可执行文件执行
问题1
为什么必须要进入think文件所在的目录才能执行而写全路径就不可以 比如:env php /www/wwwroot/www.xxx.com/think spider --user
因为他的think可执行文件里 加载框架引导文件用的是.
// 加载框架引导文件
require './thinkphp/console.php';
你改成 require '/www/wwwroot/www.xxx.com/thinkphp/console.php';
或者__DIR__.'/thinkphp/console.php';
就可以用env php /www/wwwroot/www.xxx.com/think spider --user命令执行了,不用必须进入网站根目录了,只要写全路径就可以