bootstrap.sh 代码分析

2021SC@SDUSC

由于之前并没有学过shell的相关语法,因此学了一些基本的shell语法再来分析。但是依然相当困难:

bootstrap.sh的全代码如下:

首先从整体来看文件开局定义了一个变量。然后构造了一个provide函数和一个require函数,并且provide 最后提供了 'bootstrap'参数。具体的细节依然是看不懂。

 从注释中我们知道改文件是用来引导模块系统的。

用法:1.在主脚本中创建文件 2.需求模块名称 。在模块中需要模块依赖,定义模块和提供”模块名称“。

第一行代码创建了module_root_dir,该变量为模块根目录的名称。存在一个BASH_SOURCE[]数组。dirname +该数组的第一个值构成一个变量。然后模块根目录的名称就是这个变量的值。

再看provide函数内部的代码。先创建了一个本地变量module_name,该值等于第一个参数。provide函数第二行代码刚开始整不明白,去网上找了好久都没找到+=这个用法。然后就自己去shell上试着用。+=是讲b当作字符串使用。+=后面的内容以字符串的方式加到原有内容的后面。所以这个加载的模块名是之前模块的名称不断加在其后。但是,从整体可以看到,整个provide函数并没有read任何参数,而是直接被提供了参数"bootstrap",所以loaded_modules只能是无数个”bootstrap"。(或许可以从这个看出引导了多少模块?)但是从后面看出来,loaded_modules是已导入模块,require或许才是要新提供的。provide只用前面的bootstrap,所以是引导模块。

再看require函数,本地变量赋值第一个参数。

然后就碰到我一直没找到的内容了。<<<是什么意思。在网上也找不到相关内容。做相关猜测最后都报错了。然后将这段代码复制到test.sh中,然后chmod +x加了权限后执行并没有报错。

所以只能猜测了。grep -qF 应该是从相应文件中获取所有模式并抑制所有正常的输出。大概是如果module_name在loaded_module中已存在了?然后就直接返回。如果不存在。那么创建一个模块根目录下的该文件。假设module_root_dir的值为a,导入进来的参数为b。则创建a/b.sh文件。之后再检查一遍,如果已存在该文件了。就重定向输入到标准错误文件中,报一个Error:加载该文件失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值