- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对
Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很熟悉,在所有的Shell编程的书中都会提到#!/bin/bash,而这里到底包含了些什么?对操作系统而言,这一行字符串意味着什么?你可能会说,不就是会让/bin/bash程序来解释这个脚本程序吗?当然你是对的,看看我们的标题,这里我们谈谈解释器,让我们一起来看看脚本文件里的第一句到底对系统而言意味着什么。但有一点我们可先明确一下,所谓解释器就是指#!行后面的可执行的程序。
一、我们从exec族函数谈起
如果你从不写C程序,可能需要对本节的内容看得更为仔细并且试验一下。
代码:
Quote:
#include
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]); exec族函数一共有上面所列的5个,作用都是一样:执行一段新的代码。区别只是向函数传递的参数方式不同而已,我在这里讲讲execl函数:第一个参数path是指向设置了执行位文件的路径,后面的可变参数列表分别指向了传递给此执行文件的参数列表(包括了参数0,即是执行文件的名称)。最后一个参数为(char *) 0,表示参数列表结束。
对于解释器,exec族函数是这样做的(以execl为例),如果path是指向了一个脚本,脚本的第一行以#!开头,则这样调用:
以#!后面的字符串为命令,后面加上execl参数列表中指定的参数列表,这样形成了新的程序执行。
下面我们以例子来验证这个结果:
下面这个C程序的作用是回射所有命令行参数。
代码:
QUOTE:
/* Program source : showargs.c *
* Program name : showargs */
#include
int
main(int argc, char *argv[])
{
int i;
for(i = 0; i );
}
return 0;
}编译:gcc -o showargs showargs.c
执行:
代码:
QUOTE:
$ pwd
/home/kiron
$ ./showargs arg1 arg2
arg[0]: ./showargs
arg[1]: arg1
arg[2]: arg2我们在同一个目录下再写一个脚本:
代码:
QUOTE:
#!/home/kiron/showargs addargs我没有打错,是的,这个脚本就只有一行,
英文代码 这个脚本我们命名为testexec,加上执行位后,执行情况如下:
代码:
QUOTE:
$ ./testexec
arg[0]: /home/kiron/showargs
arg[1]: addargs
arg[2]: ./testexec怎么会这样?我猜会有人对第2个参数./testexec不理解,暂且卖个关子,再引出一个C程序:
代码:
QUOTE:
/* Program source : mytest.c *
* Program name : mytest */
#include
int
main(void)
{
execl(/home/kiron/testexec, testexec, arg1, arg2, (char *) 0);
return 0;
}编译:gcc -o mytest mytest.c
执行:
代码:
$ ./mytest
arg[0]: /home/kiron/showargs
arg[1]: addargs
arg[2]: /home/kiron/testexec
arg[3]: arg1
arg[4]: arg2 仔细观察上面的三个例子,答案开始浮出水面了。正如在开始时讲到的,exec族函数的处理是把#!后面的字符串为命令,后面加上execl参数列表中指定的参数列表,这样形成了新的程序执行。分析一下mytest.c源程序,execl把命令的结果是这样执行的/home/kiron/testexec的内容是#!
您可能关注的文档
- 道德仡佬族苗族在.doc
- 道德假言推理与准实在论的一个困难.doc
- 道德垄断(计划道德)与对内开放.doc
- RNAi表达载体构建 近年来的研究表明,一些短片断的双链RNA可以.doc
- 道德复习2012.doc
- RF无线遥控车制作与探讨.doc
- 道德形而上学的奠基的摘抄.docx
- Robocode机器人编程竞赛规程 .doc
- Routledge Handbook of Discourse Analysis.doc
- RS232,RS485的区别 .doc
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷附参考答案【完整版】.docx
- 部编版五年级下册道德与法治 期末测试卷附答案(达标题).docx
- 最新部编版六年级下册道德与法治期末测试卷【典优】.docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷附参考答案【实用】.docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷含答案【完整版】.docx
- 新部编版五年级下册道德与法治期末测试卷附答案(培优).docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷附答案(预热题).docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷ab卷.docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷【中心小学】.docx
- 部编版一年级上册道德与法治第二单元《校园生活真快乐》测试卷附完整答案【全优】.docx
最近下载
- 2025年上半年教师资格证考试《教育教学知识与能力》(小学)真题.pdf
- 2021年广东省3+证书高职高考真题(英语)含答案.doc VIP
- (中药足浴方选.doc VIP
- 2024年甘肃省农垦集团有限责任公司人才招聘469人笔试参考题库附带答案详解.doc
- 新版大型养路机械使用管理规则.pdf VIP
- 湖北省武汉市硚口区2023-2024学年七年级下学期期末数学试题(解析版).docx VIP
- 品管圈提高早孕建册率ppt课件.pptx
- 环氧树脂及环氧树脂胶粘剂的基本知识.docx VIP
- 三维重建模型 内窥镜图像综合分析软件产品技术要求renxing.pdf
- 一般工业固体废物名录(2018).pdf
文档评论(0)