Unix、类Unix系统脚本文件转成可执行命令的方法和PHP工具类实现原理

一,可执行命令的四种类型

1.1 编译好的可执行程序——处理器可以直接处理的二进制代码

1.2 jar文件——编译并打包后的java脚本
1.3 Python, Perl, Tcl, Ruby, Lua,PHP等写的脚本文件
1.4 shell 脚本

二,文件转成可执行命令
2.1 前提
2.1.1 操作用户对文件要有可执行权限,权限修改用chmod命令 chmod u+x;
2.1.2 shell知道用什么程序去执行脚本文件

2.2 原理
2.2.1 命令执行过程
首先,shell要确定文件类型也就是上面提到的那四种之一,然后是采取正确的方式执行命令。像编译好的文件一般在文件开始的字节里会包含一些特殊代码,shell可以通过这些代码确定其类型直接执行。

2.2.2 脚本文件的执行过程

2.2.2.1 shell首先要确定文件为脚本文件,脚本文件的前头甚至整个文件都是可打印的字符。确定文件类型为脚本之后,接下来要做的就是明确脚本类型是PHP脚本、Python脚本还是Perl脚本,确定脚本类型的原因是要选取正确的程序来执行任务。


composer工具使用的其中一个脚本文件

composer工具使用的其中一个脚本文件


2.2.3 脚本文件类型明确方式

通常都是用#!指定脚本类型。shell根据#!的定义选择解析器。比如,文件以#!/bin/sh 开头,说明该脚本将由sh来执行。


2.2.3.1 shebang语法

#!/解析器绝对路径 [可选参数]


atlas使用的其中一个脚本文件

atlas使用的其中一个脚本文件


解析器就是解析脚本并执行脚本文件命令的程序。


脚本文件命令化就是shebang明确解析器并给相应用户执行权限然后把文件配置到环境变量里或者直接把文件放到相应目录,关于shell命令查找过程请参考:SHELL命令查询路径——$PATH、Linux环境变量


三,命令行工具实现原理
PHP命令行工具实现原理就是把通过shebang定义了解释器的PHP脚本文件转成可执行命令、指定命令执行或者直接运行,composer、atlas等都如此。PHP依赖管理工具composer的如下使用方式都正确:
3.1 php composer.phar require atlas;
3.2 ./composer.phar reqire atlas;

3.3 移动环境变量中配置的命令目录里
3.3.1 mv composer.phar /usr/bin/composer;

3.3.2 composer reqire atlas; 


参考资料:

wiki:https://en.wikipedia.org/wiki/Shebang_(Unix)

书籍:Beginning Shell Scripting:Eric Foster-Johnson, John C. Welch, and Micah


评论0条